Hey,
Ich habe eine Frage betreffend Skins mit dem MDL7 SDK. Ich generiere mit GameEdit eine Cubemap für einen Skin - klappt perfekt. Diesen will ich jetzt abspeichern.
Dafür habe ich folgenden code:
Code:
D3DLOCKED_RECT rc9_0; memset(&rc9_0,0,sizeof(D3DLOCKED_RECT));
IDirect3DSurface9* surface9_0 = 0;
tex9 = (LPDIRECT3DTEXTURE9)GEditmip0->d3dtex;
hResult = tex9->GetSurfaceLevel(0,&surface9_0);
if(hResult != D3D_OK) { return(0); }
hResult = surface9_0->LockRect(&rc9_0,NULL,D3DLOCK_READONLY);
if(hResult != D3D_OK) { return(0); }
mdlw.SkinBits( (const unsigned char*)rc9_0.pBits,NULL,NULL,NULL);
surface9_0->UnlockRect();
Das klappt auch wunderbar mit allen Formaten. Ein Problem scheint allerdings aufzutreten wenn ich nicht square texturen (z.B. 1536*256 oder 12*6 pixel) in einer textur speichern will.
Die Textur ist dann in MED total zerschossen (viele schwarze Linien usw.). Können Sie sich das an den Code oberhalb erklären? Bzw. ist das überhaupt richtig/möglich die Textur so zu laden?
Bsp: eine ehemalig perfekt aussehende cubemap

Vielen Dank im voraus,
mit freundlichen Grüßen,
Timo
PS: Kann es etwas mit MdlWriteStruct.SkinPoint zu tun haben?
EDIT: Das Problem ist vermutlich, dass DirectX das Surface automatisch auf eine "Power of 2" vergrößert oder? Nur selbst wenn ich eine RECT anlege, die das beschränkt bringt das nichts (bzw. gleiches Ergebnis)
Code:
RECT square; square.top=0; square.bottom=(long)bmpheight; square.right=(long)bmpwidth; square.left=0;
tex9->GetSurfaceLevel(0,&surface9_0);
surface9_0->LockRect(&rc9_0,&square,D3DLOCK_READONLY);