dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

gļuks ar glGetCompressedTexImageARB

 
dev.gamez.lv Forum Index -> OpenGL
View previous topic :: View next topic  
Author Message
S1
Indago dalībnieks
Indago dalībnieks


Joined: 31 Jul 2005
Posts: 219
Location: Jelgava

PostPosted: Sat Jun 03, 2006 8:18 pm    Post subject: gļuks ar glGetCompressedTexImageARB

sveiki. nu, īsumā kods ir šāds

masīvā data[] ir sadzīts bmp, pārbaudu vai šajā masīvā dati glabājas korekti:
Code:

glGenTextures(1, Tx);
glBindTexture(GL_TEXTURE_2D, tx);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, Width, Height, GL_RGBA, GL_UNSIGNED_BYTE, addr(Data[0]) );
, viss ir ok, bilde ir.

tagad kompresējam:
Code:
var
  isTC, TCfmt   : GLint;
  buflen        : GLint;
  tbuf          : Pointer;
//KOMPRESĒJAM
glTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ARB, Width, Height, 0, GL_RGBA,GL_UNSIGNED_BYTE, addr(Data[0]));
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_COMPRESSED_ARB, @isTC);
if(isTC <> 0)then
     begin
     // ATRODAM KURŠ KOMPRESĀCIJAS FORMĀTS TIKA PIELIETOTS
     glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_INTERNAL_FORMAT, @TCfmt);
     case TCfmt of
          GL_COMPRESSED_RGB_S3TC_DXT1_EXT: str := 'DXT1 RGB';
          GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: str := 'DXT1 RGBA';
          GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: str := 'DXT3 RGBA';
          GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: str := 'DXT5 RGBA';
          else str := 'Unknown';
          end;
     end;
MessageBox(0, PChar('Textūra veiksmīgi sakompresēta: '+str), PChar('Compress unit'), MB_OK);

// textūrai nepiec. atm. daudzums
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB, @buflen);
// rezervējam atmiņu
GetMem(tbuf, buflen);
//glGetCompressedTexImageARB(GL_TEXTURE_2D, 0, tbuf);

tālāk bija domāts saglabāt textūru uz hdd.
te arī pie pēdējās rindas ir errors: kautkas ar atmiņu(Access violation at address 000000 blablalba...
Kādi te varētu būt risinājumi???????


Last edited by S1 on Sun Jun 04, 2006 8:53 am; edited 1 time in total
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sat Jun 03, 2006 8:55 pm    Post subject:

1) kopš kuriem laikiem glTexImage2D saprot JPG kompresiju?
2) pārbaudi (izvadi uz ekrāna/failā), cik ir buflen vērtība pēc glGetTexLevelParameteriv izsaukuma.
3) tev dīvains ifs. Tb man liekas, ka tu par ātru to nobeidz. Jo glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB, ..) un glGetCompressedTexImageARB fjas jau jēga ir saukt tikai tad, kad tekstūra ir sakompresēta, ne? Tātad šīs fjas vajag likt ifā iekšā, citādi tās izpildīsies arī tad, kad isTC=0 (kompresijas nav).
Reku gandrīz tavs kods - http://www.oldunreal.com/editing/s3tc/ARB_texture_compression.pdf (Code Listing 2). Redzi kā tur ifs ir apkārt arī glGetCompressedTexImageARB fjai?
Back to top
View user's profile Send e-mail
S1
Indago dalībnieks
Indago dalībnieks


Joined: 31 Jul 2005
Posts: 219
Location: Jelgava

PostPosted: Sun Jun 04, 2006 9:20 am    Post subject:

kā tu teici, es pārbaudīju saspiestās textūras izmēru, tas bija tāds pats kā iepriekš - tas nozīmē ka nav sakompresēts.. Tad es izmainīju pāris parametrus glTexImage2D f-jā, un pie ifa saliku pārējās f-jas
Code:
// KOMPRESĒJAM
glTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB_ARB, Width, Height, 0, GL_BGR_EXT,GL_UNSIGNED_BYTE, addr(Data[0]));

// PĀRBAUDAM, KĀ TAS TIKA SAKOMPRESĒTS
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_COMPRESSED_ARB, @isTC);
if(isTC <> 0)then
     begin
     // ATRODAM KURŠ KOMPRESĀCIJAS FORMĀTS TIKA PIELIETOTS
     glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_INTERNAL_FORMAT, @TCfmt);
     case TCfmt of
          GL_COMPRESSED_RGB_S3TC_DXT1_EXT: str := 'DXT1 RGB';
          GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: str := 'DXT1 RGBA';
          GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: str := 'DXT3 RGBA';
          GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: str := 'DXT5 RGBA';
          else str := 'Unknown';
          end;
     // sakompresētās textūras izmērs
     glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB, @buflen);
     GetMem(tbuf, buflen);

     MessageBox(0, PChar('Textūra  sakompresēta: '+str), PChar('Compress unit'), MB_OK);
     MessageBox(0, PChar('tex sākuma izmērs: '+inttostr(width*height)), PChar('Compress unit'), MB_OK);
     MessageBox(0, PChar('kompresētās tex izmērs: '+inttostr(buflen)), PChar('Compress unit'), MB_OK);
     //dabonam sakompresētās tex atmiņas adresi
     glGetCompressedTexImageARB(GL_TEXTURE_2D, 0, tbuf);
     end;

rezultāts ir šāds:
Textūra sakompresēta DXT1 RGB
Tex sākuma izmērs 65K
Kompresētās tex izmērs 32K, itkā būtu labi bet atkal errors pie glGetCompressedTexImageARB .
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sun Jun 04, 2006 11:39 am    Post subject:

Uzliec pārbaudit vai pēc GetMem izsaukuma tbuf <> nil (tb 0-pointers).
Ā un vēl - vai fja glGetCompressedTexImageARB ir pareizi ielādēta? Tb kā tu to pielādē? Ar wglGetProcAddress? Pārbaudi vai šis arī neatgriež nil.
Back to top
View user's profile Send e-mail
S1
Indago dalībnieks
Indago dalībnieks


Joined: 31 Jul 2005
Posts: 219
Location: Jelgava

PostPosted: Sun Jun 04, 2006 12:14 pm    Post subject:

pārbaudīju : tbuf <> nil.

glGetCompressedTexImageARB es pievienoju pirms implementation šādi:

Code:
glGetCompressedTexImageARB: procedure(target: Cardinal; level: Integer; img: Pointer);
  {$IFDEF Win32} stdcall; {$ELSE} cdecl; {$ENDIF}

tā ir procedūra, laikam neko neatgriež ... varbūt mana videokarte šo f-ju neatbalsta (R8500)?
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sun Jun 04, 2006 3:09 pm    Post subject:

Pag, bet tu jau tikai nodeklarēji to procedūras mainīgo. Inicializēt arī to vajag taču. Tas ir tāpat kā rakstīt var a: integer; un tad programmā lietot a vērtību neinicializējot to, tb nepiešķirot a neko. Vajag taču glGetCompressedTexImageARB := wglGetProcAddress("glGetCompressedTexImageARB"); (ja nemaldos). Pirms tam protams pārbaudot vai glGetString ar GL_EXTENSIONS atgriež vajadzīgo ekstensiju ARB_texture_compression (ja nemaldos, rakstu no galvas).
Back to top
View user's profile Send e-mail
S1
Indago dalībnieks
Indago dalībnieks


Joined: 31 Jul 2005
Posts: 219
Location: Jelgava

PostPosted: Sun Jun 04, 2006 5:34 pm    Post subject:

jeaaaaaaaaaa sanāca, paldies. tu tiešām esi guru Very Happy
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sun Jun 04, 2006 6:02 pm    Post subject:

Kur nu guru.. Tie jau programēšanas pamati, ka vajag inicializēt mainīgos, paši no sevis tie neko sev nepiešķirs (vismaz paskālā).
Back to top
View user's profile Send e-mail
Display posts from previous:   
dev.gamez.lv Forum Index -> OpenGL All times are GMT + 2 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group