DirectX - Komprimierte Texturen

Ischatar

Grünschnabel
Hoi zusammen, ich bin neu hier! :)

Ich arbeite gerade mit DirectX und ja, da hab ich erwartungsgemäss ein Problem. Ich habe komprimierte Texturen (DXTN (N: 1 - 5)) und möchte die gerne Laden.

Grundsätzlich habe ich da auch schon etwas nettes in der MSDN gefunden, nämlich:
http://msdn.microsoft.com/en-us/library/bb206307(VS.85).aspx

Folgende Situation:
Ich lese aus ner Datei, Header und solche Sachen und habe irgendwann einen Zeiger auf die Daten und weiss, welches Format die Textur hat. Wie kann ich nun von dem Speicher eine Textur bekommen, die ich dann später zum Rendern brauchen kann?

Grüssle und Danke
Ischatar.
 
Habe noch ein bisschen weitergeforscht und D3DXLoadSurfaceFromMemory gefunden wo ich ja auch das Format DXTN angeben kann. Die Mipmaps sind nun einfach in der Datei verteilt und im Header stehen Offsets und Grössen der Daten der Mipmaps. Soll ich die jetzt einfach alle auslesen und hintereinander in einen Buffer schreiben und dann den mit D3DXLoadSurfaceFromMemory sich freuen lassen?

Ischatar.
 
Problem hat sich nach etlichem Googeln doch noch gelöst :)
Code:
ui32 levelcount = 0;
	for(ui32 i = 0; i < 16; ++i)
		if(offsets[i] && sizes[i])
			++levelcount;

	IDirect3DTexture9* tex;

	if(device->CreateTexture(w, h, levelcount, 0, format, D3DPOOL_MANAGED, &tex, 0) != D3D_OK)
	{
		MessageBox(0, "CreateTexture", "Failed!", MB_OK);
		return 0;
	}

	for(ui32 i = 0, a = 0; i < 16; ++i)
	{
		if(offsets[i] && sizes[i])
		{
			ui8* data = new ui8[sizes[i]];
			f.Read(data, offsets[i], sizes[i]);
			IDirect3DSurface9* surf;
			tex->GetSurfaceLevel(a, &surf);
			D3DSURFACE_DESC desc;
			surf->GetDesc(&desc);
			RECT r;
			r.left = r.top = 0;
			r.right = desc.Width;
			r.bottom = desc.Height;
			if(D3DXLoadSurfaceFromMemory(surf, 0, 0, data, format, blocksize * r.right, 0, &r, D3DX_DEFAULT, 0xFF000000) != D3D_OK)
			{
				MessageBox(0, "Load from Memory", "Failed!", MB_OK);
				// return 0; // TODO: Figure out if we should cancle here or just try loading the next mipmap...
			}
			++a;
		}
	}

Grussle
Ischatar.
 
Zurück