Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 6. listopad 2007, 12:01:00 Předmět: DDS |
|
|
Zdravím, mám dvě otázky ohledně DDS, přestože nám hra šla zrovna do lisu, o dds uvažuji až teď.
1) nerad bych psal DDS laoder (pro OpenGL) sám, protože DDS používá HW formáty, který různě přibývají a je jich hodně. Vím, nemusím psát kód pro dekompresi, když můžu načíst texturu rovnou komprimovanou, i tak bych rači hotový loader. Existuje nějaká slušná knihovna, která by se dala eventuelně použít? Našel sem, že DevIL (OpenIL) podporuje DDS, ale podle nějakého fóra se zdá, že ta DDSka dekomprimuje (místo nahrání do VRAM komprimovaně) , což trochu ubírá DDSku na lesku.
2) v souvislosti s první otázkou mě napadá: když dds může používat spousty nových HW formátů, může se stát, že starší HW některý formát nepodporuje, jak se to řeší v reálných projektech? Používá se pouze nějaká sada "bezpečných" formátů, které jsou podporovány všemi kartami, i za cenu toho, že existují novější a lepší komprese? Nebo se na CPU data dekomprimují a nechají se zkomprimovat na GPU v podporované kompresi?
díky _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
Manox
Založen: 30. 07. 2007 Příspěvky: 140 Bydliště: Brno
|
Zaslal: 6. listopad 2007, 13:25:30 Předmět: |
|
|
kód: |
struct DDS_IMAGE_DATA
{
GLsizei width;
GLsizei height;
GLint components;
GLenum format;
int numMipMaps;
GLubyte *pixels;
}; |
kód: |
unsigned int Texture::LoadTexture(char *file)
{
DDS_IMAGE_DATA *pDDSImageData = loadDDSTextureFile(file);
if( pDDSImageData != NULL )
{
int nHeight = pDDSImageData->height;
int nWidth = pDDSImageData->width;
int nNumMipMaps = pDDSImageData->numMipMaps;
int nBlockSize;
if( pDDSImageData->format == GL_COMPRESSED_RGBA_S3TC_DXT1_EXT )
nBlockSize = 8;
else
nBlockSize = 16;
glBindTexture( GL_TEXTURE_2D, textury[num_textur]);
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
int nSize;
int nOffset = 0;
// Load the mip-map levels
for( int i = 0; i < nNumMipMaps; ++i )
{
if( nWidth == 0 ) nWidth = 1;
if( nHeight == 0 ) nHeight = 1;
nSize = ((nWidth+3)/4) * ((nHeight+3)/4) * nBlockSize;
glCompressedTexImage2DARB( GL_TEXTURE_2D,
i,
pDDSImageData->format,
nWidth,
nHeight,
0,
nSize,
pDDSImageData->pixels + nOffset );
nOffset += nSize;
// Half the image size for the next mip-map level...
nWidth = (nWidth / 2);
nHeight = (nHeight / 2);
}
}
if( pDDSImageData != NULL )
{
if( pDDSImageData->pixels != NULL )
free( pDDSImageData->pixels );
free( pDDSImageData );
}
ID = num_textur++;
textures.push_back(*this);
return ID;
}
|
|
|
Návrat nahoru |
|
|
nou
Založen: 28. 07. 2007 Příspěvky: 1047
|
Zaslal: 6. listopad 2007, 15:34:22 Předmět: |
|
|
v sdk od AMD/ATI by mal byt loader na dds ktory podporuje cez 40 formatov. _________________ Najjednoduchšie chyby sa najtažšie hľadajú. |
|
Návrat nahoru |
|
|
VladR
Založen: 30. 07. 2007 Příspěvky: 1322 Bydliště: Greater New York City Area
|
Zaslal: 6. listopad 2007, 15:47:03 Předmět: Re: DDS |
|
|
]semo[ napsal: |
Existuje nějaká slušná knihovna, která by se dala eventuelně použít? |
Napr. DirectX
]semo[ napsal: |
Našel sem, že DevIL (OpenIL) podporuje DDS, ale podle nějakého fóra se zdá, že ta DDSka dekomprimuje (místo nahrání do VRAM komprimovaně),což trochu ubírá DDSku na lesku. |
Tak to by bolo "trochu" dost, a stracalo to zmysel, pretoze na disku DDS zabera viac miesta ako pouzitelne JPG, resp. JP2
]semo[ napsal: |
2) v souvislosti s první otázkou mě napadá: když dds může používat spousty nových HW formátů, může se stát, že starší HW některý formát nepodporuje, jak se to řeší v reálných projektech? Používá se pouze nějaká sada "bezpečných" formátů, které jsou podporovány všemi kartami, i za cenu toho, že existují novější a lepší komprese? |
Napriklad. Resp. to mas ulozene vo viacerych formatoch, kedze robite hru na DVD, nemas problem s uloznym priestorom, ako v pripade sharewaru. Mozes tam kludne nasekat vsetko v 20 formatoch a aj tak budes mat este volne miesto 3 GB na DVDcku. A pocas runtime iba zistis, co je realne podporovane a vyberies podla toho format.
Ja DDS pouzivam uz tretim rokom a neviem si ho vynachvalit. Dnes v podstate kazda karta podporuje aspon DXT1, vratane mobilnych kariet.
A karta, ktora nepodporuje DXT1 je tak enormne shitna, ze mimo pac-mana na nej uz nic nepustis, cize by som v tom problem nevidel. |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 6. listopad 2007, 16:11:22 Předmět: |
|
|
tak sem si to trochu porovnal v hlavě a udělám to asi takhle:
Napíšu vlastní loader (něco jednoduchýho, jako posílal manox) a doplním to o DevIL, který použiju pro dekompresi v případě, že formát nebude podporován. Ve většině případů to budu moci nahrát přímo a loading bude rychlejší.
VladR: S tím DVD máš pravdu, místa je tam dost, ale je to nepraktické (kvůli změnám v texturách, práce s repository, ...) a navíc, tohle bude pro menší hříčku. _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
VladR
Založen: 30. 07. 2007 Příspěvky: 1322 Bydliště: Greater New York City Area
|
Zaslal: 7. listopad 2007, 14:12:15 Předmět: |
|
|
]semo[ napsal: |
VladR: S tím DVD máš pravdu, místa je tam dost, ale je to nepraktické (kvůli změnám v texturách, práce s repository, ...) a navíc, tohle bude pro menší hříčku. |
Bude ta "mensi hricka" obsahovat dost textur ? Tam by to uz mohlo stat za tu ostaru s repository a spravou textur, ale to uz musis vediet ty, ci to ma v danej situacii zmysel. |
|
Návrat nahoru |
|
|
|