Загрузка файла без атласа текстур

Обсуждение специальной версии Magic Particles (Dev), предназначенной для разработчиков игр.

Загрузка файла без атласа текстур

Сообщение GadGet » Чт окт 16, 2014 2:11 pm

Добрый день.
Как я понял из справки, то API позволяет как загрузить файл и подгрузить атлас текстур, так и загружать файл без атласа тектур?
Даже если вы используете API, то дублировать ptc-файлы режимом "для API" совсем необязательно. API будет без проблем открывать и обычные ptc-файлы

Мои действия:
1. удалил файл example3d.ptc и папку textures из opengl_win_android_wrapper_140704\opengl_win_android_wrapper\_bin3d
2. добавил файл 3d_fireworks.ptc в папку opengl_win_android_wrapper_140704\opengl_win_android_wrapper\_bin3d
3. запустил opengl_win_android_wrapper_140704\opengl_win_android_wrapper\_bin3d\opengl3d.exe

Результат странный, файл открывается, но не понятно что с текстурами. В какую сторону копать, чтобы исправить ситуацию? Возможно ошибка в LoadTexture Wrappera? (использую с директивой #define OPENIL)

И ещё вопрос, я верно понял что присутствует возможность динамически подгружать файлы с текстурами внутри файла?
GadGet
 
Сообщения: 8
Зарегистрирован: Чт окт 16, 2014 1:53 pm

Re: Загрузка файла без атласа текстур

Сообщение Odin_KG » Чт окт 16, 2014 3:56 pm

Здравствуйте

Как я понял из справки, то API позволяет как загрузить файл и подгрузить атлас текстур, так и загружать файл без атласа тектур?

Текстуры могут храниться внутри ptc-файла либо можно сгенерировать внешние текстурные атласы. Чтобы сгенерировать атласы используйте: "Файл -> Сохранить как.. (для API)" Этот вариант хорош для релиза, так как атласы будут подготовлены заранее. Для разработки удобнее, когда текстуры хранятся внутри ptc-файлов, но в этом случае атласы должны быть построены уже с помощью API. Враппер умеет работать с любым из вариантов и даже можно их смешивать для разных ptc-файлов.

Внутренние текстуры хранятся внутри ptc в виде образов файлов, т.е. прямо png и будет хранится. Для загрузки пользователь получает адрес образа файла в ОЗУ и длину.

Возможно ошибка в LoadTexture Wrappera? (использую с директивой #define OPENIL)

OPENIL - это загрузка текстур с помощью библиотеки DevIL (она же OpenIL). Честно говоря, этот режим остался только по причине того, что когда-то я использовал эту библиотеку для загрузки картинок в OpenGL, но потом упростил всё это дело. В настоящий момент утверждать, что там всё работает корректно я не могу, хотя когда-то работало. В любом случае этот режим только для библиотеки DevIL, и я бы его не включал по другим причинам.

И ещё вопрос, я верно понял что присутствует возможность динамически подгружать файлы с текстурами внутри файла?

Вопрос не очень понятен. Враппер работает так: следит за тем, какие эмиттеры были загружены и какие уничтожены, и перед тем, как визуализировать изображение, обновляет текстурные атласы в соответствии с этими изменениями в эмиттерах. Т.е. враппер понимает, что если эмиттер был выгружен, то его текстуры стали не нужны и он освободит место в атласе. В дальнейшем эта "дыра" может быть заполнена текстурами другого эмиттера. Правда, в таких тонкостях это происходит только если не используются сгенерированные внешние атласы - они загружаются/удаляются только целиком и пустот там возникать не может.
Вообще пользователь может делать с текстурами всё что ему захочется, так как он может менять текстурные координаты и подставлять любую текстуру. Грузить текстуры, естественно, тоже можно когда угодно, лишь бы они были загружены в момент рисования эмиттера.
Аватара пользователя
Odin_KG
Administrator
Administrator
 
Сообщения: 841
Зарегистрирован: Чт янв 15, 2009 2:57 pm

Re: Загрузка файла без атласа текстур

Сообщение GadGet » Чт окт 16, 2014 4:04 pm

Спасибо, принципе понятно, это то что мне нужно (загрузить именно один файл из памяти, отрисовать, удалить).
Дело в том, что я хочу присоединить к C++ Builde XE5.
Это удалось мне, текстуры я гружу тоже при помощи DevIL.
Сейчас копаюсь во Wrapper и не понимаю почему
Код: Выделить всё
   glTexSubImage2D(GL_TEXTURE_2D,0,c->x,c->y,c->width,c->height,GL_RGBA,GL_UNSIGNED_BYTE,pixels);

"не дописывает" текстурный кадр к основной текстуре :( Точнее почему то после загрузки файла в текстуре находится только та, которая грузилась с координатой (x=0, y=0) В частности в приведённом примере выше - это одна текстура дыма.
Не понимаю в чём дело, что посоветуете предпринять?
GadGet
 
Сообщения: 8
Зарегистрирован: Чт окт 16, 2014 1:53 pm

Re: Загрузка файла без атласа текстур

Сообщение Odin_KG » Чт окт 16, 2014 4:57 pm

Не понимаю в чём дело, что посоветуете предпринять?

К сожалению, такое только отладкой лечится.
Аватара пользователя
Odin_KG
Administrator
Administrator
 
Сообщения: 841
Зарегистрирован: Чт янв 15, 2009 2:57 pm

Re: Загрузка файла без атласа текстур

Сообщение GadGet » Чт окт 16, 2014 8:41 pm

Запустил на компьютере с более современной видео картой, всё ОК. Прошу прощения за беспокойство.
Но у меня появился ещё один вопрос: что произойдёт при загрузке двух файлов с одинаковыми текстурами?
Первый грузим - всё понятно, добавляем в атлас текстурные кадры.
Грузим второй - система допишет в атлас новые кадры или определит что уже такие есть и свяжет координаты? (если второй вариант, то по какому алгоритму определяется существование текстуры)
GadGet
 
Сообщения: 8
Зарегистрирован: Чт окт 16, 2014 1:53 pm

Re: Загрузка файла без атласа текстур

Сообщение Odin_KG » Пт окт 17, 2014 7:53 am

Запустил на компьютере с более современной видео картой, всё ОК.

Это радует.

Но у меня появился ещё один вопрос: что произойдёт при загрузке двух файлов с одинаковыми текстурами?

API знает про текстуры только 2 вещи: первое - ширина/высота, второе - контрольная сумма. На основании этого происходит построение атласа в памяти API. Текстуры, у которых совпадает контрольная сумма являются одинаковыми и их дублирование в текстурных атласах происходит только в случае необходимости. Необходимость может возникнуть очень редко. API гарантирует, что все текстуры, которые относятся к одному эмиттеру либо анимированной папке будут находиться всегда на одном атласе - это нужно, чтобы не требовалось переключать текстуру во время рисования одного эмиттера. Если текстуры от одного эмиттера не умещаются на одном атласе, то они масштабируются до тех пор, пока не удастся их впихнуть в атлас. Чтобы произошло дублирование текстур потребуется, чтобы текстуры одного эмиттера частично использовались в другом эмиттере и тогда может потребоваться создать 2 разных атласа, но и то при условии, что суммарно на одном атласе не хватит места под текстуры обоих эмиттеров.

В редакторе есть возможность либо использовать хранилище, либо хранить текстуры независимо. Рекомендуется использовать хранилище, так как это позволяет сокращать размер ptc-файла (текстура будет храниться в единственном экземпляре при использовании в нескольких эмиттерах). Однако размер получаемых текстурных атласов будет одинаков независимо от способа хранения текстур в ptc-файле, так как всё равно сравнивается контрольная сумма.
Аватара пользователя
Odin_KG
Administrator
Administrator
 
Сообщения: 841
Зарегистрирован: Чт янв 15, 2009 2:57 pm

Re: Загрузка файла без атласа текстур

Сообщение GadGet » Пт окт 17, 2014 8:05 am

API знает про текстуры только 2 вещи: первое - ширина/высота, второе - контрольная сумма

Спасибо, это и интересовало. Всё остальное я вычитал из мануала.
Рекомендуется использовать хранилище, так как это позволяет сокращать размер ptc-файла (текстура будет храниться в единственном экземпляре при использовании в нескольких эмиттерах)

Это понятно, но идея отдать пользователю возможность создавать ptc-файл и использовать уже в моём проекте.
GadGet
 
Сообщения: 8
Зарегистрирован: Чт окт 16, 2014 1:53 pm

Re: Загрузка файла без атласа текстур

Сообщение Odin_KG » Пт окт 17, 2014 10:43 am

Это понятно, но идея отдать пользователю возможность создавать ptc-файл и использовать уже в моём проекте.

Хранилище хранится внутри ptc-файла. И оно точно также передается вместе с ним. Т.е. на каждый ptc-файл имеется собственное хранилище.
Аватара пользователя
Odin_KG
Administrator
Administrator
 
Сообщения: 841
Зарегистрирован: Чт янв 15, 2009 2:57 pm


Вернуться в Magic API

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

cron