Commit 820b8ca0 authored by Christian Costa's avatar Christian Costa Committed by Alexandre Julliard

Handle more light states.

parent 2a56437f
...@@ -572,42 +572,65 @@ GL_IDirect3DDeviceImpl_3_2T_SetLightState(LPDIRECT3DDEVICE3 iface, ...@@ -572,42 +572,65 @@ GL_IDirect3DDeviceImpl_3_2T_SetLightState(LPDIRECT3DDEVICE3 iface,
DWORD dwLightState) DWORD dwLightState)
{ {
ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface); ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
TRACE("(%p/%p)->(%08x,%08lx)\n", This, iface, dwLightStateType, dwLightState); TRACE("(%p/%p)->(%08x,%08lx)\n", This, iface, dwLightStateType, dwLightState);
switch (dwLightStateType) { if (!dwLightStateType && (dwLightStateType > D3DLIGHTSTATE_COLORVERTEX))
case D3DLIGHTSTATE_MATERIAL: { /* 1 */ TRACE("Unexpected Light State Type\n");
IDirect3DMaterialImpl *mat = (IDirect3DMaterialImpl *) dwLightState; return DDERR_INVALIDPARAMS;
if (mat != NULL) { if (dwLightStateType == D3DLIGHTSTATE_MATERIAL /* 1 */) {
ENTER_GL(); IDirect3DMaterialImpl *mat = (IDirect3DMaterialImpl *) dwLightState;
mat->activate(mat);
LEAVE_GL();
} else {
ERR(" D3DLIGHTSTATE_MATERIAL called with NULL material !!!\n");
}
} break;
case D3DLIGHTSTATE_AMBIENT: /* 2 */
IDirect3DDevice7_SetRenderState(ICOM_INTERFACE(This, IDirect3DDevice7),
D3DRENDERSTATE_AMBIENT,
dwLightState);
break;
#define UNSUP(x) case D3DLIGHTSTATE_##x: FIXME("unsupported D3DLIGHTSTATE_" #x "!\n");break; if (mat != NULL) {
UNSUP(COLORMODEL); ENTER_GL();
UNSUP(FOGMODE); mat->activate(mat);
UNSUP(FOGSTART); LEAVE_GL();
UNSUP(FOGEND); } else {
UNSUP(FOGDENSITY); ERR(" D3DLIGHTSTATE_MATERIAL called with NULL material !!!\n");
UNSUP(COLORVERTEX); }
#undef UNSUP } 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) {
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: IDirect3DDevice7_SetRenderState(ICOM_INTERFACE(This, IDirect3DDevice7),
TRACE("Unexpected Light State Type\n"); rs,dwLightState);
return DDERR_INVALIDPARAMS;
} }
return DD_OK; return DD_OK;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment