Конференция "Игры" » DevIL.dll ??? [Delphi, Windows]
 
  • policeofstv © (21.05.08 14:48) [0]
    Доброго Вам времени суток!!!
    У меня вопрос по поводу библиотеки DevIL кто нибудь знает какой функцией и вообще как можно вытянуть текстуру из *.tex файлов
    примерно как это делает TextureViewer у меня есть http://www.koders.com/delphi/fidE2FE8AB223C6466A72FB1E175B94EEDD098F4142.aspx?s=opengl#L86
    и я продвинулся до стадии


    procedure TForm1.Button1Click(Sender: TObject);
    var imgID:Cardinal;p:Pointer;f:Integer;b:Byte;
    begin
     OpenDialog1.InitialDir:=ExtractFilePath(Application.ExeName);
     if OpenDialog1.Execute then
     begin
      ilInit;
      ilEnable( IL_FILE_OVERWRITE );
      ilGenImages(1,@imgID);
      ilBindImage(imgid);
      ilLoadImage(PChar(OpenDialog1.FileName));

      Image1.Picture.Bitmap.Width := ilGetInteger(IL_IMAGE_WIDTH);
      Image1.Picture.Bitmap.Height :=ilGetInteger(IL_IMAGE_HEIGHT);

      ilConvertImage( ilGetInteger(IL_IMAGE_FORMAT) ,IL_BMP);

      ilSaveImage(PChar('ura.bmp'));

      Image1.Picture.Bitmap.LoadFromFile('ura.bmp');

     end;

    end;



    но когда *.tex -> ura.bmp то там серый квадрат 1x1
    а если подкидываю  *.jpg,*.bmp и т.д. -> ura.bmp то код работает

    p.s.
    посмотрел TextureViewer блокнотом там точно используются функции
    ilDeleteImages, ilSaveImage, ilTexImage, ilOriginFunc, ilEnable, ilBindImage, ilGenImages, ilInit других я не нашел

    Заранее спасибо если кто сможет мне помочь...
  • @!!ex © (21.05.08 16:32) [1]
    Откуда уверенность, что OpenIL поддерживает этот формат?
    Я никаких упоминаний *.tex формата в хедерах DevIl а не нашел. а вы?
  • policeofstv © (21.05.08 17:15) [2]

    > p.s.
    > посмотрел TextureViewer блокнотом там точно используются
    > функции
    > ilDeleteImages, ilSaveImage, ilTexImage, ilOriginFunc, ilEnable,
    >  ilBindImage, ilGenImages, ilInit других я не нашел
    >


    TextureViewer.exe+DevIL.dll работает как надо
  • @!!ex © (21.05.08 17:34) [3]
    > TextureViewer.exe+DevIL.dll работает как надо

    и что?
    Где написано что TextureViewer грузит tex черещ DevIL?
    может стоит прочитать спецификацию DevIl'a?
    А еще я рекоменду проверить, как отработала процедура ilLoadImage.
    99% что ошибка.
  • policeofstv © (22.05.08 08:34) [4]
    вот как раз в этом и проблема.... ilLoadImage а в прочем все ilLoad... возвращают  ошибку.... возможно, что TextureViewer сначала урезает файл а потом остаток прогоняет через Devil, но скорее всего использует функции Devil.... если Вы не разбираетесь в функциях Devil то какой смысл засорять топик? Мне бы хоть разобраться как пользоваться функциями:

    ilTexImage(Width, Height, Depth: TILuint; Bpp: TILubyte; Format, _Type:
     TILenum; Data: Pointer): TILboolean;
    ilOriginFunc(Mode: TILenum): TILboolean;


    может после этого я смогу понять что к чему... TextureViewer меня не устраивает потому что он открывает по 1 файлу
  • @!!ex © (22.05.08 09:01) [5]
    > если Вы не разбираетесь в функциях Devil то какой смысл
    > засорять топик?

    Вы бредите? :)
    http://www.free-lancers.net/users/AllexInTheDark/projects/95269/
    Скриншот тех времен, когда там еще DevIL использовался.

    Какую ошибку вызывает ilLoad?
  • @!!ex © (22.05.08 09:03) [6]
    > возможно, что TextureViewer сначала урезает файл а потом
    > остаток прогоняет через Devil, но скорее всего использует
    > функции Devil

    Дар прорицания? Или всетаки есть основания так утверждать?
  • policeofstv © (22.05.08 09:13) [7]
    var b:byte;
    .....

      b:=ilLoad(IL_TYPE_UNKNOWN,PChar(OpenDialog1.FileName));
      b:=ilGetError;

      ShowMessage(inttostr(b));

    ....

    b=0 тоесть IL_NO_ERROR
  • policeofstv © (22.05.08 09:23) [8]

    > Дар прорицания? Или всетаки есть основания так утверждать?

    присутствие в exe функций fopen, fread, fclose
  • policeofstv © (22.05.08 09:33) [9]
    DTX1, DTX3, DTX5, A8R8G8B8 вот основные форматы которые меня интересуют но все равно не пойму Devil их поддерживает или ....
  • @!!ex © (22.05.08 10:25) [10]
    > b=0 тоесть IL_NO_ERROR

    Не стыкуется с

    > ilLoadImage а в прочем все ilLoad... возвращают  ошибку....



    > присутствие в exe функций fopen, fread, fclose

    не вижу связи.


    > [9] policeofstv ©   (22.05.08 09:33)

    Список того, что поддерживает DevIl
    #define IL_BMP          0x0420
    #define IL_CUT          0x0421
    #define IL_DOOM         0x0422
    #define IL_DOOM_FLAT    0x0423
    #define IL_ICO          0x0424
    #define IL_JPG          0x0425
    #define IL_JFIF         0x0425
    #define IL_LBM          0x0426
    #define IL_PCD          0x0427
    #define IL_PCX          0x0428
    #define IL_PIC          0x0429
    #define IL_PNG          0x042A
    #define IL_PNM          0x042B
    #define IL_SGI          0x042C
    #define IL_TGA          0x042D
    #define IL_TIF          0x042E
    #define IL_CHEAD        0x042F
    #define IL_RAW          0x0430
    #define IL_MDL          0x0431
    #define IL_WAL          0x0432
    #define IL_LIF          0x0434
    #define IL_MNG          0x0435
    #define IL_JNG          0x0435
    #define IL_GIF          0x0436
    #define IL_DDS          0x0437
    #define IL_DCX          0x0438
    #define IL_PSD          0x0439
    #define IL_EXIF         0x043A
    #define IL_PSP          0x043B
    #define IL_PIX          0x043C
    #define IL_PXR          0x043D
    #define IL_XPM          0x043E
  • policeofstv © (22.05.08 10:46) [11]
    b:=ilLoad(IL_TYPE_UNKNOWN,PChar(OpenDialog1.FileName));
    собственно и это тоже дает 0 что означает не загрузил ничего в память
    b:=ilGetError;
    дает 0 означает, что не было ошибки

    // Image types
     IL_TYPE_UNKNOWN = $0000;
     IL_BMP = $0420;
     IL_CUT = $0421;
     IL_DOOM = $0422;
     IL_DOOM_FLAT = $0423;
     IL_ICO = $0424;
     IL_JPG = $0424;
     IL_LBM = $0426;
     IL_PCD = $0427;
     IL_PCX = $0428;
     IL_PIC = $0429;
     IL_PNG = $042A;
     IL_PNM = $042B;
     IL_SGI = $042C;
     IL_TGA = $042D;
     IL_TIF = $042E;
     IL_CHEAD = $042F;
     IL_RAW = $0430;
     IL_MDL = $0431;
     IL_WAL = $0432;
     IL_LIF = $0434;
     IL_MNG = $0435;
     IL_JNG = $0435;
     IL_GIF = $0436;
     IL_DDS = $0437;
     IL_DCX = $0438;
     IL_PSD = $0439;
     IL_EXIF = $043A;
     IL_PSP = $043B;
     IL_PIX = $043C;
     IL_PXR = $043D;
     IL_XPM = $043E;

     IL_JASC_PAL = $0475;

    надо же я оказывается это знал... но это не решает саму проблему....
    DTX1, DTX3, DTX5, A8R8G8B8 как насчет форматов может есть еще способ их прочесть?
  • @!!ex © (22.05.08 10:48) [12]
    > DTX1, DTX3, DTX5, A8R8G8B8 как насчет форматов может есть
    > еще способ их прочесть?

    Это случайно не форматы DirectX?
    Если да - то открывай средствами DirectX.
    Если это форматы специфичные для какой то программы - ищи описание формата и делай свой загрузчик.
  • policeofstv © (22.05.08 11:09) [13]
    да это форматы 2D текстур DirectX .... но мне это мало о чем говорит....

    > Если да - то открывай средствами DirectX.


    есть реальное решение где об этом можно больше узнать.... или конкретный пример.... задача простая есть файл с каким то из этих форматов ... нужно открыть и сохранить в bmp
  • @!!ex © (22.05.08 12:16) [14]
    > [13] policeofstv ©   (22.05.08 11:09)

    www.mirgames.ru
    Там есть пример работы с DirectX под Дельфи.
  • policeofstv © (22.05.08 13:52) [15]
    http://steps3d.narod.ru/tutorials/devil-tutorial.html
    вот похоже все что я искал ... теперь осталось изучить язык c++ ...
    спасибо можно тему закрывать!!!
  • @!!ex © (22.05.08 14:27) [16]
    > вот похоже все что я искал ... теперь осталось изучить язык
    > c++ ...

    ЗАчем?
    Вызов функций API не зависит от языка.
  • policeofstv © (22.05.08 14:30) [17]
    но эту функцию то надо на русский язык (Delphi) перевести



    unsigned loadTexture3D ( const char * fileName, bool mipmap )
    {
       ILuint texId;
       GLuint id;

       initDevIL   ();
       ilGenImages ( 1, &texId );
       ilBindImage ( texId );

       if ( !ilLoadImage ( fileName ) )
           return 0;

       int  width  = ilGetInteger ( IL_IMAGE_WIDTH  );
       int  height = ilGetInteger ( IL_IMAGE_HEIGHT );
       int  depth  = ilGetInteger ( IL_IMAGE_DEPTH  );
       int  type   = ilGetInteger ( IL_IMAGE_TYPE   );
       int  fmt    = ilGetInteger ( IL_IMAGE_FORMAT );
       int  dxtc   = ilGetInteger ( IL_DXTC_DATA_FORMAT );
       bool comp  = (dxtc == IL_DXT1) || (dxtc == IL_DXT2) || (dxtc == IL_DXT3) || (dxtc == IL_DXT4) || (dxtc == IL_DXT5);

       glGenTextures ( 1, &id );
       glBindTexture ( GL_TEXTURE_3D_EXT, id );

       if ( mipmap )
       {
           glTexParameteri ( GL_TEXTURE_3D_EXT, GL_GENERATE_MIPMAP_SGIS, GL_TRUE );
           glTexParameteri ( GL_TEXTURE_3D_EXT, GL_TEXTURE_MIN_FILTER,   GL_LINEAR_MIPMAP_LINEAR );
       }


       glTexImage3DEXT ( GL_TEXTURE_3D_EXT, 0, fmt, width, height, depth, 0, fmt, type, ilGetData () );  
       glTexParameteri ( GL_TEXTURE_3D_EXT, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
       glTexParameteri ( GL_TEXTURE_3D_EXT, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
       glTexParameteri ( GL_TEXTURE_3D_EXT, GL_TEXTURE_WRAP_S,     GL_REPEAT );
       glTexParameteri ( GL_TEXTURE_3D_EXT, GL_TEXTURE_WRAP_T,     GL_REPEAT );
       glTexParameteri ( GL_TEXTURE_3D_EXT, GL_TEXTURE_WRAP_R,     GL_REPEAT );
       glBindTexture   ( GL_TEXTURE_3D_EXT, 0 );

       ilDeleteImages ( 1, &texId );

       return id;
    }

  • @!!ex © (22.05.08 15:55) [18]
    > [17] policeofstv ©   (22.05.08 14:30)
    >

    Здесб 95% кода = вызов API.
    Действительно просто так скопипастить не получится. а если хоть чуть вникнуть - все сразу становится понятно и без знания языка.
 
Конференция "Игры" » DevIL.dll ??? [Delphi, Windows]
Есть новые Нет новых   [134430   +2][b:0][p:0.002]