.[ ČeskéHry.cz ].
DDS

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
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č

PříspěvekZaslal: 6. listopad 2007, 12:01:00    Předmět: DDS Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Manox



Založen: 30. 07. 2007
Příspěvky: 140
Bydliště: Brno

PříspěvekZaslal: 6. listopad 2007, 13:25:30    Předmět: Odpovědět s citátem

kód:
#include <ddraw.h>


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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
nou



Založen: 28. 07. 2007
Příspěvky: 1047

PříspěvekZaslal: 6. listopad 2007, 15:34:22    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
VladR



Založen: 30. 07. 2007
Příspěvky: 1322
Bydliště: Greater New York City Area

PříspěvekZaslal: 6. listopad 2007, 15:47:03    Předmět: Re: DDS Odpovědět s citátem

]semo[ napsal:

Existuje nějaká slušná knihovna, která by se dala eventuelně použít?
Napr. DirectX Very Happy

]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
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



Založen: 29. 07. 2007
Příspěvky: 1526
Bydliště: Telč

PříspěvekZaslal: 6. listopad 2007, 16:11:22    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
VladR



Založen: 30. 07. 2007
Příspěvky: 1322
Bydliště: Greater New York City Area

PříspěvekZaslal: 7. listopad 2007, 14:12:15    Předmět: Odpovědět s citátem

]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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna