mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-14 20:28:26 +00:00
wined3d: Introduce wined3d_stateblock_set_light().
Signed-off-by: Zebediah Figura <z.figura12@gmail.com> Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
0ef9ebde9f
commit
71d9f15cd4
|
@ -1640,6 +1640,44 @@ HRESULT CDECL wined3d_stateblock_set_stream_source_freq(struct wined3d_statebloc
|
||||||
stateblock->changed.streamFreq |= 1u << stream_idx;
|
stateblock->changed.streamFreq |= 1u << stream_idx;
|
||||||
return WINED3D_OK;
|
return WINED3D_OK;
|
||||||
}
|
}
|
||||||
|
HRESULT CDECL wined3d_stateblock_set_light(struct wined3d_stateblock *stateblock,
|
||||||
|
UINT light_idx, const struct wined3d_light *light)
|
||||||
|
{
|
||||||
|
struct wined3d_light_info *object = NULL;
|
||||||
|
|
||||||
|
TRACE("stateblock %p, light_idx %u, light %p.\n", stateblock, light_idx, light);
|
||||||
|
|
||||||
|
/* Check the parameter range. Need for speed most wanted sets junk lights
|
||||||
|
* which confuse the GL driver. */
|
||||||
|
if (!light)
|
||||||
|
return WINED3DERR_INVALIDCALL;
|
||||||
|
|
||||||
|
switch (light->type)
|
||||||
|
{
|
||||||
|
case WINED3D_LIGHT_POINT:
|
||||||
|
case WINED3D_LIGHT_SPOT:
|
||||||
|
case WINED3D_LIGHT_GLSPOT:
|
||||||
|
/* Incorrect attenuation values can cause the gl driver to crash.
|
||||||
|
* Happens with Need for speed most wanted. */
|
||||||
|
if (light->attenuation0 < 0.0f || light->attenuation1 < 0.0f || light->attenuation2 < 0.0f)
|
||||||
|
{
|
||||||
|
WARN("Attenuation is negative, returning WINED3DERR_INVALIDCALL.\n");
|
||||||
|
return WINED3DERR_INVALIDCALL;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WINED3D_LIGHT_DIRECTIONAL:
|
||||||
|
case WINED3D_LIGHT_PARALLELPOINT:
|
||||||
|
/* Ignores attenuation */
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
WARN("Light type out of range, returning WINED3DERR_INVALIDCALL.\n");
|
||||||
|
return WINED3DERR_INVALIDCALL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return wined3d_light_state_set_light(&stateblock->stateblock_state.light_state, light_idx, light, &object);
|
||||||
|
}
|
||||||
|
|
||||||
static void init_default_render_states(DWORD rs[WINEHIGHEST_RENDER_STATE + 1], const struct wined3d_d3d_info *d3d_info)
|
static void init_default_render_states(DWORD rs[WINEHIGHEST_RENDER_STATE + 1], const struct wined3d_d3d_info *d3d_info)
|
||||||
{
|
{
|
||||||
|
|
|
@ -267,6 +267,7 @@
|
||||||
@ cdecl wined3d_stateblock_set_blend_factor(ptr ptr)
|
@ cdecl wined3d_stateblock_set_blend_factor(ptr ptr)
|
||||||
@ cdecl wined3d_stateblock_set_clip_plane(ptr long ptr)
|
@ cdecl wined3d_stateblock_set_clip_plane(ptr long ptr)
|
||||||
@ cdecl wined3d_stateblock_set_index_buffer(ptr ptr long)
|
@ cdecl wined3d_stateblock_set_index_buffer(ptr ptr long)
|
||||||
|
@ cdecl wined3d_stateblock_set_light(ptr long ptr)
|
||||||
@ cdecl wined3d_stateblock_set_material(ptr ptr)
|
@ cdecl wined3d_stateblock_set_material(ptr ptr)
|
||||||
@ cdecl wined3d_stateblock_set_pixel_shader(ptr ptr)
|
@ cdecl wined3d_stateblock_set_pixel_shader(ptr ptr)
|
||||||
@ cdecl wined3d_stateblock_set_ps_consts_b(ptr long long ptr)
|
@ cdecl wined3d_stateblock_set_ps_consts_b(ptr long long ptr)
|
||||||
|
|
|
@ -2675,6 +2675,8 @@ HRESULT __cdecl wined3d_stateblock_set_clip_plane(struct wined3d_stateblock *sta
|
||||||
UINT plane_idx, const struct wined3d_vec4 *plane);
|
UINT plane_idx, const struct wined3d_vec4 *plane);
|
||||||
void __cdecl wined3d_stateblock_set_index_buffer(struct wined3d_stateblock *stateblock,
|
void __cdecl wined3d_stateblock_set_index_buffer(struct wined3d_stateblock *stateblock,
|
||||||
struct wined3d_buffer *index_buffer, enum wined3d_format_id format_id);
|
struct wined3d_buffer *index_buffer, enum wined3d_format_id format_id);
|
||||||
|
HRESULT __cdecl wined3d_stateblock_set_light(struct wined3d_stateblock *stateblock,
|
||||||
|
UINT light_idx, const struct wined3d_light *light);
|
||||||
void __cdecl wined3d_stateblock_set_material(struct wined3d_stateblock *stateblock, const struct wined3d_material *material);
|
void __cdecl wined3d_stateblock_set_material(struct wined3d_stateblock *stateblock, const struct wined3d_material *material);
|
||||||
void __cdecl wined3d_stateblock_set_pixel_shader(struct wined3d_stateblock *stateblock, struct wined3d_shader *shader);
|
void __cdecl wined3d_stateblock_set_pixel_shader(struct wined3d_stateblock *stateblock, struct wined3d_shader *shader);
|
||||||
HRESULT __cdecl wined3d_stateblock_set_ps_consts_b(struct wined3d_stateblock *stateblock,
|
HRESULT __cdecl wined3d_stateblock_set_ps_consts_b(struct wined3d_stateblock *stateblock,
|
||||||
|
|
Loading…
Reference in a new issue