View Full Version : [OPENGL] Textures RGBA16 e BGRA16
GordonFreeman
02-03-2006, 22:17
E' possibile,in OpenGL,usare texture con i pixel
in formato RGBA16 (R5:G5:B5:A1) e BGRA16 (B5:G5:R5:A1) ?
Tutti i comuni file bitmap (.BMP,.DIB) a 16 bit sono in formato BGRA16,e dovrei trovare un modo per usare tali texture in opengl
Ah ovviamente senza convertirle in 32 bit intendo
^TiGeRShArK^
03-03-2006, 00:29
dovrebbe essere possibile dalla versione 1.2.1 in poi:
OpenGL 1.2.1 (Information and Specification (PDF) )
Adds: 3D Texturing, BGRA Pixel Formats, Packed Pixel Formats, Normal Rescaling, Separate Specular Color, Texture Coordinate Edge Clamping, Texture LOD Control, Vertex Array Draw Element Range, and the Imaging Subset (optional- see GL_ARB_imaging) to the OpenGL 1.1 specification.
GordonFreeman
03-03-2006, 12:45
dovrebbe essere possibile dalla versione 1.2.1 in poi:
infatti è stato aggiunta la flag GL_BGRA_EXT per glTexImage2D e gluBuildMipmaps2D (e forse anche per glDrawPixels,glReadPixels)
ma funziona solo per i 32 bit non 16 bit mi sembra :(
^TiGeRShArK^
03-03-2006, 19:17
ah... non c'avevo fatto caso...
ma scusa... le BMP sono a 24 bit che io sappia..
un canale ciascuno x RGB a 8 bit e senza canale alpha = 24 bit...
un altro formato è invece dato dalle BMP a 8 bit, ma se non erro lì i colori sono dati da una palette e quindi si hanno 256 colori (anzi forse un pò di meno....sicurmanete di meno per le BMP di "sistema", ma x quelle normali non ricordo) scelti tra un totale di 16.777.216 (i soliti 24 bit) o sbaglio???:mbe:
GordonFreeman
04-03-2006, 01:00
ah... non c'avevo fatto caso...
ma scusa... le BMP sono a 24 bit che io sappia..
un canale ciascuno x RGB a 8 bit e senza canale alpha = 24 bit...
un altro formato è invece dato dalle BMP a 8 bit, ma se non erro lì i colori sono dati da una palette e quindi si hanno 256 colori (anzi forse un pò di meno....sicurmanete di meno per le BMP di "sistema", ma x quelle normali non ricordo) scelti tra un totale di 16.777.216 (i soliti 24 bit) o sbaglio???:mbe:
allora,se ti vedi il formato DIB Bitmap su MSDN,nella struttura BITMAPINFOHEADER o BITMAPINFO o una di quelle,c'è un campo che dice quanti bit per pixel ci sono,e i suoi valori validi sono : 1,2,4,8,16,24,32
ora,consideriamo quelle a 16 bit,che esistono in quanto specificate fra i possibili formati,e considera che il Paint è uno dei pochi programmi di disegno che non le supporta , infatti quando fai Salva con Nome ci son solo le opzioni 24 bit RGB e 8 bit (con la palette indicizzata come dici tu) per le BMP.....
ma se usi qualsiasi altro programma di disegno come Photoshop e Paint Shop Pro,o Corel Draw o altri,essi possono creare anche bitmap a 16 bit RGB o RGBA
in quanto alla distinzione,in questo caso,al formato RGB16(5:6:5),RGB15(5:5:5:X),e RGBA16(5:5:5:1) , c'è da dire che TUTTE le bitmap a 16 bit hanno 5 bit per componente R,G,B ma in ordine inverso,quindi nei primi 15 bit ci trovi le componenti BGR partendo dal meno significativo,e l'ultimo bit sarebbe il valore alpha...diciamo che lo puoi usare come valore alpha,infatti se apri tali bitmap con i tool della DirectX SDK puoi leggerla come una texture BGRA16,e la DirectX stessa supporta i formati RGBA16 e BGRA16
La GDI di Windows ignora il bit alpha,e quindi per essa le BMP a 16 bit sono tutte BGR15(5:5:5:X) , mentre la DirectX non la ignora,cioè dipende se gli dici tu che è nel formato RGBA16 o RGB15
uff che discorso lungo :)
^TiGeRShArK^
04-03-2006, 14:55
ah ok capito!
ti riferivi alle DIB bitmap :D
prova a vedere se questo ti può servire in qualche modo:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnopen/html/msdn_gl5.asp
GordonFreeman
26-03-2006, 00:20
ah ok capito!
ti riferivi alle DIB bitmap :D
prova a vedere se questo ti può servire in qualche modo:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnopen/html/msdn_gl5.asp
niente,quell'articolo spiega come tradurre le DIB in un buffer da dare in pasto a OPENGL,ma le bitmap a 16 bit comunque verrebbero convertite in 32 bit nella chiamata a createdibsection , è inutile...
io comunque volevo sapere come cavolo fare a usare glTexImage2D o glBuild2DMipmaps per specificare una texture RGB o RGBA a 16 bit,dato un buffer di pixel in tale formato...mi sa che la silicon graphics non ci ha pensato...
io direi che è meglio Direct3D :) anche perchè è più avanzato,con più feature,ma la storia delle texture a 16 bit non supportate da opengl (direct3d le supporta) è proprio grave,perchè tali texture sono molto comuni e hanno ragione di esistere,infatti la qualità visiva è praticamente indistinguibile da quelle a 32 bit,ma le prestazioni sono molto superiori!! infatti per trasferire una texture a 16 bit da RAM principale a videoram ci si mette la metà del tempo rispetto a quelle a 32 bit,...
nota bene: comunque le texture che dico non sono solo le bitmap,ma soprattutto i file più comunemente utilizzati come texture , quali i TARGA (.TGA) e i TIFF (.TIFF), ma anche le immagini JPG,PNG,PCX...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.