runtime/gfx/ddutil: Fix flag detection

This fixes loading of 2D textures
This commit is contained in:
Michael Fabian 'Xaymar' Dirks
2019-01-19 18:29:57 +01:00
parent 5f62431f61
commit 156ecae690
+12 -28
View File
@@ -311,19 +311,12 @@ IDirectDrawSurface7* ddUtil::createSurface(int w, int h, int flags, gxGraphics*
desc.dwFlags |= DDSD_HEIGHT; desc.dwFlags |= DDSD_HEIGHT;
} }
// Format // Pixel Format
if (flags & gxCanvas::CANVAS_TEXTURE) { if (flags & gxCanvas::CANVAS_3DRENDER) {
// Flags guaranteed: // 3D RenderTargets must be in Primary format.
// - CANVAS_TEX_RGB
// - CANVAS_TEX_ALPHA
// - CANVAS_TEXTURE
desc.dwFlags |= DDSCAPS_3DDEVICE | DDSD_PIXELFORMAT; desc.dwFlags |= DDSCAPS_3DDEVICE | DDSD_PIXELFORMAT;
desc.ddsCaps.dwCaps |= DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY; desc.ddsCaps.dwCaps |= DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM;
if (flags & gxCanvas::CANVAS_TEXTURE) { desc.ddpfPixelFormat = gfx->primFmt;
desc.ddpfPixelFormat = gfx->primFmt;
} else {
desc.ddpfPixelFormat = gfx->texRGBAlphaFmt[hi];
}
} else { } else {
if (flags & gxCanvas::CANVAS_TEX_MASK) { if (flags & gxCanvas::CANVAS_TEX_MASK) {
desc.dwFlags |= DDSD_PIXELFORMAT; desc.dwFlags |= DDSD_PIXELFORMAT;
@@ -340,33 +333,24 @@ IDirectDrawSurface7* ddUtil::createSurface(int w, int h, int flags, gxGraphics*
} }
} }
// Cube Map // Is 3D Texture?
if (flags & (gxCanvas::CANVAS_TEX_CUBE)) { if (flags & gxCanvas::CANVAS_TEXTURE) {
desc.ddsCaps.dwCaps |= DDSCAPS_COMPLEX;
desc.ddsCaps.dwCaps2 |= DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_ALLFACES;
}
// Video Memory
if (!(flags & gxCanvas::CANVAS_TEX_VIDMEM)) {
desc.ddsCaps.dwCaps2 |= DDSCAPS2_TEXTUREMANAGE;
if (flags & gxCanvas::CANVAS_TEX_MIPMAP) {
desc.ddsCaps.dwCaps |= DDSCAPS_MIPMAP | DDSCAPS_COMPLEX;
}
}
// Texture Move
if ((flags & gxCanvas::CANVAS_TEXTURE) || (flags & gxCanvas::CANVAS_3DRENDER)) {
desc.ddsCaps.dwCaps |= DDSCAPS_TEXTURE; desc.ddsCaps.dwCaps |= DDSCAPS_TEXTURE;
// Video Memory
if (!(flags & gxCanvas::CANVAS_TEX_VIDMEM)) { if (!(flags & gxCanvas::CANVAS_TEX_VIDMEM)) {
desc.ddsCaps.dwCaps2 |= DDSCAPS2_TEXTUREMANAGE; desc.ddsCaps.dwCaps2 |= DDSCAPS2_TEXTUREMANAGE;
if (flags & gxCanvas::CANVAS_TEX_MIPMAP) { if (flags & gxCanvas::CANVAS_TEX_MIPMAP) {
desc.ddsCaps.dwCaps |= DDSCAPS_MIPMAP | DDSCAPS_COMPLEX; desc.ddsCaps.dwCaps |= DDSCAPS_MIPMAP | DDSCAPS_COMPLEX;
} }
} }
// Cube Map
if (flags & (gxCanvas::CANVAS_TEX_CUBE)) { if (flags & (gxCanvas::CANVAS_TEX_CUBE)) {
desc.ddsCaps.dwCaps |= DDSCAPS_COMPLEX; desc.ddsCaps.dwCaps |= DDSCAPS_COMPLEX;
desc.ddsCaps.dwCaps2 |= DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_ALLFACES; desc.ddsCaps.dwCaps2 |= DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_ALLFACES;
} }
adjustTexSize((int*)&desc.dwWidth, (int*)&desc.dwHeight, gfx->dir3dDev, !(flags & (gxCanvas::CANVAS_TEX_NPOT))); adjustTexSize((int*)&desc.dwWidth, (int*)&desc.dwHeight, gfx->dir3dDev, !(flags & (gxCanvas::CANVAS_TEX_NPOT)));
} else { } else {
desc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; desc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;