Загрузка Mipmap текстуры из памяти в OpenGL

Тема в разделе "WASM.OpenGL", создана пользователем AlexBond, 26 июн 2009.

  1. AlexBond

    AlexBond Member

    Публикаций:
    0
    Регистрация:
    30 янв 2005
    Сообщения:
    69
    Адрес:
    Belarus
    Существует ли функция для загрузки текстуры которая уже поделена на все степени двойки?

    У меня в памяти идет сплошной массив из картинок (формат XImage из одиной игры): [mipmapImage32,mipmapImage16,mipmapImage8,mipmapImage4,mipmapImage1]

    Для обычной картинки, я использую:
    Код (Text):
    1. gluBuild2DMipmaps(GL_TEXTURE_2D,4,32,32,
    2.                    GL_RGBA,GL_UNSIGNED_BYTE,mipmapImage32);
    Может есть функция которая загрузит этот массив?

    или же мне вручную разбивать данные и делать так:

    Код (Text):
    1.       glTexImage2D(GL_TEXTURE_2D,0,4,32,32,0,
    2.                    GL_RGBA,GL_UNSIGNED_BYTE,mipmapImage32);
    3.       glTexImage2D(GL_TEXTURE_2D,1,4,16,16,0,
    4.                    GL_RGBA,GL_UNSIGNED_BYTE,mipmapImage16);
    5.       glTexImage2D(GL_TEXTURE_2D,2,4,8,8,0,
    6.                    GL_RGBA,GL_UNSIGNED_BYTE,mipmapImage8);
    7.       glTexImage2D(GL_TEXTURE_2D,3,4,4,4,0,
    8.                    GL_RGBA,GL_UNSIGNED_BYTE,mipmapImage4);
    9.       glTexImage2D(GL_TEXTURE_2D,4,4,2,2,0,
    10.                    GL_RGBA,GL_UNSIGNED_BYTE,mipmapImage2);
    11.       glTexImage2D(GL_TEXTURE_2D,5,4,1,1,0,
    12.                    GL_RGBA,GL_UNSIGNED_BYTE,mipmapImage1);
     
  2. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    AlexBond

    Среди функций OpenGL 1.4, а также ARB и EXT расширений вплоть до последней спецификации, если не ошибаюсь, такой функции нет.
     
  3. AlexBond

    AlexBond Member

    Публикаций:
    0
    Регистрация:
    30 янв 2005
    Сообщения:
    69
    Адрес:
    Belarus
    Ясно, единственное что я нашел, это пользовательская функция загрузки DDS, но там через glCompressedTexImage2D, а у меня обычный формат. Ну напишу свою, может кому пригодится:

    Код (Text):
    1. procedureglLoad2DMipmaps(target: GLenum; Components, Width, Height: GLint;
    2.   Format, atype: GLenum; Data: Pointer);
    3. var
    4. i:integer;
    5. begin
    6.   for i:=0 to 10 do begin
    7.    glTexImage2D(target,i,Components,Width,Height,0,Format,atype,Data);
    8.    inc(Longword(Data),(Width*Height*Components));
    9.    if ((Width=1)and(Height=1))then break;
    10.    Width:=Width div 2;
    11.    Height:=Height div 2;
    12.   end;
    13. end;