Changelog : Handle more light states. Christian Costa titan.costa@wanadoo.fr
diff -u -r ../../../../winebase/wine/dlls/ddraw/d3ddevice/mesa.c d3ddevice/mesa.c --- ../../../../winebase/wine/dlls/ddraw/d3ddevice/mesa.c Wed Jan 8 20:31:50 2003 +++ d3ddevice/mesa.c Sun Jan 19 07:41:01 2003 @@ -572,42 +585,65 @@ DWORD dwLightState) { ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface); - + TRACE("(%p/%p)->(%08x,%08lx)\n", This, iface, dwLightStateType, dwLightState); - switch (dwLightStateType) { - case D3DLIGHTSTATE_MATERIAL: { /* 1 */ - IDirect3DMaterialImpl *mat = (IDirect3DMaterialImpl *) dwLightState; - - if (mat != NULL) { - ENTER_GL(); - mat->activate(mat); - LEAVE_GL(); - } else { - ERR(" D3DLIGHTSTATE_MATERIAL called with NULL material !!!\n"); - } - } break; + if (!dwLightStateType && (dwLightStateType > D3DLIGHTSTATE_COLORVERTEX)) + TRACE("Unexpected Light State Type\n"); + return DDERR_INVALIDPARAMS; + + if (dwLightStateType == D3DLIGHTSTATE_MATERIAL /* 1 */) { + IDirect3DMaterialImpl *mat = (IDirect3DMaterialImpl *) dwLightState; - case D3DLIGHTSTATE_AMBIENT: /* 2 */ - IDirect3DDevice7_SetRenderState(ICOM_INTERFACE(This, IDirect3DDevice7), - D3DRENDERSTATE_AMBIENT, - dwLightState); - break; + if (mat != NULL) { + ENTER_GL(); + mat->activate(mat); + LEAVE_GL(); + } else { + ERR(" D3DLIGHTSTATE_MATERIAL called with NULL material !!!\n"); + } + } else if (dwLightStateType == D3DLIGHTSTATE_COLORMODEL /* 3 */) { + switch (dwLightState) { + case D3DCOLOR_MONO: + ERR("DDCOLOR_MONO should not happend!\n"); + break; + case D3DCOLOR_RGB: + /* We are already in this mode */ + break; + default: + ERR("Unknown color model!\n"); + break; + } + } else { + D3DRENDERSTATETYPE rs; + switch (dwLightStateType) { -#define UNSUP(x) case D3DLIGHTSTATE_##x: FIXME("unsupported D3DLIGHTSTATE_" #x "!\n");break; - UNSUP(COLORMODEL); - UNSUP(FOGMODE); - UNSUP(FOGSTART); - UNSUP(FOGEND); - UNSUP(FOGDENSITY); - UNSUP(COLORVERTEX); -#undef UNSUP + case D3DLIGHTSTATE_AMBIENT: /* 2 */ + rs = D3DRENDERSTATE_AMBIENT; + break; + case D3DLIGHTSTATE_FOGMODE: /* 4 */ + rs = D3DRENDERSTATE_FOGVERTEXMODE; + break; + case D3DLIGHTSTATE_FOGSTART: /* 5 */ + rs = D3DRENDERSTATE_FOGSTART; + break; + case D3DLIGHTSTATE_FOGEND: /* 6 */ + rs = D3DRENDERSTATE_FOGEND; + break; + case D3DLIGHTSTATE_FOGDENSITY: /* 7 */ + rs = D3DRENDERSTATE_FOGDENSITY; + break; + case D3DLIGHTSTATE_COLORVERTEX: /* 8 */ + rs = D3DRENDERSTATE_COLORVERTEX; + break; + default: + break; + } - default: - TRACE("Unexpected Light State Type\n"); - return DDERR_INVALIDPARAMS; + IDirect3DDevice7_SetRenderState(ICOM_INTERFACE(This, IDirect3DDevice7), + rs,dwLightState); } - + return DD_OK; }