Changelog : Beginning of state block. Initialize the device with the right D3D default values. Implements GetRenderState, GetTextureStageState and GetLightState. Christian Costa titan.costa@wanadoo.fr
diff -u -r ../../winebase/wine/dlls/ddraw/d3d_private.h dlls/ddraw/d3d_private.h --- ../../winebase/wine/dlls/ddraw/d3d_private.h Thu Jan 2 15:26:24 2003 +++ dlls/ddraw/d3d_private.h Thu Jan 2 15:52:45 2003 @@ -26,6 +26,10 @@ #include "d3d.h" +#define HIGHEST_RENDER_STATE 152 +#define HIGHEST_TEXTURE_STAGE_STATE 24 +#define HIGHEST_LIGHT_STATE 8 + /***************************************************************************** * Predeclare the interface implementation structures */ @@ -39,6 +43,19 @@ #include "ddraw_private.h" +typedef struct STATEBLOCKFLAGS { + BOOL render_state[HIGHEST_RENDER_STATE]; + BOOL texture_stage_state[8][HIGHEST_TEXTURE_STAGE_STATE]; + BOOL light_state[HIGHEST_LIGHT_STATE]; +} STATEBLOCKFLAGS; + +typedef struct STATEBLOCK { + STATEBLOCKFLAGS set_flags; + DWORD render_state[HIGHEST_RENDER_STATE]; + DWORD texture_stage_state[8][HIGHEST_TEXTURE_STAGE_STATE]; + DWORD light_state[HIGHEST_LIGHT_STATE]; +} STATEBLOCK; + /***************************************************************************** * IDirect3D implementation structure. * This is common for interfaces 1, 2, 3 and 7. @@ -212,6 +229,8 @@ void (*matrices_updated)(IDirect3DDeviceImpl *This, DWORD matrices); void (*set_matrices)(IDirect3DDeviceImpl *This, DWORD matrices, D3DMATRIX *world_mat, D3DMATRIX *view_mat, D3DMATRIX *proj_mat); + + STATEBLOCK state_block; }; /***************************************************************************** diff -u -r ../../winebase/wine/dlls/ddraw/d3ddevice/main.c dlls/ddraw/d3ddevice/main.c --- ../../winebase/wine/dlls/ddraw/d3ddevice/main.c Thu Jan 2 15:26:24 2003 +++ dlls/ddraw/d3ddevice/main.c Thu Jan 2 17:27:49 2003 @@ -34,6 +34,170 @@ WINE_DEFAULT_DEBUG_CHANNEL(ddraw); +DWORD InitRenderStateTab[] = { + /*D3DRENDERSTATE_TEXTUREHANDLE, (DWORD)NULL,*/ + D3DRENDERSTATE_ANTIALIAS, D3DANTIALIAS_NONE, + /* FIXME: D3DRENDERSTATE_TEXTUREADDRESS */ + D3DRENDERSTATE_TEXTUREPERSPECTIVE, TRUE, + /* FIXME: D3DRENDERSTATE_WRAPU */ + /* FIXME: D3DRENDERSTATE_WRAPV */ + D3DRENDERSTATE_ZENABLE, FALSE, + D3DRENDERSTATE_FILLMODE, D3DFILL_SOLID, + D3DRENDERSTATE_SHADEMODE, D3DSHADE_GOURAUD, + D3DRENDERSTATE_LINEPATTERN, 0, + D3DRENDERSTATE_MONOENABLE, FALSE, + D3DRENDERSTATE_ROP2, R2_COPYPEN, + D3DRENDERSTATE_PLANEMASK, 0xFFFFFFFF, + D3DRENDERSTATE_ZWRITEENABLE, TRUE, + D3DRENDERSTATE_ALPHATESTENABLE, FALSE, + D3DRENDERSTATE_LASTPIXEL, TRUE, + D3DRENDERSTATE_TEXTUREMAG, D3DFILTER_NEAREST, + D3DRENDERSTATE_TEXTUREMIN, D3DFILTER_NEAREST, + D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE, + D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO, + D3DRENDERSTATE_TEXTUREMAPBLEND, D3DTBLEND_MODULATE, + D3DRENDERSTATE_CULLMODE, D3DCULL_CCW, + D3DRENDERSTATE_ZFUNC, D3DCMP_LESSEQUAL, + D3DRENDERSTATE_ALPHAREF, 0, + D3DRENDERSTATE_ALPHAFUNC, D3DCMP_ALWAYS, + D3DRENDERSTATE_DITHERENABLE, FALSE, + D3DRENDERSTATE_ALPHABLENDENABLE, FALSE, + D3DRENDERSTATE_FOGENABLE, FALSE, + D3DRENDERSTATE_SPECULARENABLE, FALSE, + D3DRENDERSTATE_ZVISIBLE, FALSE, + D3DRENDERSTATE_SUBPIXEL, FALSE, + D3DRENDERSTATE_SUBPIXELX, FALSE, + D3DRENDERSTATE_STIPPLEDALPHA, FALSE, + D3DRENDERSTATE_FOGCOLOR, D3DRGBA(0,0,0,0), + D3DRENDERSTATE_FOGTABLEMODE, D3DFOG_NONE, + /* FIXME: D3DRENDERSTATE_FOGTABLESTART (same as D3DRENDERSTATE_FOGSTART) */ + /* FIXME: D3DRENDERSTATE_FOGTABLEEND (same as D3DRENDERSTATE_FOGEND) */ + D3DRENDERSTATE_FOGTABLEDENSITY, 0x3F80000, /* 1.0f (same as D3DRENDERSTATE_FOGDENSITY) */ + /* FXIME: D3DRENDERSTATE_STIPPLEENABLE */ + D3DRENDERSTATE_EDGEANTIALIAS, FALSE, + D3DRENDERSTATE_COLORKEYENABLE, FALSE, + /* FIXME: D3DRENDERSTATE_BORDERCOLOR */ + D3DRENDERSTATE_TEXTUREADDRESSU, D3DTADDRESS_WRAP, + D3DRENDERSTATE_TEXTUREADDRESSV, D3DTADDRESS_WRAP, + D3DRENDERSTATE_MIPMAPLODBIAS, 0x00000000, /* 0.0f */ + D3DRENDERSTATE_ZBIAS, 0, + D3DRENDERSTATE_RANGEFOGENABLE, FALSE, + /* FIXME: D3DRENDERSTATE_ANISOTROPY */ + /* FIXME: D3DRENDERSTATE_FLUSHBATCH */ + /* FIXME: D3DRENDERSTATE_TRANSLUCENTSORTINDEPENDENT */ + D3DRENDERSTATE_STENCILENABLE, FALSE, + D3DRENDERSTATE_STENCILFAIL, D3DSTENCILOP_KEEP, + D3DRENDERSTATE_STENCILZFAIL, D3DSTENCILOP_KEEP, + D3DRENDERSTATE_STENCILPASS, D3DSTENCILOP_KEEP, + D3DRENDERSTATE_STENCILFUNC, D3DCMP_ALWAYS, + D3DRENDERSTATE_STENCILREF, 0, + D3DRENDERSTATE_STENCILMASK, 0xFFFFFFFF, + D3DRENDERSTATE_STENCILWRITEMASK, 0xFFFFFFFF, + /* FIXME: D3DRENDERSTATE_TEXTUREFACTOR */ + /* FIXME: D3DRENDERSTATE_STIPPLEPATTERN00..31 */ + D3DRENDERSTATE_WRAP0, 0, + D3DRENDERSTATE_WRAP1, 0, + D3DRENDERSTATE_WRAP2, 0, + D3DRENDERSTATE_WRAP3, 0, + D3DRENDERSTATE_WRAP4, 0, + D3DRENDERSTATE_WRAP5, 0, + D3DRENDERSTATE_WRAP6, 0, + D3DRENDERSTATE_WRAP7, 0, + D3DRENDERSTATE_CLIPPING, FALSE, + D3DRENDERSTATE_LIGHTING, TRUE, + D3DRENDERSTATE_EXTENTS, FALSE, + D3DRENDERSTATE_AMBIENT, D3DRGBA(0,0,0,0), + D3DRENDERSTATE_FOGVERTEXMODE, D3DFOG_NONE, + D3DRENDERSTATE_COLORVERTEX, TRUE, + D3DRENDERSTATE_LOCALVIEWER, TRUE, + D3DRENDERSTATE_NORMALIZENORMALS, FALSE, + /* FIXME: D3DRENDER_STATE_COLORKEYBLENDENABLE */ + D3DRENDERSTATE_DIFFUSEMATERIALSOURCE, D3DMCS_COLOR1, + D3DRENDERSTATE_SPECULARMATERIALSOURCE, D3DMCS_COLOR2, + D3DRENDERSTATE_AMBIENTMATERIALSOURCE, D3DMCS_COLOR2, + D3DRENDERSTATE_EMISSIVEMATERIALSOURCE, D3DMCS_MATERIAL, + D3DRENDERSTATE_VERTEXBLEND, D3DVBLEND_DISABLE, + D3DRENDERSTATE_CLIPPLANEENABLE, 0 +}; + +DWORD InitLightStateTab[] = { + D3DLIGHTSTATE_MATERIAL, (DWORD)NULL, + D3DLIGHTSTATE_AMBIENT, D3DRGBA(0,0,0,0), + D3DLIGHTSTATE_COLORMODEL, D3DCOLOR_RGB, + D3DLIGHTSTATE_FOGMODE, D3DFOG_NONE, + D3DLIGHTSTATE_FOGSTART, 0x3F80000, /* 1.0f */ + D3DLIGHTSTATE_FOGEND, 0x42C8000, /* 100.0f */ + D3DLIGHTSTATE_FOGDENSITY, 0x3F80000 /* 1.0f */ + /* FIXME: D3DLIGHTSTATE_COLORVERTEX */ +}; + +DWORD InitTextureStageStateTab[] = { + D3DTSS_COLOROP, D3DTOP_DISABLE, + D3DTSS_COLORARG1, D3DTA_TEXTURE, + D3DTSS_COLORARG2, D3DTA_CURRENT, + D3DTSS_ALPHAOP, D3DTOP_DISABLE, + D3DTSS_ALPHAARG1, D3DTA_TEXTURE, + D3DTSS_ALPHAARG2, D3DTA_CURRENT, + /* FIXME: D3DTSS_BUMPENVMAT00,01,10,11 */ + /* D3DTSS_TEXCOORDINDEX is set manually */ + D3DTSS_ADDRESS, D3DTADDRESS_WRAP, + D3DTSS_ADDRESSU, D3DTADDRESS_WRAP, + D3DTSS_ADDRESSV, D3DTADDRESS_WRAP, + /* FIXME: D3DTSS_BORDERCOLOR */ + D3DTSS_MAGFILTER, D3DTFG_POINT, + D3DTSS_MINFILTER, D3DTFN_POINT, + D3DTSS_MIPFILTER, D3DTFP_NONE, + D3DTSS_MIPMAPLODBIAS, 0x00000000, /* 0.0f */ + D3DTSS_MAXMIPLEVEL, 0 + /* FIXME: D3DTSS_MAXANISOTROPY */ + /* FIXME: D3DTSS_BUMPENVLSCALE */ + /* FIXME: D3DTSS_NUMPENVLOFFSET */ + /* FIXME: D3DTSS_TEXTURETRANSFORMFLAGS */ +}; + + +void InitDefaultStateBlock(STATEBLOCK* lpStateBlock, int version) +{ + int i,j; + TRACE("(%p,%d)\n", lpStateBlock, version); + memset(lpStateBlock,0,sizeof(STATEBLOCK)); + + /* Initialize render states */ + for(i=0;i<sizeof(InitRenderStateTab)/4;i+=2) + { + lpStateBlock->render_state[InitRenderStateTab[i]-1] = InitRenderStateTab[i+1]; + lpStateBlock->set_flags.render_state[InitRenderStateTab[i]-1] = TRUE; + } + + /* Initialize render states */ + for(i=0;i<sizeof(InitLightStateTab)/4;i+=2) + { + lpStateBlock->light_state[InitLightStateTab[i]-1] = InitLightStateTab[i+1]; + lpStateBlock->set_flags.light_state[InitLightStateTab[i]-1] = TRUE; + } + + /* Initialize texture stages states */ + for(i=0;i<8;i++) + { + for(j=0;j<sizeof(InitTextureStageStateTab)/4;j+=2) + { + lpStateBlock->texture_stage_state[i][InitTextureStageStateTab[j]-1] = InitTextureStageStateTab[j+1]; + lpStateBlock->set_flags.texture_stage_state[i][InitTextureStageStateTab[j]-1] = TRUE; + } + /* Map texture coords 0 to stage 0, 1 to stage 1, etc... */ + lpStateBlock->texture_stage_state[i][D3DTSS_TEXCOORDINDEX-1] = i; + lpStateBlock->set_flags.texture_stage_state[i][D3DTSS_TEXCOORDINDEX-1] = TRUE; + } + + /* The first texture is particular, update it consequently */ + lpStateBlock->texture_stage_state[0][D3DTSS_COLOROP-1] = D3DTOP_MODULATE; + lpStateBlock->texture_stage_state[0][D3DTSS_ALPHAOP-1] = D3DTOP_SELECTARG1; + + /* Updates for particular versions */ + if ((version == 1)||(version==2)) + lpStateBlock->render_state[D3DRENDERSTATE_SPECULARENABLE-1] = TRUE; +} + HRESULT WINAPI Main_IDirect3DDeviceImpl_7_3T_2T_1T_QueryInterface(LPDIRECT3DDEVICE7 iface, REFIID riid, @@ -593,8 +757,12 @@ LPDWORD lpdwState) { ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface); - FIXME("(%p/%p)->(%08lx,%08x,%p): stub!\n", This, iface, dwStage, d3dTexStageStateType, lpdwState); - return DD_OK; + TRACE("(%p/%p)->(%08lx,%08x,%p)\n", This, iface, dwStage, d3dTexStageStateType, lpdwState); + if (lpdwState && (dwStage < 8) && d3dTexStageStateType && (d3dTexStageStateType < HIGHEST_TEXTURE_STAGE_STATE) ) { + *lpdwState = This->state_block.texture_stage_state[dwStage][d3dTexStageStateType-1]; + return DD_OK; + } + return DDERR_INVALIDPARAMS; } HRESULT WINAPI @@ -938,8 +1106,12 @@ LPDWORD lpdwLightState) { ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface); - FIXME("(%p/%p)->(%08x,%p): stub!\n", This, iface, dwLightStateType, lpdwLightState); - return DD_OK; + TRACE("(%p/%p)->(%08x,%p)\n", This, iface, dwLightStateType, lpdwLightState); + if (lpdwLightState && dwLightStateType && (dwLightStateType <= HIGHEST_LIGHT_STATE) ) { + *lpdwLightState = This->state_block.light_state[dwLightStateType-1]; + return DD_OK; + } + return DDERR_INVALIDPARAMS; } HRESULT WINAPI diff -u -r ../../winebase/wine/dlls/ddraw/d3ddevice/main.h dlls/ddraw/d3ddevice/main.h --- ../../winebase/wine/dlls/ddraw/d3ddevice/main.h Mon Dec 30 12:11:24 2002 +++ dlls/ddraw/d3ddevice/main.h Thu Jan 2 12:22:01 2003 @@ -20,6 +20,8 @@ /* This is defined here so as to be able to put them in 'drivers' */ +void InitDefaultStateBlock(STATEBLOCK* lpStateBlock, int version); + HRESULT WINAPI Main_IDirect3DDeviceImpl_7_3T_2T_1T_QueryInterface(LPDIRECT3DDEVICE7 iface, REFIID riid, diff -u -r ../../winebase/wine/dlls/ddraw/d3ddevice/mesa.c dlls/ddraw/d3ddevice/mesa.c --- ../../winebase/wine/dlls/ddraw/d3ddevice/mesa.c Thu Jan 2 17:58:13 2003 +++ dlls/ddraw/d3ddevice/mesa.c Thu Jan 2 18:03:25 2003 @@ -531,7 +531,23 @@ TRACE("(%p/%p)->(%08x,%08lx)\n", This, iface, dwRenderStateType, dwRenderState); /* Call the render state functions */ - set_render_state(dwRenderStateType, dwRenderState, &(glThis->render_state)); + set_render_state(glThis, dwRenderStateType, dwRenderState); + store_render_state(dwRenderStateType, dwRenderState, &glThis->parent.state_block); + + return DD_OK; +} + +HRESULT WINAPI +GL_IDirect3DDeviceImpl_7_3T_2T_GetRenderState(LPDIRECT3DDEVICE7 iface, + D3DRENDERSTATETYPE dwRenderStateType, + LPDWORD lpdwRenderState) +{ + ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface); + IDirect3DDeviceGLImpl *glThis = (IDirect3DDeviceGLImpl *) This; + TRACE("(%p/%p)->(%08x,%p)\n", This, iface, dwRenderStateType, lpdwRenderState); + + /* Call the render state functions */ + get_render_state(dwRenderStateType, lpdwRenderState, &glThis->parent.state_block); return DD_OK; } @@ -561,7 +577,7 @@ case D3DLIGHTSTATE_AMBIENT: /* 2 */ /* Call the render_state function... */ - set_render_state(D3DRENDERSTATE_AMBIENT, dwLightState, &(glThis->render_state)); + set_render_state(glThis, D3DRENDERSTATE_AMBIENT, dwLightState); break; #define UNSUP(x) case D3DLIGHTSTATE_##x: FIXME("unsupported D3DLIGHTSTATE_" #x "!\n");break; @@ -578,6 +594,8 @@ return DDERR_INVALIDPARAMS; } + This->state_block.light_state[dwLightStateType] = dwLightState; + return DD_OK; } @@ -1330,6 +1348,8 @@ default: if (TRACE_ON(ddraw)) DPRINTF(" unhandled.\n"); } + + This->state_block.texture_stage_state[dwStage][d3dTexStageStateType-1] = dwState; return DD_OK; } @@ -1562,7 +1582,7 @@ XCAST(SetLight) GL_IDirect3DDeviceImpl_7_SetLight, XCAST(GetLight) Main_IDirect3DDeviceImpl_7_GetLight, XCAST(SetRenderState) GL_IDirect3DDeviceImpl_7_3T_2T_SetRenderState, - XCAST(GetRenderState) Main_IDirect3DDeviceImpl_7_3T_2T_GetRenderState, + XCAST(GetRenderState) GL_IDirect3DDeviceImpl_7_3T_2T_GetRenderState, XCAST(BeginStateBlock) Main_IDirect3DDeviceImpl_7_BeginStateBlock, XCAST(EndStateBlock) Main_IDirect3DDeviceImpl_7_EndStateBlock, XCAST(PreLoad) Main_IDirect3DDeviceImpl_7_PreLoad, @@ -1970,7 +1990,7 @@ XVisualInfo *vis; int num; XVisualInfo template; - GLenum buffer; + GLenum buffer = GL_FRONT; int light; object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirect3DDeviceGLImpl)); @@ -2046,28 +2066,16 @@ } surf->d3ddevice = object; } - - gl_object->render_state.src = GL_ONE; - gl_object->render_state.dst = GL_ZERO; - gl_object->render_state.mag = GL_NEAREST; - gl_object->render_state.min = GL_NEAREST; - gl_object->render_state.alpha_ref = 0.0; /* No actual idea about the real default value... */ - gl_object->render_state.alpha_func = GL_ALWAYS; /* Here either but it seems logical */ - gl_object->render_state.alpha_blend_enable = FALSE; + + /* FIXME: Should handle other versions than just 7 */ + InitDefaultStateBlock(&object->state_block,7); + + /* FIXME: These 4 statements are kept for compatibility but should be removed as soon + as they are correctly handled */ gl_object->render_state.fog_on = FALSE; - gl_object->render_state.stencil_func = GL_ALWAYS; - gl_object->render_state.stencil_mask = 0xFFFFFFFF; - gl_object->render_state.stencil_ref = 0; gl_object->render_state.stencil_enable = FALSE; - gl_object->render_state.stencil_fail = GL_KEEP; - gl_object->render_state.stencil_zfail = GL_KEEP; - gl_object->render_state.stencil_pass = GL_KEEP; gl_object->render_state.lighting_enable = FALSE; gl_object->render_state.specular_enable = FALSE; - gl_object->render_state.color_diffuse = D3DMCS_COLOR1; - gl_object->render_state.color_specular = D3DMCS_COLOR2; - gl_object->render_state.color_ambient = D3DMCS_COLOR2; - gl_object->render_state.color_emissive = D3DMCS_MATERIAL; /* Set the various light parameters */ for (light = 0; light < MAX_LIGHTS; light++) { @@ -2093,7 +2101,13 @@ object->set_context(object); ENTER_GL(); TRACE(" current context set\n"); - glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); + + /* Apply default render state values */ + /* FIXME: disable because our current D3D code does not like it */ + /* apply_render_state(gl_object, &object->state_block); */ + + /* FIXME: do something similar for ligh_state and texture_stage_state */ + glClearColor(0.0, 0.0, 0.0, 0.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); glDrawBuffer(buffer); diff -u -r ../../winebase/wine/dlls/ddraw/d3dexecutebuffer.c dlls/ddraw/d3dexecutebuffer.c --- ../../winebase/wine/dlls/ddraw/d3dexecutebuffer.c Thu Jan 2 15:26:24 2003 +++ dlls/ddraw/d3dexecutebuffer.c Thu Jan 2 15:52:45 2003 @@ -460,7 +460,7 @@ LPD3DSTATE ci = (LPD3DSTATE) instr; /* Handle the state transform */ - set_render_state(ci->u1.drstRenderStateType, ci->u2.dwArg[0], &(lpDeviceGL->render_state)); + set_render_state(lpDeviceGL, ci->u1.drstRenderStateType, ci->u2.dwArg[0]); instr += size; } ddiff -u -r ../../winebase/wine/dlls/ddraw/mesa.c dlls/ddraw/mesa.c --- ../../winebase/wine/dlls/ddraw/mesa.c Tue Dec 31 15:08:45 2002 +++ dlls/ddraw/mesa.c Thu Jan 2 17:12:00 2003 @@ -62,9 +62,10 @@ return GL_KEEP; } -void set_render_state(D3DRENDERSTATETYPE dwRenderStateType, - DWORD dwRenderState, RenderState *rs) +void set_render_state(IDirect3DDeviceGLImpl* This, + D3DRENDERSTATETYPE dwRenderStateType, DWORD dwRenderState) { + RenderState* rs = &This->render_state; if (TRACE_ON(ddraw)) TRACE("%s = %08lx\n", _get_renderstate(dwRenderStateType), dwRenderState); @@ -500,7 +501,7 @@ } break; - case D3DRENDERSTATE_DIFFUSEMATERIALSOURCE: /* 145 */ + case D3DRENDERSTATE_DIFFUSEMATERIALSOURCE: /* 145 */ rs->color_diffuse = dwRenderState; break; @@ -522,3 +523,28 @@ LEAVE_GL(); } } + +void store_render_state(D3DRENDERSTATETYPE dwRenderStateType, DWORD dwRenderState, + STATEBLOCK* lpStateBlock) +{ + TRACE("%s = %08lx\n", _get_renderstate(dwRenderStateType), dwRenderState); + lpStateBlock->render_state[dwRenderStateType-1] = dwRenderState; +} + +void get_render_state(D3DRENDERSTATETYPE dwRenderStateType, LPDWORD lpdwRenderState, + STATEBLOCK* lpStateBlock) +{ + *lpdwRenderState = lpStateBlock->render_state[dwRenderStateType-1]; + if (TRACE_ON(ddraw)) + TRACE("%s = %08lx\n", _get_renderstate(dwRenderStateType), *lpdwRenderState); +} + +void apply_render_state(IDirect3DDeviceGLImpl* This, STATEBLOCK* lpStateBlock) +{ + DWORD i; + TRACE("(%p,%p)\n", This, lpStateBlock); + for(i=0;i<HIGHEST_RENDER_STATE;i++) + if (lpStateBlock->set_flags.render_state[i]) + set_render_state(This, i+1, lpStateBlock->render_state[i]); +} + diff -u -r ../../winebase/wine/dlls/ddraw/mesa_private.h dlls/ddraw/mesa_private.h --- ../../winebase/wine/dlls/ddraw/mesa_private.h Thu Jan 2 15:26:24 2003 +++ dlls/ddraw/mesa_private.h Thu Jan 2 15:52:45 2003 @@ -84,10 +84,6 @@ BOOLEAN fog_on; } RenderState; -/* Common functions defined in d3dcommon.c */ -void set_render_state(D3DRENDERSTATETYPE dwRenderStateType, - DWORD dwRenderState, RenderState *rs) ; - typedef struct IDirect3DGLImpl { struct IDirect3DImpl parent; @@ -160,6 +156,15 @@ extern HRESULT d3ddevice_enumerate(LPD3DENUMDEVICESCALLBACK cb, LPVOID context) ; extern HRESULT d3ddevice_enumerate7(LPD3DENUMDEVICESCALLBACK7 cb, LPVOID context) ; extern HRESULT d3ddevice_find(IDirect3DImpl *d3d, LPD3DFINDDEVICESEARCH lpD3DDFS, LPD3DFINDDEVICERESULT lplpD3DDevice); + +/* Common functions defined in d3dcommon.c */ +void set_render_state(IDirect3DDeviceGLImpl* This, + D3DRENDERSTATETYPE dwRenderStateType, DWORD dwRenderState); +void store_render_state(D3DRENDERSTATETYPE dwRenderStateType, DWORD dwRenderState, + STATEBLOCK* lpStateBlock); +void get_render_state(D3DRENDERSTATETYPE dwRenderStateType, LPDWORD lpdwRenderState, + STATEBLOCK* lpStateBlock); +void apply_render_state(IDirect3DDeviceGLImpl* This, STATEBLOCK* lpStateBlock); /* This structure contains all the function pointers to OpenGL extensions that are used by Wine */