Commit 70bbf734 authored by Ivan Gyurdiev's avatar Ivan Gyurdiev Committed by Alexandre Julliard

wined3d: Merge LIGHT types into one type in WINED3D namespace.

parent fea4495a
...@@ -724,14 +724,16 @@ static HRESULT WINAPI IDirect3DDevice8Impl_GetMaterial(LPDIRECT3DDEVICE8 iface, ...@@ -724,14 +724,16 @@ static HRESULT WINAPI IDirect3DDevice8Impl_GetMaterial(LPDIRECT3DDEVICE8 iface,
static HRESULT WINAPI IDirect3DDevice8Impl_SetLight(LPDIRECT3DDEVICE8 iface, DWORD Index, CONST D3DLIGHT8* pLight) { static HRESULT WINAPI IDirect3DDevice8Impl_SetLight(LPDIRECT3DDEVICE8 iface, DWORD Index, CONST D3DLIGHT8* pLight) {
IDirect3DDevice8Impl *This = (IDirect3DDevice8Impl *)iface; IDirect3DDevice8Impl *This = (IDirect3DDevice8Impl *)iface;
TRACE("(%p) Relay\n" , This); 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); return IWineD3DDevice_SetLight(This->WineD3DDevice, Index, (const WINED3DLIGHT *)pLight);
} }
static HRESULT WINAPI IDirect3DDevice8Impl_GetLight(LPDIRECT3DDEVICE8 iface, DWORD Index,D3DLIGHT8* pLight) { static HRESULT WINAPI IDirect3DDevice8Impl_GetLight(LPDIRECT3DDEVICE8 iface, DWORD Index,D3DLIGHT8* pLight) {
IDirect3DDevice8Impl *This = (IDirect3DDevice8Impl *)iface; IDirect3DDevice8Impl *This = (IDirect3DDevice8Impl *)iface;
TRACE("(%p) Relay\n" , This); TRACE("(%p) Relay\n" , This);
/* FIXME: Verify that D3DLIGHT8 ~= WINED3DLIGHT */
/* Note: D3DLIGHT8 is compatible with WINED3DLIGHT */
return IWineD3DDevice_GetLight(This->WineD3DDevice, Index, (WINED3DLIGHT *)pLight); return IWineD3DDevice_GetLight(This->WineD3DDevice, Index, (WINED3DLIGHT *)pLight);
} }
......
...@@ -504,12 +504,16 @@ static HRESULT WINAPI IDirect3DDevice9Impl_GetMaterial(LPDIRECT3DDEVICE9 iface ...@@ -504,12 +504,16 @@ static HRESULT WINAPI IDirect3DDevice9Impl_GetMaterial(LPDIRECT3DDEVICE9 iface
static HRESULT WINAPI IDirect3DDevice9Impl_SetLight(LPDIRECT3DDEVICE9 iface, DWORD Index, CONST D3DLIGHT9* pLight) { static HRESULT WINAPI IDirect3DDevice9Impl_SetLight(LPDIRECT3DDEVICE9 iface, DWORD Index, CONST D3DLIGHT9* pLight) {
IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface; IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
TRACE("(%p) Relay\n" , This); TRACE("(%p) Relay\n" , This);
/* Note: D3DLIGHT9 is compatible with WINED3DLIGHT */
return IWineD3DDevice_SetLight(This->WineD3DDevice, Index, (const WINED3DLIGHT *)pLight); return IWineD3DDevice_SetLight(This->WineD3DDevice, Index, (const WINED3DLIGHT *)pLight);
} }
static HRESULT WINAPI IDirect3DDevice9Impl_GetLight(LPDIRECT3DDEVICE9 iface, DWORD Index, D3DLIGHT9* pLight) { static HRESULT WINAPI IDirect3DDevice9Impl_GetLight(LPDIRECT3DDEVICE9 iface, DWORD Index, D3DLIGHT9* pLight) {
IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface; IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
TRACE("(%p) Relay\n" , This); TRACE("(%p) Relay\n" , This);
/* Note: D3DLIGHT9 is compatible with WINED3DLIGHT */
return IWineD3DDevice_GetLight(This->WineD3DDevice, Index, (WINED3DLIGHT *)pLight); return IWineD3DDevice_GetLight(This->WineD3DDevice, Index, (WINED3DLIGHT *)pLight);
} }
......
...@@ -4154,9 +4154,11 @@ IDirect3DDeviceImpl_7_SetLight(IDirect3DDevice7 *iface, ...@@ -4154,9 +4154,11 @@ IDirect3DDeviceImpl_7_SetLight(IDirect3DDevice7 *iface,
HRESULT hr; HRESULT hr;
TRACE("(%p)->(%08x,%p): Relay!\n", This, LightIndex, Light); TRACE("(%p)->(%08x,%p): Relay!\n", This, LightIndex, Light);
/* Note: D3DLIGHT7 is compatible with WINED3DLIGHT */
hr = IWineD3DDevice_SetLight(This->wineD3DDevice, hr = IWineD3DDevice_SetLight(This->wineD3DDevice,
LightIndex, LightIndex,
Light); (WINED3DLIGHT*) Light);
return hr_ddraw_from_wined3d(hr); return hr_ddraw_from_wined3d(hr);
} }
...@@ -4183,9 +4185,10 @@ IDirect3DDeviceImpl_7_GetLight(IDirect3DDevice7 *iface, ...@@ -4183,9 +4185,10 @@ IDirect3DDeviceImpl_7_GetLight(IDirect3DDevice7 *iface,
HRESULT rc; HRESULT rc;
TRACE("(%p)->(%08x,%p): Relay!\n", This, LightIndex, Light); TRACE("(%p)->(%08x,%p): Relay!\n", This, LightIndex, Light);
/* Note: D3DLIGHT7 is compatible with WINED3DLIGHT */
rc = IWineD3DDevice_GetLight(This->wineD3DDevice, rc = IWineD3DDevice_GetLight(This->wineD3DDevice,
LightIndex, LightIndex,
Light); (WINED3DLIGHT*) Light);
/* Translate the result. WineD3D returns other values than D3D7 */ /* Translate the result. WineD3D returns other values than D3D7 */
return hr_ddraw_from_wined3d(rc); return hr_ddraw_from_wined3d(rc);
......
...@@ -38,17 +38,17 @@ WINE_DECLARE_DEBUG_CHANNEL(d3d_shader); ...@@ -38,17 +38,17 @@ WINE_DECLARE_DEBUG_CHANNEL(d3d_shader);
/* Define the default light parameters as specified by MSDN */ /* Define the default light parameters as specified by MSDN */
const WINED3DLIGHT WINED3D_default_light = { const WINED3DLIGHT WINED3D_default_light = {
D3DLIGHT_DIRECTIONAL, /* Type */ WINED3DLIGHT_DIRECTIONAL, /* Type */
{ 1.0, 1.0, 1.0, 0.0 }, /* Diffuse r,g,b,a */ { 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 }, /* Specular r,g,b,a */
{ 0.0, 0.0, 0.0, 0.0 }, /* Ambient 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, 0.0 }, /* Position x,y,z */
{ 0.0, 0.0, 1.0 }, /* Direction x,y,z */ { 0.0, 0.0, 1.0 }, /* Direction x,y,z */
0.0, /* Range */ 0.0, /* Range */
0.0, /* Falloff */ 0.0, /* Falloff */
0.0, 0.0, 0.0, /* Attenuation 0,1,2 */ 0.0, 0.0, 0.0, /* Attenuation 0,1,2 */
0.0, /* Theta */ 0.0, /* Theta */
0.0 /* Phi */ 0.0 /* Phi */
}; };
/* x11drv GDI escapes */ /* x11drv GDI escapes */
...@@ -154,7 +154,7 @@ const float identity[16] = {1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1}; /* When needed ...@@ -154,7 +154,7 @@ const float identity[16] = {1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1}; /* When needed
/********************************************************** /**********************************************************
* Utility functions follow * 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) { static void setup_light(IWineD3DDevice *iface, LONG Index, PLIGHTINFOEL *lightInfo) {
float quad_att; float quad_att;
...@@ -207,7 +207,7 @@ static void setup_light(IWineD3DDevice *iface, LONG Index, PLIGHTINFOEL *lightIn ...@@ -207,7 +207,7 @@ static void setup_light(IWineD3DDevice *iface, LONG Index, PLIGHTINFOEL *lightIn
checkGLcall("glLightf"); checkGLcall("glLightf");
switch (lightInfo->OriginalParms.Type) { switch (lightInfo->OriginalParms.Type) {
case D3DLIGHT_POINT: case WINED3DLIGHT_POINT:
/* Position */ /* Position */
glLightfv(GL_LIGHT0+Index, GL_POSITION, &lightInfo->lightPosn[0]); glLightfv(GL_LIGHT0+Index, GL_POSITION, &lightInfo->lightPosn[0]);
checkGLcall("glLightfv"); checkGLcall("glLightfv");
...@@ -216,7 +216,7 @@ static void setup_light(IWineD3DDevice *iface, LONG Index, PLIGHTINFOEL *lightIn ...@@ -216,7 +216,7 @@ static void setup_light(IWineD3DDevice *iface, LONG Index, PLIGHTINFOEL *lightIn
/* FIXME: Range */ /* FIXME: Range */
break; break;
case D3DLIGHT_SPOT: case WINED3DLIGHT_SPOT:
/* Position */ /* Position */
glLightfv(GL_LIGHT0+Index, GL_POSITION, &lightInfo->lightPosn[0]); glLightfv(GL_LIGHT0+Index, GL_POSITION, &lightInfo->lightPosn[0]);
checkGLcall("glLightfv"); checkGLcall("glLightfv");
...@@ -230,7 +230,7 @@ static void setup_light(IWineD3DDevice *iface, LONG Index, PLIGHTINFOEL *lightIn ...@@ -230,7 +230,7 @@ static void setup_light(IWineD3DDevice *iface, LONG Index, PLIGHTINFOEL *lightIn
/* FIXME: Range */ /* FIXME: Range */
break; break;
case D3DLIGHT_DIRECTIONAL: case WINED3DLIGHT_DIRECTIONAL:
/* Direction */ /* Direction */
glLightfv(GL_LIGHT0+Index, GL_POSITION, &lightInfo->lightPosn[0]); /* Note gl uses w position of 0 for direction! */ glLightfv(GL_LIGHT0+Index, GL_POSITION, &lightInfo->lightPosn[0]); /* Note gl uses w position of 0 for direction! */
checkGLcall("glLightfv"); checkGLcall("glLightfv");
...@@ -2644,7 +2644,6 @@ static HRESULT WINAPI IWineD3DDeviceImpl_MultiplyTransform(IWineD3DDevice *iface ...@@ -2644,7 +2644,6 @@ static HRESULT WINAPI IWineD3DDeviceImpl_MultiplyTransform(IWineD3DDevice *iface
/***** /*****
* Get / Set Light * 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, /* 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 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_SetLight(IWineD3DDevice *iface, DWORD I ...@@ -2665,7 +2664,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetLight(IWineD3DDevice *iface, DWORD I
if (NULL == object) { if (NULL == object) {
return WINED3DERR_OUTOFVIDEOMEMORY; return WINED3DERR_OUTOFVIDEOMEMORY;
} }
memcpy(&object->OriginalParms, pLight, sizeof(D3DLIGHT9)); memcpy(&object->OriginalParms, pLight, sizeof(WINED3DLIGHT));
object->OriginalIndex = Index; object->OriginalIndex = Index;
object->glIndex = -1; object->glIndex = -1;
object->changed = TRUE; object->changed = TRUE;
...@@ -2733,10 +2732,10 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetLight(IWineD3DDevice *iface, DWORD I ...@@ -2733,10 +2732,10 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetLight(IWineD3DDevice *iface, DWORD I
TRACE("... Range(%f), Falloff(%f), Theta(%f), Phi(%f)\n", pLight->Range, pLight->Falloff, pLight->Theta, pLight->Phi); TRACE("... Range(%f), Falloff(%f), Theta(%f), Phi(%f)\n", pLight->Range, pLight->Falloff, pLight->Theta, pLight->Phi);
/* Save away the information */ /* Save away the information */
memcpy(&object->OriginalParms, pLight, sizeof(D3DLIGHT9)); memcpy(&object->OriginalParms, pLight, sizeof(WINED3DLIGHT));
switch (pLight->Type) { switch (pLight->Type) {
case D3DLIGHT_POINT: case WINED3DLIGHT_POINT:
/* Position */ /* Position */
object->lightPosn[0] = pLight->Position.x; object->lightPosn[0] = pLight->Position.x;
object->lightPosn[1] = pLight->Position.y; object->lightPosn[1] = pLight->Position.y;
...@@ -2746,7 +2745,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetLight(IWineD3DDevice *iface, DWORD I ...@@ -2746,7 +2745,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetLight(IWineD3DDevice *iface, DWORD I
/* FIXME: Range */ /* FIXME: Range */
break; break;
case D3DLIGHT_DIRECTIONAL: case WINED3DLIGHT_DIRECTIONAL:
/* Direction */ /* Direction */
object->lightPosn[0] = -pLight->Direction.x; object->lightPosn[0] = -pLight->Direction.x;
object->lightPosn[1] = -pLight->Direction.y; object->lightPosn[1] = -pLight->Direction.y;
...@@ -2756,7 +2755,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetLight(IWineD3DDevice *iface, DWORD I ...@@ -2756,7 +2755,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetLight(IWineD3DDevice *iface, DWORD I
object->cutoff = 180.0f; object->cutoff = 180.0f;
break; break;
case D3DLIGHT_SPOT: case WINED3DLIGHT_SPOT:
/* Position */ /* Position */
object->lightPosn[0] = pLight->Position.x; object->lightPosn[0] = pLight->Position.x;
object->lightPosn[1] = pLight->Position.y; object->lightPosn[1] = pLight->Position.y;
...@@ -2816,7 +2815,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_GetLight(IWineD3DDevice *iface, DWORD I ...@@ -2816,7 +2815,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_GetLight(IWineD3DDevice *iface, DWORD I
return WINED3DERR_INVALIDCALL; return WINED3DERR_INVALIDCALL;
} }
memcpy(pLight, &lightInfo->OriginalParms, sizeof(D3DLIGHT9)); memcpy(pLight, &lightInfo->OriginalParms, sizeof(WINED3DLIGHT));
return WINED3D_OK; return WINED3D_OK;
} }
......
...@@ -191,21 +191,18 @@ DEFINE_GUID(IID_IWineD3DQuery, ...@@ -191,21 +191,18 @@ DEFINE_GUID(IID_IWineD3DQuery,
/* TODO: remove the d3d8/d3d9 dependencies by making a all inclusive WINED3D version */ /* TODO: remove the d3d8/d3d9 dependencies by making a all inclusive WINED3D version */
#if defined( __WINE_D3D9_H ) #if defined( __WINE_D3D9_H )
/* Identical: */ /* Identical: */
# define WINED3DLIGHT D3DLIGHT9
# define WINED3DMATERIAL D3DMATERIAL9 # define WINED3DMATERIAL D3DMATERIAL9
# define WINED3DVIEWPORT D3DVIEWPORT9 # define WINED3DVIEWPORT D3DVIEWPORT9
# define WINED3DGAMMARAMP D3DGAMMARAMP # define WINED3DGAMMARAMP D3DGAMMARAMP
#elif defined( __WINE_D3D8_H ) #elif defined( __WINE_D3D8_H )
/* Identical: */ /* Identical: */
# define WINED3DLIGHT D3DLIGHT8
# define WINED3DMATERIAL D3DMATERIAL8 # define WINED3DMATERIAL D3DMATERIAL8
# define WINED3DVIEWPORT D3DVIEWPORT8 # define WINED3DVIEWPORT D3DVIEWPORT8
# define WINED3DGAMMARAMP D3DGAMMARAMP # define WINED3DGAMMARAMP D3DGAMMARAMP
#else /* defined (__WINE_D3D_H ) */ #else /* defined (__WINE_D3D_H ) */
/* Identical: */ /* Identical: */
# define WINED3DLIGHT D3DLIGHT7
# define WINED3DMATERIAL D3DMATERIAL7 # define WINED3DMATERIAL D3DMATERIAL7
# define WINED3DVIEWPORT D3DVIEWPORT7 # define WINED3DVIEWPORT D3DVIEWPORT7
# define WINED3DGAMMARAMP DDGAMMARAMP # define WINED3DGAMMARAMP DDGAMMARAMP
......
...@@ -30,6 +30,44 @@ ...@@ -30,6 +30,44 @@
# error You must include d3d.h, d3d8.h or d3d9.h header to use this header # error You must include d3d.h, d3d8.h or d3d9.h header to use this header
#endif #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_VSHADER_MAX_CONSTANTS 96
#define WINED3D_PSHADER_MAX_CONSTANTS 32 #define WINED3D_PSHADER_MAX_CONSTANTS 32
......
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