st/nine: Refactor SetLight
Call a helper function to set the light. Signed-off-by: Axel Davy <axel.davy@ens.fr>
This commit is contained in:
parent
c5af96aebd
commit
cbe370020e
|
@ -2073,6 +2073,7 @@ NineDevice9_SetLight( struct NineDevice9 *This,
|
|||
const D3DLIGHT9 *pLight )
|
||||
{
|
||||
struct nine_state *state = This->update;
|
||||
HRESULT hr;
|
||||
|
||||
DBG("This=%p Index=%u pLight=%p\n", This, Index, pLight);
|
||||
if (pLight)
|
||||
|
@ -2083,27 +2084,10 @@ NineDevice9_SetLight( struct NineDevice9 *This,
|
|||
|
||||
user_assert(Index < NINE_MAX_LIGHTS, D3DERR_INVALIDCALL); /* sanity */
|
||||
|
||||
if (Index >= state->ff.num_lights) {
|
||||
unsigned n = state->ff.num_lights;
|
||||
unsigned N = Index + 1;
|
||||
hr = nine_state_set_light(&state->ff, Index, pLight);
|
||||
if (hr != D3D_OK)
|
||||
return hr;
|
||||
|
||||
state->ff.light = REALLOC(state->ff.light, n * sizeof(D3DLIGHT9),
|
||||
N * sizeof(D3DLIGHT9));
|
||||
if (!state->ff.light)
|
||||
return E_OUTOFMEMORY;
|
||||
state->ff.num_lights = N;
|
||||
|
||||
for (; n < Index; ++n) {
|
||||
memset(&state->ff.light[n], 0, sizeof(D3DLIGHT9));
|
||||
state->ff.light[n].Type = (D3DLIGHTTYPE)NINED3DLIGHT_INVALID;
|
||||
}
|
||||
}
|
||||
state->ff.light[Index] = *pLight;
|
||||
|
||||
if (pLight->Type == D3DLIGHT_SPOT && pLight->Theta >= pLight->Phi) {
|
||||
DBG("Warning: clamping D3DLIGHT9.Theta\n");
|
||||
state->ff.light[Index].Theta = state->ff.light[Index].Phi;
|
||||
}
|
||||
if (pLight->Type != D3DLIGHT_DIRECTIONAL &&
|
||||
pLight->Attenuation0 == 0.0f &&
|
||||
pLight->Attenuation1 == 0.0f &&
|
||||
|
|
|
@ -2826,6 +2826,34 @@ nine_state_access_transform(struct nine_ff_state *ff_state, D3DTRANSFORMSTATETYP
|
|||
return &ff_state->transform[index];
|
||||
}
|
||||
|
||||
HRESULT
|
||||
nine_state_set_light(struct nine_ff_state *ff_state, DWORD Index,
|
||||
const D3DLIGHT9 *pLight)
|
||||
{
|
||||
if (Index >= ff_state->num_lights) {
|
||||
unsigned n = ff_state->num_lights;
|
||||
unsigned N = Index + 1;
|
||||
|
||||
ff_state->light = REALLOC(ff_state->light, n * sizeof(D3DLIGHT9),
|
||||
N * sizeof(D3DLIGHT9));
|
||||
if (!ff_state->light)
|
||||
return E_OUTOFMEMORY;
|
||||
ff_state->num_lights = N;
|
||||
|
||||
for (; n < Index; ++n) {
|
||||
memset(&ff_state->light[n], 0, sizeof(D3DLIGHT9));
|
||||
ff_state->light[n].Type = (D3DLIGHTTYPE)NINED3DLIGHT_INVALID;
|
||||
}
|
||||
}
|
||||
ff_state->light[Index] = *pLight;
|
||||
|
||||
if (pLight->Type == D3DLIGHT_SPOT && pLight->Theta >= pLight->Phi) {
|
||||
DBG("Warning: clamping D3DLIGHT9.Theta\n");
|
||||
ff_state->light[Index].Theta = ff_state->light[Index].Phi;
|
||||
}
|
||||
return D3D_OK;
|
||||
}
|
||||
|
||||
#define D3DRS_TO_STRING_CASE(n) case D3DRS_##n: return "D3DRS_"#n
|
||||
const char *nine_d3drs_to_string(DWORD State)
|
||||
{
|
||||
|
|
|
@ -462,6 +462,9 @@ D3DMATRIX *
|
|||
nine_state_access_transform(struct nine_ff_state *, D3DTRANSFORMSTATETYPE,
|
||||
boolean alloc);
|
||||
|
||||
HRESULT
|
||||
nine_state_set_light(struct nine_ff_state *, DWORD, const D3DLIGHT9 *);
|
||||
|
||||
const char *nine_d3drs_to_string(DWORD State);
|
||||
|
||||
#endif /* _NINE_STATE_H_ */
|
||||
|
|
Loading…
Reference in New Issue