Die 1bit alfa plane von DXT1 Texturen in D3D funktioniert in meinem Spiel nicht.
Ich habe mit GIMP eine DXT1 Textur mit 1 Bit Alpha gemacht. Auflösung ist 2kx2k. Wenn ich sie per GIMP oder DDSView wieder lade, sehe ich die "Löcher" die ich geschnitten habe, d.h. die Textur ist ok.
Ich lade die Textur im Spiel per D3DXCreateTextureFromFile. Der Rückgabewert ist ok und wenn ich getDesc mache, sehe ich, dass die Textur im Speicher auch als D3DFMT_DXT1 vorliegt.
Ich habe durchdebugged und gesehen dass, korrekterweise, der folgende Code aufgerufen und durchlaufen wird:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
|
if(TEX_INFO_IS_INIT_TEX_IS_1BIT_ALPHA(pTheMesh->iMapNumber))
{
CHECK_HR(pd3dDevice->SetRenderState(D3DRS_ALPHATESTENABLE, TRUE));
CHECK_HR(pd3dDevice->SetRenderState(D3DRS_ALPHAREF, (DWORD)0x00000080)); //(DWORD)0x00000001); // 0x08);
CHECK_HR(pd3dDevice->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL));
}
|
bevor DrawIndexedPrimitives aufgerufen wird. Beim Debuggen hatte ich die D3D Runtime auf "debug" gestellt und die Zahl der ausgegebenen Warnungen auf Maximum und es kommt keine einzige die etwas mit meinem Problem zu tun hat. Im Spiel sind alle Stellen, die durchsichtig sein sollten, Opaque schwarz.
Ich habe eine GeForce go 6800 und z.B. D3DCMP_GREATEREQUAL ist laut DeviceCaps erlaubt.
Ich suche sowohl Ideen was falsch sein könnte als auch wie ich den Fehler weiter einkreisen könnte.