[WINED3D 7/10] Merge LIGHT types into one type in WINED3D namespace
Ivan Gyurdiev
ivg231 at gmail.com
Tue Oct 10 20:55:47 CDT 2006
-------------- next part --------------
---
dlls/d3d8/device.c | 6 ++++-
dlls/d3d9/device.c | 4 ++++
dlls/ddraw/device.c | 7 ++++--
dlls/wined3d/device.c | 43 +++++++++++++++++++-------------------
include/wine/wined3d_interface.h | 3 ---
include/wine/wined3d_types.h | 38 ++++++++++++++++++++++++++++++++++
6 files changed, 72 insertions(+), 29 deletions(-)
diff --git a/dlls/d3d8/device.c b/dlls/d3d8/device.c
index 1467830..5d841fa 100644
--- a/dlls/d3d8/device.c
+++ b/dlls/d3d8/device.c
@@ -724,14 +724,16 @@ static HRESULT WINAPI IDirect3DDevice8Im
static HRESULT WINAPI IDirect3DDevice8Impl_SetLight(LPDIRECT3DDEVICE8 iface, DWORD Index, CONST D3DLIGHT8* pLight) {
IDirect3DDevice8Impl *This = (IDirect3DDevice8Impl *)iface;
TRACE("(%p) Relay\n" , This);
-/* FIXME: Verify that D3DLIGHT8 ~= WINED3DLIGHT */
+
+ /* Note: D3DLIGHT8 is compatible with WINED3DLIGHT */
return IWineD3DDevice_SetLight(This->WineD3DDevice, Index, (const WINED3DLIGHT *)pLight);
}
static HRESULT WINAPI IDirect3DDevice8Impl_GetLight(LPDIRECT3DDEVICE8 iface, DWORD Index,D3DLIGHT8* pLight) {
IDirect3DDevice8Impl *This = (IDirect3DDevice8Impl *)iface;
TRACE("(%p) Relay\n" , This);
-/* FIXME: Verify that D3DLIGHT8 ~= WINED3DLIGHT */
+
+ /* Note: D3DLIGHT8 is compatible with WINED3DLIGHT */
return IWineD3DDevice_GetLight(This->WineD3DDevice, Index, (WINED3DLIGHT *)pLight);
}
diff --git a/dlls/d3d9/device.c b/dlls/d3d9/device.c
index 4ccdabb..316d762 100644
--- a/dlls/d3d9/device.c
+++ b/dlls/d3d9/device.c
@@ -504,12 +504,16 @@ static HRESULT WINAPI IDirect3DDevice9
static HRESULT WINAPI IDirect3DDevice9Impl_SetLight(LPDIRECT3DDEVICE9 iface, DWORD Index, CONST D3DLIGHT9* pLight) {
IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
TRACE("(%p) Relay\n" , This);
+
+ /* Note: D3DLIGHT9 is compatible with WINED3DLIGHT */
return IWineD3DDevice_SetLight(This->WineD3DDevice, Index, (const WINED3DLIGHT *)pLight);
}
static HRESULT WINAPI IDirect3DDevice9Impl_GetLight(LPDIRECT3DDEVICE9 iface, DWORD Index, D3DLIGHT9* pLight) {
IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
TRACE("(%p) Relay\n" , This);
+
+ /* Note: D3DLIGHT9 is compatible with WINED3DLIGHT */
return IWineD3DDevice_GetLight(This->WineD3DDevice, Index, (WINED3DLIGHT *)pLight);
}
diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c
index c728a7a..7b60925 100644
--- a/dlls/ddraw/device.c
+++ b/dlls/ddraw/device.c
@@ -4154,9 +4154,11 @@ IDirect3DDeviceImpl_7_SetLight(IDirect3D
HRESULT hr;
TRACE("(%p)->(%08lx,%p): Relay!\n", This, LightIndex, Light);
+ /* Note: D3DLIGHT7 is compatible with WINED3DLIGHT */
hr = IWineD3DDevice_SetLight(This->wineD3DDevice,
LightIndex,
- Light);
+ (WINED3DLIGHT*) Light);
+
return hr_ddraw_from_wined3d(hr);
}
@@ -4183,9 +4185,10 @@ IDirect3DDeviceImpl_7_GetLight(IDirect3D
HRESULT rc;
TRACE("(%p)->(%08lx,%p): Relay!\n", This, LightIndex, Light);
+ /* Note: D3DLIGHT7 is compatible with WINED3DLIGHT */
rc = IWineD3DDevice_GetLight(This->wineD3DDevice,
LightIndex,
- Light);
+ (WINED3DLIGHT*) Light);
/* Translate the result. WineD3D returns other values than D3D7 */
return hr_ddraw_from_wined3d(rc);
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index fbe22dc..40c0d83 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -38,17 +38,17 @@ #define GLINFO_LOCATION ((IWineD3DImpl *
/* Define the default light parameters as specified by MSDN */
const WINED3DLIGHT WINED3D_default_light = {
- D3DLIGHT_DIRECTIONAL, /* Type */
- { 1.0, 1.0, 1.0, 0.0 }, /* Diffuse r,g,b,a */
- { 0.0, 0.0, 0.0, 0.0 }, /* Specular r,g,b,a */
- { 0.0, 0.0, 0.0, 0.0 }, /* Ambient r,g,b,a, */
- { 0.0, 0.0, 0.0 }, /* Position x,y,z */
- { 0.0, 0.0, 1.0 }, /* Direction x,y,z */
- 0.0, /* Range */
- 0.0, /* Falloff */
- 0.0, 0.0, 0.0, /* Attenuation 0,1,2 */
- 0.0, /* Theta */
- 0.0 /* Phi */
+ WINED3DLIGHT_DIRECTIONAL, /* Type */
+ { 1.0, 1.0, 1.0, 0.0 }, /* Diffuse r,g,b,a */
+ { 0.0, 0.0, 0.0, 0.0 }, /* Specular r,g,b,a */
+ { 0.0, 0.0, 0.0, 0.0 }, /* Ambient r,g,b,a, */
+ { 0.0, 0.0, 0.0 }, /* Position x,y,z */
+ { 0.0, 0.0, 1.0 }, /* Direction x,y,z */
+ 0.0, /* Range */
+ 0.0, /* Falloff */
+ 0.0, 0.0, 0.0, /* Attenuation 0,1,2 */
+ 0.0, /* Theta */
+ 0.0 /* Phi */
};
/* x11drv GDI escapes */
@@ -154,7 +154,7 @@ const float identity[16] = {1,0,0,0, 0,1
/**********************************************************
* Utility functions follow
**********************************************************/
-/* Convert the D3DLIGHT properties into equivalent gl lights */
+/* Convert the WINED3DLIGHT properties into equivalent gl lights */
static void setup_light(IWineD3DDevice *iface, LONG Index, PLIGHTINFOEL *lightInfo) {
float quad_att;
@@ -207,7 +207,7 @@ static void setup_light(IWineD3DDevice *
checkGLcall("glLightf");
switch (lightInfo->OriginalParms.Type) {
- case D3DLIGHT_POINT:
+ case WINED3DLIGHT_POINT:
/* Position */
glLightfv(GL_LIGHT0+Index, GL_POSITION, &lightInfo->lightPosn[0]);
checkGLcall("glLightfv");
@@ -216,7 +216,7 @@ static void setup_light(IWineD3DDevice *
/* FIXME: Range */
break;
- case D3DLIGHT_SPOT:
+ case WINED3DLIGHT_SPOT:
/* Position */
glLightfv(GL_LIGHT0+Index, GL_POSITION, &lightInfo->lightPosn[0]);
checkGLcall("glLightfv");
@@ -230,7 +230,7 @@ static void setup_light(IWineD3DDevice *
/* FIXME: Range */
break;
- case D3DLIGHT_DIRECTIONAL:
+ case WINED3DLIGHT_DIRECTIONAL:
/* Direction */
glLightfv(GL_LIGHT0+Index, GL_POSITION, &lightInfo->lightPosn[0]); /* Note gl uses w position of 0 for direction! */
checkGLcall("glLightfv");
@@ -2644,7 +2644,6 @@ static HRESULT WINAPI IWineD3DDeviceImpl
/*****
* Get / Set Light
- * WARNING: This code relies on the fact that D3DLIGHT8 == D3DLIGHT9
*****/
/* Note lights are real special cases. Although the device caps state only eg. 8 are supported,
you can reference any indexes you want as long as that number max are enabled at any
@@ -2665,7 +2664,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl
if (NULL == object) {
return WINED3DERR_OUTOFVIDEOMEMORY;
}
- memcpy(&object->OriginalParms, pLight, sizeof(D3DLIGHT9));
+ memcpy(&object->OriginalParms, pLight, sizeof(WINED3DLIGHT));
object->OriginalIndex = Index;
object->glIndex = -1;
object->changed = TRUE;
@@ -2733,10 +2732,10 @@ static HRESULT WINAPI IWineD3DDeviceImpl
TRACE("... Range(%f), Falloff(%f), Theta(%f), Phi(%f)\n", pLight->Range, pLight->Falloff, pLight->Theta, pLight->Phi);
/* Save away the information */
- memcpy(&object->OriginalParms, pLight, sizeof(D3DLIGHT9));
+ memcpy(&object->OriginalParms, pLight, sizeof(WINED3DLIGHT));
switch (pLight->Type) {
- case D3DLIGHT_POINT:
+ case WINED3DLIGHT_POINT:
/* Position */
object->lightPosn[0] = pLight->Position.x;
object->lightPosn[1] = pLight->Position.y;
@@ -2746,7 +2745,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl
/* FIXME: Range */
break;
- case D3DLIGHT_DIRECTIONAL:
+ case WINED3DLIGHT_DIRECTIONAL:
/* Direction */
object->lightPosn[0] = -pLight->Direction.x;
object->lightPosn[1] = -pLight->Direction.y;
@@ -2756,7 +2755,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl
object->cutoff = 180.0f;
break;
- case D3DLIGHT_SPOT:
+ case WINED3DLIGHT_SPOT:
/* Position */
object->lightPosn[0] = pLight->Position.x;
object->lightPosn[1] = pLight->Position.y;
@@ -2816,7 +2815,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl
return WINED3DERR_INVALIDCALL;
}
- memcpy(pLight, &lightInfo->OriginalParms, sizeof(D3DLIGHT9));
+ memcpy(pLight, &lightInfo->OriginalParms, sizeof(WINED3DLIGHT));
return WINED3D_OK;
}
diff --git a/include/wine/wined3d_interface.h b/include/wine/wined3d_interface.h
index 516e637..a581115 100644
--- a/include/wine/wined3d_interface.h
+++ b/include/wine/wined3d_interface.h
@@ -191,21 +191,18 @@ DEFINE_GUID(IID_IWineD3DQuery,
/* TODO: remove the d3d8/d3d9 dependencies by making a all inclusive WINED3D version */
#if defined( __WINE_D3D9_H )
/* Identical: */
-# define WINED3DLIGHT D3DLIGHT9
# define WINED3DMATERIAL D3DMATERIAL9
# define WINED3DVIEWPORT D3DVIEWPORT9
# define WINED3DGAMMARAMP D3DGAMMARAMP
#elif defined( __WINE_D3D8_H )
/* Identical: */
-# define WINED3DLIGHT D3DLIGHT8
# define WINED3DMATERIAL D3DMATERIAL8
# define WINED3DVIEWPORT D3DVIEWPORT8
# define WINED3DGAMMARAMP D3DGAMMARAMP
#else /* defined (__WINE_D3D_H ) */
/* Identical: */
-# define WINED3DLIGHT D3DLIGHT7
# define WINED3DMATERIAL D3DMATERIAL7
# define WINED3DVIEWPORT D3DVIEWPORT7
# define WINED3DGAMMARAMP DDGAMMARAMP
diff --git a/include/wine/wined3d_types.h b/include/wine/wined3d_types.h
index bfcd4ed..814075e 100644
--- a/include/wine/wined3d_types.h
+++ b/include/wine/wined3d_types.h
@@ -30,6 +30,44 @@ #if !defined( __WINE_D3D_H ) && !defined
# error You must include d3d.h, d3d8.h or d3d9.h header to use this header
#endif
+typedef enum _WINED3DLIGHTTYPE {
+ WINED3DLIGHT_POINT = 1,
+ WINED3DLIGHT_SPOT = 2,
+ WINED3DLIGHT_DIRECTIONAL = 3,
+ WINED3DLIGHT_PARALLELPOINT = 4, /* D3D7 */
+ WINED3DLIGHT_GLSPOT = 5, /* D3D7 */
+ WINED3DLIGHT_FORCE_DWORD = 0x7fffffff
+} WINED3DLIGHTTYPE;
+
+typedef struct _WINED3DCOLORVALUE {
+ float r;
+ float g;
+ float b;
+ float a;
+} WINED3DCOLORVALUE;
+
+typedef struct _WINED3DVECTOR {
+ float x;
+ float y;
+ float z;
+} WINED3DVECTOR;
+
+typedef struct _WINED3DLIGHT {
+ WINED3DLIGHTTYPE Type;
+ WINED3DCOLORVALUE Diffuse;
+ WINED3DCOLORVALUE Specular;
+ WINED3DCOLORVALUE Ambient;
+ WINED3DVECTOR Position;
+ WINED3DVECTOR Direction;
+ float Range;
+ float Falloff;
+ float Attenuation0;
+ float Attenuation1;
+ float Attenuation2;
+ float Theta;
+ float Phi;
+} WINED3DLIGHT;
+
#define WINED3D_VSHADER_MAX_CONSTANTS 96
#define WINED3D_PSHADER_MAX_CONSTANTS 32
--
1.4.2.1
More information about the wine-patches
mailing list