-
Удаление тектстуры. 1)Когда я зугружаю текстуру, если она не нужна на определенном этапе программы надо ли ее удалять? 2)Как это сделать в OpenGL?
-
1) Только тебе видно, надо ее удалять или не надо. Все зависит от архитектуры движка и от того, что за текстура. Например, если сначала грузится летний левел, а следом зимний, то имеет смысл грохнуть все летние текстуры, чтобы не жрали оперативу. Лично я пока не сталкивался с необходимостью удаления текстур(в ближайшее время столкнусь). Есть идея выставлять время жизни текстуры(например, грузится обычная моделька, ейным текстурам выставляется время жизни 10 минут, если в течении 10 минут она ниразу не биндится, текстура грохается, а при следубщем бинде грузится заново), должно нормально работать. ПРавда для эффективности работы стоит при первом запуске конвертить картинки в какой нить формат, который быстро грузится, чтобы подгрузка небыла визуально заметна.
2) procedure glDeleteTextures(n: GLsizei; var textures: GLuint); stdcall; external opengl32;
-
Да, я это и имел ввиду . Один уровень пройден, то переходя на сдедующий необходимо удалить все текстуры предыдущего уровня. Правильно я считаю.?
Еше вопрос. Видел, пишут менеджеры текстур, Зачем? Можно просто удалить текстуру командой opengl32.
-
> [2] Hortik (27.03.08 21:25)
Менеджер текстур пишут, что менеджить текстуры. :) Просто загрузка текстур на сколь либо сложном проекте не канает. Например, есть у мну на сцене 20 разных домиков. И все они используют для стен деревянную текстуру. Одну и туже. Как ты будешь контролировать, сколько раз надо грузит ьтекстуру?
В менеджере это делается на раз, хранится имя файла, при запросе ищется. нашли - тупо отдаем ID, не нашли - создаем. Опять же, наднях реализовал анимированные текстуры. Десяток строчек изменений в менеджере текстур, движок и не узнал, что появился новый тип текстур. ТОже самое с введением времени жизни текстур, движок и не узнает о том, что появилось время жизни текстуры, он просто ее биндит, а менеджер решает че с ней делать, грузить, удалять, в свап кинуть или еще че. Тоже самое с перехзодом на другой API. Движку накласть на то, что такое текстура с точки зрения API. У движка есть ID и все. Я могу сейчас полностью переписать менеджер текстур под DX, и двиг об этом не узнает. Т.к. со всем работает через менеджер.
Объяснил? :)
-
Спасибо за совет. :) Вроде пока понял. Пошел я мучать текстурные менеджеры..........
-
Вопросик ... Почему компилятор пишет что непонятный индификатор GL_TEXTURE_MAX_ANISOTROPY_EXT
-
> [5] Hortik (27.03.08 22:10) > GL_TEXTURE_MAX_ANISOTROPY_EXT
Потому что эта константа не является частью стандарта OpenGL 1.0(хедеры для коего поставляются для Delphi) Хочешь использовать - пиши свой модуль(я так делаю, просто дописываю в него расширения, которая мне нужны, это позволяет жестче контролировать используемые технологии), либо найди в нете более свежий хедер(OpenGL 2.0 - свежий) и его используй.
-
glDeleteTextures(1, @ID);
И для этой функции пишет то же самое. Для нее тоже нужны хедеры
-
работает :)
-
Еще вопросик по фильтрации... Хотел протестить отличия фильтрации BILINEAR ,TRILINEAR , ANISOTROPY Все четыри спрайта одинаковы. почему я не вижу разницы. Вот код который создает текстуру.
glGenTextures(1, Texture);
glBindTexture(GL_TEXTURE_2D, Texture);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
case Filter of
F_NONE :
begin
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1);
end;
F_BILINEAR :
begin
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1);
end;
F_TRILINEAR :
begin
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1);
end;
F_ANISOTROPY :
begin
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, GL_max_aniso);
end;
end;
if Format = GL_RGBA then
gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, Width, Height, GL_RGBA, GL_UNSIGNED_BYTE, pData)
else
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, Width, Height, GL_RGB, GL_UNSIGNED_BYTE, pData);
result := Texture;
-
Hortik, :) НЕ видишь разницы потому как не понимаешь когда эта разница будет заметна. Анизотропная фильтрация в отличии от остальных зависит от наклона плоскости к направлению взгляда :)
-
с менеджерами текстур намного легче работать - экономит память + удобно работать!
-
Не понимаю разницу в фильтрациях Обьясните мне пожалуйста.
-
> [12] Hortik (28.03.08 16:03)
GL_NEAREST - не фильтрует текстуру. Тупо возвращает значение текселя как есть. GL_LINEAR - фильтрует линейно. если координата попадает между двух текстелей, то берутся значения текстелей и интерполируются. GL_LINEAR_MIPMAP_LINEAR - не в курсе, но по логике генерит MipMap уровни с линейной фильтрацией.
-
Так для двухмепнрй спратовой игрушки не имет смысла ипользовать BILINEAR ,TRILINEAR , ANISOTROPY фильтрацию так как игрок разницу не увидит . так ли это ?
-
Hortik, для 2д игрушки имеет смысл лишь билинейная фильтрация. И то в случае если спрайт будет изменять свои размеры на отличные от размера текстуры на экране.
-
Не понимаю разницу в фильтрацияхhttp://www.ixbt.com/video/anisotropic.htmlGL_LINEAR_MIPMAP_LINEAR - не в курсе, но по логике генерит MipMap уровниГенерит мип-уровни gluBuild2DMipmaps (помнится, уже обсуждали разницу в скорости между gluBuild2DMipmaps и glTexImage2D, которая не генерит). GL_LINEAR_MIPMAP_LINEAR задаёт метод их использования (все варианты расписаны в стандартной справке по GL). для 2д игрушки имеет смысл лишь билинейная фильтрация.TRILINEAR возможно тоже, если предполагается сильное (более чем в 2 раза) уменьшение спрайта. Ну или лучше, наверное, GL_LINEAR_MIPMAP_NEAREST, т.е. без смешивания мип-уровней.
-
> [16] Sapersky (28.03.08 17:05)
А! Точно! Поэтому и написал, что не в курсе - есть воспоминание, что что-то обсуждали. В теме про Виртуальный десктоп
|