Question Loading a DDS file from system memory D3D9

Phoenix

New member
Joined
Nov 17, 2009
Messages
72
Reaction score
0
Points
0
I am having difficulty loading a raw 24-bit RGB texture data from inside a file which contains other data. My idea is that I create a DDS file in system memory, load in the RGB data, and the use the D3DXCreateTextureFromFileInMemoryEx() function to create a mip-mapped texture from it. As far as I can tell, the DDS header is correct, but D3DXCreateTextureFromFileInMemoryEx() keeps failing. Here's my code:

Code:
[FONT=DejaVu Sans Mono][SIZE=2]
[SIZE=2][FONT=DejaVu Sans Mono]HRESULT CreateTextureFromGND(FILE *pFileGND, IDirect3DDevice9 *pDevice, UINT Size, UINT MipLevels, UINT Usage, [/FONT][/SIZE]
[SIZE=2][FONT=DejaVu Sans Mono]D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, DWORD MipFilter, D3DCOLOR ColorKey, D3DXIMAGE_INFO *pSrcInfo,[/FONT][/SIZE]
[SIZE=2][FONT=DejaVu Sans Mono]PALETTEENTRY *pPalette, IDirect3DTexture9 **ppTexture)[/FONT][/SIZE]
[SIZE=2][FONT=DejaVu Sans Mono]{[/FONT][/SIZE]
[SIZE=2][FONT=DejaVu Sans Mono]HRESULT hr(D3D_OK);[/FONT][/SIZE]
[/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#008000][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#008000][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#008000]// Create a DDS file in memory and create a texture from it.[/COLOR][/SIZE][/FONT]
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][FONT=DejaVu Sans Mono][SIZE=2]UINT NumTexels(Size*Size);[/SIZE][/FONT]
[SIZE=2][FONT=DejaVu Sans Mono]UINT FileSizeDDS([/FONT][/SIZE][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff]sizeof[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][FONT=DejaVu Sans Mono][SIZE=2](DWORD)+[/SIZE][/FONT][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff]sizeof[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][FONT=DejaVu Sans Mono][SIZE=2](DDS_HEADER)+NumTexels*[/SIZE][/FONT][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff]sizeof[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][FONT=DejaVu Sans Mono][SIZE=2](PackedRGB));[/SIZE][/FONT]
[/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff]char[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][FONT=DejaVu Sans Mono][SIZE=2] *pFileDDS([/SIZE][/FONT][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff]new[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][FONT=DejaVu Sans Mono][SIZE=2](std::nothrow) [/SIZE][/FONT][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff]char[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][FONT=DejaVu Sans Mono][SIZE=2][FileSizeDDS]);[/SIZE][/FONT]
[/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][FONT=DejaVu Sans Mono][SIZE=2](!pFileDDS)[/SIZE][/FONT]
[/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff]return[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][FONT=DejaVu Sans Mono][SIZE=2] E_FAIL;[/SIZE][/FONT]
[SIZE=2][FONT=DejaVu Sans Mono]*(DWORD *)pFileDDS=MAKEFOURCC([/FONT][/SIZE][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#a31515][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#a31515][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#a31515]'D'[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][FONT=DejaVu Sans Mono][SIZE=2], [/SIZE][/FONT][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#a31515][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#a31515][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#a31515]'D'[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][FONT=DejaVu Sans Mono][SIZE=2], [/SIZE][/FONT][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#a31515][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#a31515][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#a31515]'S'[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][FONT=DejaVu Sans Mono][SIZE=2], [/SIZE][/FONT][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#a31515][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#a31515][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#a31515]' '[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][FONT=DejaVu Sans Mono][SIZE=2]);[/SIZE][/FONT]
[/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#008000][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#008000][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#008000]// Fill out the DDS header structure.[/COLOR][/SIZE][/FONT]
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][FONT=DejaVu Sans Mono][SIZE=2]DDS_HEADER *pHeaderDDS((DDS_HEADER *)pFileDDS+[/SIZE][/FONT][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff]sizeof[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][FONT=DejaVu Sans Mono][SIZE=2](DWORD));[/SIZE][/FONT]
[SIZE=2][FONT=DejaVu Sans Mono]memset(pHeaderDDS, 0, [/FONT][/SIZE][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff]sizeof[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][FONT=DejaVu Sans Mono][SIZE=2](DDS_HEADER));[/SIZE][/FONT]
[SIZE=2][FONT=DejaVu Sans Mono]pHeaderDDS->dwSize=124;[/FONT][/SIZE]
[SIZE=2][FONT=DejaVu Sans Mono]pHeaderDDS->dwFlags=DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT | DDSD_PITCH;[/FONT][/SIZE]
[SIZE=2][FONT=DejaVu Sans Mono]pHeaderDDS->dwHeight=Size;[/FONT][/SIZE]
[SIZE=2][FONT=DejaVu Sans Mono]pHeaderDDS->dwWidth=Size;[/FONT][/SIZE]
[SIZE=2][FONT=DejaVu Sans Mono]pHeaderDDS->dwLinearSize=Size*[/FONT][/SIZE][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff]sizeof[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][FONT=DejaVu Sans Mono][SIZE=2](PackedRGB);[/SIZE][/FONT]
[SIZE=2][FONT=DejaVu Sans Mono]pHeaderDDS->ddpf.dwSize=32;[/FONT][/SIZE]
[SIZE=2][FONT=DejaVu Sans Mono]pHeaderDDS->ddpf.dwFlags=DDPF_RGB;[/FONT][/SIZE]
[SIZE=2][FONT=DejaVu Sans Mono]pHeaderDDS->ddpf.dwRGBBitCount=8*[/FONT][/SIZE][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff]sizeof[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][FONT=DejaVu Sans Mono][SIZE=2](PackedRGB);[/SIZE][/FONT]
[SIZE=2][FONT=DejaVu Sans Mono]pHeaderDDS->ddpf.dwRBitMask=0x00ff0000;[/FONT][/SIZE]
[SIZE=2][FONT=DejaVu Sans Mono]pHeaderDDS->ddpf.dwGBitMask=0x0000ff00;[/FONT][/SIZE]
[SIZE=2][FONT=DejaVu Sans Mono]pHeaderDDS->ddpf.dwBBitMask=0x000000ff;[/FONT][/SIZE]
[SIZE=2][FONT=DejaVu Sans Mono]pHeaderDDS->dwCaps=DDSCAPS_TEXTURE;[/FONT][/SIZE]
 
[/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#008000][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#008000][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#008000]// Read the raw texture data from the GND file. This assumes the file pointer is set at the correct location.[/COLOR][/SIZE][/FONT]
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][FONT=DejaVu Sans Mono][SIZE=2]pHeaderDDS++;[/SIZE][/FONT]
[SIZE=2][FONT=DejaVu Sans Mono]PackedRGB *pRGB((PackedRGB *)pHeaderDDS);[/FONT][/SIZE]
[/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][FONT=DejaVu Sans Mono][SIZE=2](fread_s(pRGB, NumTexels*[/SIZE][/FONT][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff]sizeof[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][FONT=DejaVu Sans Mono][SIZE=2](PackedRGB), [/SIZE][/FONT][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff]sizeof[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][FONT=DejaVu Sans Mono][SIZE=2](PackedRGB), NumTexels, pFileGND)!=NumTexels)[/SIZE][/FONT]
[SIZE=2][FONT=DejaVu Sans Mono]{[/FONT][/SIZE]
[/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff]delete[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][FONT=DejaVu Sans Mono][SIZE=2] [] pFileDDS;[/SIZE][/FONT]
[/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff]return[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][FONT=DejaVu Sans Mono][SIZE=2] E_FAIL;[/SIZE][/FONT]
[SIZE=2][FONT=DejaVu Sans Mono]}[/FONT][/SIZE]
[/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#008000][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#008000][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#008000]// Create the texture.[/COLOR][/SIZE][/FONT]
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][FONT=DejaVu Sans Mono][SIZE=2](FAILED(hr=D3DXCreateTextureFromFileInMemoryEx(pDevice, pFileDDS, FileSizeDDS, Size, Size, MipLevels, Usage,[/SIZE][/FONT]
[SIZE=2][FONT=DejaVu Sans Mono]Format, Pool, Filter, MipFilter, ColorKey, pSrcInfo, pPalette, ppTexture)))[/FONT][/SIZE]
[SIZE=2][FONT=DejaVu Sans Mono]{[/FONT][/SIZE]
[/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff]delete[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][FONT=DejaVu Sans Mono][SIZE=2] [] pFileDDS;[/SIZE][/FONT]
[/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff]return[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][FONT=DejaVu Sans Mono][SIZE=2] hr;[/SIZE][/FONT]
[SIZE=2][FONT=DejaVu Sans Mono]}[/FONT][/SIZE]
[/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff]delete[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][FONT=DejaVu Sans Mono][SIZE=2] [] pFileDDS;[/SIZE][/FONT]
[/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff][FONT=DejaVu Sans Mono][SIZE=2][COLOR=#0000ff]return[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=DejaVu Sans Mono][SIZE=2][FONT=DejaVu Sans Mono][SIZE=2] hr;[/SIZE][/FONT]
[SIZE=2][FONT=DejaVu Sans Mono]}[/FONT][/SIZE]
[/SIZE][/FONT]

Thanks for any help. Sorry about the formatting of my source - it didn't seem to work.


---------- Post added at 04:16 PM ---------- Previous post was at 03:59 PM ----------

Not to worry, I have found my error:

Code:
 DDS_HEADER *pHeaderDDS((DDS_HEADER *)(pFileDDS+sizeof(DWORD)));

It works now.
 
Last edited:
Top