From 2f4b9e42bc9e773db25aa03ab7157e67be89194f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Stefan=20D=C3=B6singer?= Date: Fri, 15 Jun 2007 21:33:54 +0200 Subject: [PATCH] wined3d: Move material applying to the state table. --- dlls/wined3d/device.c | 32 +------------------------------- dlls/wined3d/state.c | 23 +++++++++++++++++++++-- dlls/wined3d/wined3d_private.h | 4 +++- 3 files changed, 25 insertions(+), 34 deletions(-) diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index ac418d9cceb..f7d9042fe26 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -2697,37 +2697,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetMaterial(IWineD3DDevice *iface, CONS return WINED3D_OK; } - ENTER_GL(); - TRACE("(%p) : Diffuse (%f,%f,%f,%f)\n", This, pMaterial->Diffuse.r, pMaterial->Diffuse.g, - pMaterial->Diffuse.b, pMaterial->Diffuse.a); - TRACE("(%p) : Ambient (%f,%f,%f,%f)\n", This, pMaterial->Ambient.r, pMaterial->Ambient.g, - pMaterial->Ambient.b, pMaterial->Ambient.a); - TRACE("(%p) : Specular (%f,%f,%f,%f)\n", This, pMaterial->Specular.r, pMaterial->Specular.g, - pMaterial->Specular.b, pMaterial->Specular.a); - TRACE("(%p) : Emissive (%f,%f,%f,%f)\n", This, pMaterial->Emissive.r, pMaterial->Emissive.g, - pMaterial->Emissive.b, pMaterial->Emissive.a); - TRACE("(%p) : Power (%f)\n", This, pMaterial->Power); - - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, (float*) &This->updateStateBlock->material.Ambient); - checkGLcall("glMaterialfv(GL_AMBIENT)"); - glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, (float*) &This->updateStateBlock->material.Diffuse); - checkGLcall("glMaterialfv(GL_DIFFUSE)"); - - /* Only change material color if specular is enabled, otherwise it is set to black */ - if (This->stateBlock->renderState[WINED3DRS_SPECULARENABLE]) { - glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, (float*) &This->updateStateBlock->material.Specular); - checkGLcall("glMaterialfv(GL_SPECULAR"); - } else { - float black[4] = {0.0f, 0.0f, 0.0f, 0.0f}; - glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, &black[0]); - checkGLcall("glMaterialfv(GL_SPECULAR"); - } - glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, (float*) &This->updateStateBlock->material.Emissive); - checkGLcall("glMaterialfv(GL_EMISSION)"); - glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, This->updateStateBlock->material.Power); - checkGLcall("glMaterialf(GL_SHININESS"); - - LEAVE_GL(); + IWineD3DDeviceImpl_MarkStateDirty(This, STATE_MATERIAL); return WINED3D_OK; } diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c index 3b7c5c97780..d83e7f7deb9 100644 --- a/dlls/wined3d/state.c +++ b/dlls/wined3d/state.c @@ -505,11 +505,12 @@ state_specularenable(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3DCon * whether WINED3DRS_SPECULARENABLE is enabled or not. */ - TRACE("Setting specular enable state\n"); - /* TODO: Add to the material setting functions */ + TRACE("Setting specular enable state and materials\n"); if (stateblock->renderState[WINED3DRS_SPECULARENABLE]) { glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, (float*) &stateblock->material.Specular); checkGLcall("glMaterialfv"); + glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, stateblock->material.Power); + checkGLcall("glMaterialf(GL_SHININESS"); if (GL_SUPPORT(EXT_SECONDARY_COLOR)) { glEnable(GL_COLOR_SUM_EXT); } else { @@ -541,6 +542,22 @@ state_specularenable(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3DCon checkGLcall("glFinalCombinerInputNV()"); } } + + TRACE("(%p) : Diffuse (%f,%f,%f,%f)\n", stateblock->wineD3DDevice, stateblock->material.Diffuse.r, stateblock->material.Diffuse.g, + stateblock->material.Diffuse.b, stateblock->material.Diffuse.a); + TRACE("(%p) : Ambient (%f,%f,%f,%f)\n", stateblock->wineD3DDevice, stateblock->material.Ambient.r, stateblock->material.Ambient.g, + stateblock->material.Ambient.b, stateblock->material.Ambient.a); + TRACE("(%p) : Specular (%f,%f,%f,%f)\n", stateblock->wineD3DDevice, stateblock->material.Specular.r, stateblock->material.Specular.g, + stateblock->material.Specular.b, stateblock->material.Specular.a); + TRACE("(%p) : Emissive (%f,%f,%f,%f)\n", stateblock->wineD3DDevice, stateblock->material.Emissive.r, stateblock->material.Emissive.g, + stateblock->material.Emissive.b, stateblock->material.Emissive.a); + + glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, (float*) &stateblock->material.Ambient); + checkGLcall("glMaterialfv(GL_AMBIENT)"); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, (float*) &stateblock->material.Diffuse); + checkGLcall("glMaterialfv(GL_DIFFUSE)"); + glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, (float*) &stateblock->material.Emissive); + checkGLcall("glMaterialfv(GL_EMISSION)"); } static void state_texfactor(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3DContext *context) { @@ -4517,4 +4534,6 @@ const struct StateEntry StateTable[] = { /* STATE_CLIPPLANE(29) */ STATE_CLIPPLANE(29), clipplane }, { /* STATE_CLIPPLANE(30) */ STATE_CLIPPLANE(30), clipplane }, { /* STATE_CLIPPLANE(31) */ STATE_CLIPPLANE(31), clipplane }, + + { /* STATE_MATERIAL */ STATE_RENDER(WINED3DRS_SPECULARENABLE), state_specularenable}, }; diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 3c0dfee8c1e..458e7ff20f4 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -473,7 +473,9 @@ typedef void (*APPLYSTATEFUNC)(DWORD state, IWineD3DStateBlockImpl *stateblock, #define STATE_CLIPPLANE(a) (STATE_SCISSORRECT + 1 + (a)) #define STATE_IS_CLIPPLANE(a) ((a) >= STATE_CLIPPLANE(0) && (a) <= STATE_CLIPPLANE(MAX_CLIPPLANES - 1)) -#define STATE_HIGHEST (STATE_CLIPPLANE(MAX_CLIPPLANES - 1)) +#define STATE_MATERIAL (STATE_CLIPPLANE(MAX_CLIPPLANES)) + +#define STATE_HIGHEST (STATE_MATERIAL) struct StateEntry { -- 2.11.4.GIT