[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