L
dazu brauchst du die funktion D3DXCreateTextureFromFileInMemoryEx (EX weils nix besseres gib :D)
zuerst brauchste aber ne richtige header structur ... ohne die ist es "sinnlos":
struct s_bmpheader
{
unsigned short wegdamit; //hatte nen problem und das war die lösung *G*
unsigned short type; //"BM"
DWORD size; //grösse der "datei" inkl header also höhe mal breite mal bytes/pixel + 54
DWORD reserved; // auf 0
DWORD bitmap_offset; // beginnt in der regel ab 54 bzw 0x36
DWORD header_size; // pi mal daum 40 bzw 0x28
DWORD xsize; // width bzw breite
DWORD ysize; // heigth bzw höhe
unsigned short planes; //anzahl der bilder ... 1
unsigned short bits_per_pixel; //steht schon da ;)
DWORD compression; // BMP wtf?! 0
DWORD bitmap_size; //höhe*breite*bytes/pixel
DWORD horizontal_resolution; //... wozu ... 2834 ist "standard"
DWORD vertical_resolution; //... wozu ... 2834 ist "standard"
DWORD num_colors; //0
DWORD num_important_colors; //0
};
so nun brauchste noch einen Puffer wo die daten, bis zum erstellen der textur, abgelegt werden. Grösse is hier das was beim header in size eingetragen wird.
zB so:
LPVOID *buffer = malloc(size);
anschliessend kopierst du die structur in den Puffer:
s_bmpheader bmph;
//hier kommen dann die zuweisungen und erstellen des buffers hin
memcpy(buffer,&bmph.type,size);
anschliessend kannst du die daten eben so "rein kopieren"
und am ende ...:
D3DXIMAGE_INFO di;
di.Depth =....;
di.Format = D3DFMT_.....; //das format per strg+leertaste
di.Height = ....;
di.ImageFileFormat = D3DXIFF_BMP;
di.MipLevels=0;
di.ResourceType = D3DRTYPE_TEXTURE;
di.Width=....;
HRESULT hr;
hr=D3DXCreateTextureFromFileInMemoryEx(d3dDevice,&buffer,
size,xsize,ysize,1,0,D3DFMT_A8R8G8B8,
D3DPOOL_DEFAULT,D3DX_DEFAULT, D3DX_DEFAULT,0,&di,NULL,&textur);
if(hr!=S_OK)
{
//fehler behandeln etc....
}
hat heute bei mir wunderbar gefunzt
schätze ma da war MS zu faul in die Dou zunehmen (wäre ja zuviel vorteil für die anderen *G*)