From e4b4c040f08e71de2c6f6be76602110a76c4441d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20D=C3=B6singer?= Date: Fri, 8 Dec 2006 01:41:43 +0100 Subject: [PATCH] wined3d: Move WINED3DRS_CULLMODE to the state table. --- dlls/wined3d/device.c | 40 +--------------------------------------- dlls/wined3d/state.c | 42 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 42 insertions(+), 40 deletions(-) diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index 4936fa6c248..9c58a7b3dc9 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -3439,46 +3439,8 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetRenderState(IWineD3DDevice *iface, W case WINED3DRS_FILLMODE : case WINED3DRS_LIGHTING : case WINED3DRS_ZENABLE : - StateTable[STATE_RENDER(State)].apply(STATE_RENDER(State), This->stateBlock); - break; - case WINED3DRS_CULLMODE : - - /* If we are culling "back faces with clockwise vertices" then - set front faces to be counter clockwise and enable culling - of back faces */ - switch ((WINED3DCULL) Value) { - case WINED3DCULL_NONE: - glDisable(GL_CULL_FACE); - checkGLcall("glDisable GL_CULL_FACE"); - break; - case WINED3DCULL_CW: - glEnable(GL_CULL_FACE); - checkGLcall("glEnable GL_CULL_FACE"); - if (This->render_offscreen) { - glFrontFace(GL_CW); - checkGLcall("glFrontFace GL_CW"); - } else { - glFrontFace(GL_CCW); - checkGLcall("glFrontFace GL_CCW"); - } - glCullFace(GL_BACK); - break; - case WINED3DCULL_CCW: - glEnable(GL_CULL_FACE); - checkGLcall("glEnable GL_CULL_FACE"); - if (This->render_offscreen) { - glFrontFace(GL_CCW); - checkGLcall("glFrontFace GL_CCW"); - } else { - glFrontFace(GL_CW); - checkGLcall("glFrontFace GL_CW"); - } - glCullFace(GL_BACK); - break; - default: - FIXME("Unrecognized/Unhandled WINED3DCULL value %d\n", Value); - } + StateTable[STATE_RENDER(State)].apply(STATE_RENDER(State), This->stateBlock); break; case WINED3DRS_SHADEMODE : diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c index b47847a89f5..59f1cba88fe 100644 --- a/dlls/wined3d/state.c +++ b/dlls/wined3d/state.c @@ -114,6 +114,46 @@ static void state_zenable(DWORD state, IWineD3DStateBlockImpl *stateblock) { } } +static void state_cullmode(DWORD state, IWineD3DStateBlockImpl *stateblock) { + /* TODO: Put this into the offscreen / onscreen rendering block due to device->render_offscreen */ + + /* If we are culling "back faces with clockwise vertices" then + set front faces to be counter clockwise and enable culling + of back faces */ + switch ((WINED3DCULL) stateblock->renderState[WINED3DRS_CULLMODE]) { + case WINED3DCULL_NONE: + glDisable(GL_CULL_FACE); + checkGLcall("glDisable GL_CULL_FACE"); + break; + case WINED3DCULL_CW: + glEnable(GL_CULL_FACE); + checkGLcall("glEnable GL_CULL_FACE"); + if (stateblock->wineD3DDevice->render_offscreen) { + glFrontFace(GL_CW); + checkGLcall("glFrontFace GL_CW"); + } else { + glFrontFace(GL_CCW); + checkGLcall("glFrontFace GL_CCW"); + } + glCullFace(GL_BACK); + break; + case WINED3DCULL_CCW: + glEnable(GL_CULL_FACE); + checkGLcall("glEnable GL_CULL_FACE"); + if (stateblock->wineD3DDevice->render_offscreen) { + glFrontFace(GL_CCW); + checkGLcall("glFrontFace GL_CCW"); + } else { + glFrontFace(GL_CW); + checkGLcall("glFrontFace GL_CW"); + } + glCullFace(GL_BACK); + break; + default: + FIXME("Unrecognized/Unhandled WINED3DCULL value %d\n", stateblock->renderState[WINED3DRS_CULLMODE]); + } +} + const struct StateEntry StateTable[] = { /* State name representative, apply function */ @@ -139,7 +179,7 @@ const struct StateEntry StateTable[] = { /* 19, WINED3DRS_SRCBLEND */ STATE_RENDER(WINED3DRS_ALPHABLENDENABLE), state_unknown }, { /* 20, WINED3DRS_DESTBLEND */ STATE_RENDER(WINED3DRS_ALPHABLENDENABLE), state_unknown }, { /* 21, WINED3DRS_TEXTUREMAPBLEND */ 0 /* Handled in ddraw */, state_undefined }, - { /* 22, WINED3DRS_CULLMODE */ STATE_RENDER(WINED3DRS_CULLMODE), state_unknown }, + { /* 22, WINED3DRS_CULLMODE */ STATE_RENDER(WINED3DRS_CULLMODE), state_cullmode }, { /* 23, WINED3DRS_ZFUNC */ STATE_RENDER(WINED3DRS_ZFUNC), state_unknown }, { /* 24, WINED3DRS_ALPHAREF */ STATE_RENDER(WINED3DRS_ALPHATESTENABLE), state_unknown }, { /* 25, WINED3DRS_ALPHAFUNC */ STATE_RENDER(WINED3DRS_ALPHATESTENABLE), state_unknown },