wined3d: Merge LIGHT types into one type in WINED3D namespace.
This commit is contained in:
parent
fea4495a61
commit
70bbf734b1
@ -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
|
|||||||
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,
|
|||||||
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,
|
|||||||
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,7 +38,7 @@ 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, */
|
||||||
@ -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
|
|||||||
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
|
|||||||
/* 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
|
|||||||
/* 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
|
|||||||
|
|
||||||
/*****
|
/*****
|
||||||
* 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
|
|||||||
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
|
|||||||
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
|
|||||||
/* 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
|
|||||||
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
|
|||||||
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,
|
|||||||
/* 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 @@
|
|||||||
# 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
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user