|
dev.gamez.lv Latvian Game Developers Community
|
View previous topic :: View next topic |
Author |
Message |
S1 Indago dalībnieks
Joined: 31 Jul 2005 Posts: 219 Location: Jelgava
|
Posted: 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 |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: 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 |
|
|
S1 Indago dalībnieks
Joined: 31 Jul 2005 Posts: 219 Location: Jelgava
|
Posted: 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 |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: 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 |
|
|
S1 Indago dalībnieks
Joined: 31 Jul 2005 Posts: 219 Location: Jelgava
|
Posted: 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 |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: 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 |
|
|
S1 Indago dalībnieks
Joined: 31 Jul 2005 Posts: 219 Location: Jelgava
|
Posted: Sun Jun 04, 2006 5:34 pm Post subject: |
|
jeaaaaaaaaaa sanāca, paldies. tu tiešām esi guru |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: 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 |
|
|
|
|
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
|