GameDev.ru
/ GameDev.ru / Пользователи / Andrey / Сообщения на форуме пользователя Andrey (29 стр.)

Сообщения на форуме пользователя Andrey (29 стр.)

DevIL (OpenIL) & MipMap20 июля 201115:32#28
KaronatoR
texture.cpp:
int mips = ilGetInteger (IL_NUM_MIPMAPS);
mips != 0 ?
      for (int i = 0; i < mips; ++i) 
      { 
        ilActiveMipmap (i); 
....        
          int comp_size = ilGetDXTCData (NULL, 0, dxtc);
          ILubyte * buffer = new ILubyte [comp_size];
          ilGetDXTCData (buffer, comp_size, dxtc);
          
          glCompressedTexImage2D (GL_TEXTURE_2D, i, format, ilGetInteger (IL_IMAGE_WIDTH), ilGetInteger (IL_IMAGE_HEIGHT), 0, comp_size, buffer);

          delete [] buffer;
....
        }
....
      }

Вижу цикл загрузки мип уровней, если есть вызов ilActiveMipmap (i), то результат вызовов  ilGetDXTCData, ilGetInteger (IL_IMAGE_WIDTH),  ilGetInteger (IL_IMAGE_HEIGHT), будут зависеть от выбранного мипа функцией ilActiveMipmap (i) или нет?
проверь это, т.е. заведи переменные:
int width =  ilGetInteger (IL_IMAGE_WIDTH);
int height=  ilGetInteger (IL_IMAGE_HEIGHT);
glCompressedTexImage2D (GL_TEXTURE_2D, i, format, width , height, 0, comp_size, buffer);
Судя по твоему коду и исходникам DevIL библиотека учитывает mip Уровни и подгружает нужные мипы и возвращает значение высоты и ширины от выбранного мипа.
попробуй убери: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, mips-1);
DevIL (OpenIL) & MipMap19 июля 20119:33#25
KaronatoR
залей проект, попробую глянуть.
DevIL (OpenIL) & MipMap18 июля 201120:06#23
KaronatoR
а мип уровни есть? ты должен давать сжатые пиксели при загрузки для каждого мип уровня. Если ты используешь код из поста 18 и ставишь GL_LINEAR_MIPMAP_LINEAR, то при фильтрации будет попытка взять несуществующий мип уровень.
поставь glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
DevIL (OpenIL) & MipMap18 июля 201110:21#21
KaronatoR
Смотри код функции loadCompressedTexture.
DevIL (OpenIL) & MipMap17 июля 201123:29#19
KaronatoR
Попробуй еще сюда глянуть:
http://www.codesampler.com/oglsrc/oglsrc_4.htm#ogl_dds_texture_loader
DevIL (OpenIL) & MipMap16 июля 20117:16#14
рзмеры правильные?
Передача вектора в uniform переменную HLSL шейдера15 июля 201113:04#2
Sheon
если lPosition корректная используй glUniform3fvARB вместо glUniform1fvARB для vec3.
Убогий GLSL. Используй ARB_uniform_buffer_object или GL_EXT_bindable_uniform не парься с размерностью констант.
DevIL (OpenIL) & MipMap15 июля 201112:33#8
KaronatoR
Попробуй так:
switch(format ) {
  case IL_DXT1: {
    format = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT;
  };
  case IL_DXT3: {
    format = GL_COMPRESSED_RGBA_S3TC_DXT3_EXT;
  };
  case IL_DXT5: {
    format = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT;
  };
  break;
}
DevIL (OpenIL) & MipMap15 июля 201112:26#7
KaronatoR
> int format = ilGetInteger (IL_IMAGE_FORMAT);
Ошибка в неверном формате. Чем равен?
Рендеринг одинаковых объектов, почему так падает fps при движении камеры?15 июля 201110:29#10
Skyblade
>Сначала выводить ближние, потом дальние или наоборот?
как отсортировал так и выводи, с начала списка до конца, странный вопрос :)
Рендеринг одинаковых объектов, почему так падает fps при движении камеры?15 июля 20119:57#8
graveman
Отсортируй меши от ближних к дальним и выводи. Если конечно там нет прозрачных.
Какой формат текстур выбрать?12 июля 201119:53#9
Gladiator
png на этапе сборки моделей, ресурсов и т.д.  DDS в релизе, остальные форматы не нужны.
Direct3D9: элементарные правила оптимизации (комментарии)6 июля 201112:23#3
mrt
Предлагаю больше осветить данную тему в статье. Навскидку я думаю следует добавить:
1) RenderStates объединять в IDirect3DStateBlock9.
2) Не всегда нужно выводить от ближнего к дальнем, нужно учитывать прозрачность объектов.
3) Нужно упомянуть про много поточность в Direct3D9, а именно стараться вызывать все в одном потоке, и не использовать флаг создания устройства D3DCREATE_MULTITHREADED
Если еще что вспомню скажу.
OpenIL / DevIL аналоги5 июля 201111:18#5
KaronatoR
Я бы тебе посоветовал сделать загрузку png через libpng и DDS. Остальные форматы типа bmp,jpg,tga не нужны.
велосипеды шаблонных контейнеров (по заказу innuendo)3 июля 201123:57#111
nes
А где assert на проверку выходы за диапазон? Итераторы конечно лучше добавить. Вообще, сохрани совместимость методов с std::vector, тут достаточно продублировать вызовы твоих методов.
Кстати, попробуй использовать malloc/realloc + placment new + memcpy(естественно для POD типов.) и сравни с тем что у тебя и c std::vector.
Так сделано в CGrowableArray из DXUT

Следующие темы >>

2001—2012 © GameDev.ru — Разработка игр