ich habe eine Problem beim Laden von Texturen mit DirectX 8.1. Habe mein Programm von DirectX 9 auf 8.1 portiert und seitdem lädt er auf >>einem<< meiner Rechner die Texturen nicht richtig bzw. ich erhalte über GetLevelDesc bei Breite und Höhe nur die PowerOf2 Werte (also immer der Größere auf 32,64,128 etc.). Dementsprechend sieht das dann sehr merkwürdig aus. Auf meiner HD4890 gehts, nur nicht auf meiner alten Radeon mit GTO2 Chip. Ich hab auch ein DirectX 8.1 Programm wo das jedoch geht und die richtige Größe ermittelt wird... Im Unterschied hierzu lädt das Programm aber PNG's anstatt wie ich 32 Bit TGA (mit Alpha Channel) und macht wahrscheinlich irgendwas anders. Am Wochenende werde ich das ganze wohl mal zerfpflücken und ausprobieren. Wollte hier nur mal anfragen, vielleicht hat jemand spontant ne Idee wie ich da ansetzen kann...
Ursprüngliche DirectX 9 Present Parameters:
Code: Alles auswählen
DEBUG_LOG("Initializing Present Parameters...");
ZeroMemory(&m_d3DPP, sizeof(m_d3DPP));
m_d3DPP.Windowed = (false == m_viewport->GetExclusive());
m_d3DPP.SwapEffect = D3DSWAPEFFECT_DISCARD;
m_d3DPP.EnableAutoDepthStencil = m_viewport->GetZBufferEnabled();
m_d3DPP.AutoDepthStencilFormat = D3DFMT_D16;
m_d3DPP.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
m_d3DPP.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
m_d3DPP.BackBufferCount = 1;
m_d3DPP.hDeviceWindow = m_viewport->GetHandle();
m_d3DPP.BackBufferWidth = m_viewport->GetWidth();
m_d3DPP.BackBufferHeight = m_viewport->GetHeight();
m_d3DPP.BackBufferFormat = D3DFMT_A8R8G8B8;
m_d3DPP.Flags = D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
Code: Alles auswählen
DEBUG_LOG("Initializing Present Parameters...");
ZeroMemory(&m_d3DPP, sizeof(m_d3DPP));
m_d3DPP.Windowed = (false == m_viewport->GetExclusive());
m_d3DPP.SwapEffect = D3DSWAPEFFECT_DISCARD;
m_d3DPP.EnableAutoDepthStencil = m_viewport->GetZBufferEnabled();
m_d3DPP.AutoDepthStencilFormat = D3DFMT_D16;
if (false == m_d3DPP.Windowed)
{
m_d3DPP.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
m_d3DPP.FullScreen_PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
}
m_d3DPP.BackBufferCount = 1;
m_d3DPP.hDeviceWindow = m_viewport->GetHandle();
m_d3DPP.BackBufferWidth = m_viewport->GetWidth();
m_d3DPP.BackBufferHeight = m_viewport->GetHeight();
m_d3DPP.BackBufferFormat = D3DFMT_X8R8G8B8;
m_d3DPP.Flags = D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
Code: Alles auswählen
LPDIRECT3DTEXTURE8 pNewTex;
D3DSURFACE_DESC SurfaceDesc;
D3DXCreateTextureFromFileExA(m_d3DDevice,
_filename,
D3DX_DEFAULT,
D3DX_DEFAULT,
1,
NULL,
D3DFMT_UNKNOWN,
D3DPOOL_MANAGED,
D3DTEXF_POINT,
D3DTEXF_POINT,
0,
NULL,
NULL,
&pNewTex);
if (pNewTex == NULL)
return;
pNewTex->GetLevelDesc(0,&SurfaceDesc);
m_filename = _filename;
m_width = SurfaceDesc.Width; // Auf allen Rechnern die Richtige Breite und...
m_height = SurfaceDesc.Height; // auch Höhe bis auf einen mit ner Radeon GTO2 Chipset
m_data = pNewTex;
Ist eigentlich D3DFMT_X8R8G8B8 oder D3DFMT_A8R8G8B8 das sinnvollere Format, wenn ich eh nen Alpha Channel benutze? Nicht bei allen Bildern, aber halt bei den meisten...
Viele Grüße
Tornby