[D3D 86] Handle more light states
Christian Costa
titan.costa at wanadoo.fr
Sun Jan 19 01:23:26 CST 2003
Changelog :
Handle more light states.
Christian Costa titan.costa at wanadoo.fr
-------------- next part --------------
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;
}
More information about the wine-patches
mailing list