ReactOS 0.4.17-dev-966-gf06eace
light.c File Reference
#include "ddraw_private.h"
Include dependency graph for light.c:

Go to the source code of this file.

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (ddraw)
 
static void light_update (struct d3d_light *light)
 
void light_activate (struct d3d_light *light)
 
void light_deactivate (struct d3d_light *light)
 
static struct d3d_light * impl_from_IDirect3DLight (IDirect3DLight *iface)
 
static HRESULT WINAPI d3d_light_QueryInterface (IDirect3DLight *iface, REFIID riid, void **object)
 
static ULONG WINAPI d3d_light_AddRef (IDirect3DLight *iface)
 
static ULONG WINAPI d3d_light_Release (IDirect3DLight *iface)
 
static HRESULT WINAPI d3d_light_Initialize (IDirect3DLight *iface, IDirect3D *d3d)
 
static HRESULT WINAPI d3d_light_SetLight (IDirect3DLight *iface, D3DLIGHT *data)
 
static HRESULT WINAPI d3d_light_GetLight (IDirect3DLight *iface, D3DLIGHT *lpLight)
 
void d3d_light_init (struct d3d_light *light, struct ddraw *ddraw)
 
struct d3d_light * unsafe_impl_from_IDirect3DLight (IDirect3DLight *iface)
 

Variables

static const struct IDirect3DLightVtbl d3d_light_vtbl
 

Function Documentation

◆ d3d_light_AddRef()

static ULONG WINAPI d3d_light_AddRef ( IDirect3DLight *  iface)
static

Definition at line 121 of file light.c.

122{
125
126 TRACE("%p increasing refcount to %lu.\n", light, ref);
127
128 return ref;
129}
#define InterlockedIncrement
Definition: armddk.h:53
static struct d3d_light * impl_from_IDirect3DLight(IDirect3DLight *iface)
Definition: light.c:95
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum light
Definition: glfuncs.h:170
#define TRACE(s)
Definition: solgame.cpp:4
Definition: send.c:48
uint32_t ULONG
Definition: typedefs.h:59

◆ d3d_light_GetLight()

static HRESULT WINAPI d3d_light_GetLight ( IDirect3DLight *  iface,
D3DLIGHT *  lpLight 
)
static

Definition at line 225 of file light.c.

226{
228
229 TRACE("iface %p, light %p.\n", iface, lpLight);
230
232 memcpy(lpLight, &light->light, lpLight->dwSize);
234
235 return DD_OK;
236}
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define DD_OK
Definition: ddraw.h:188
DWORD dwSize
Definition: d3dtypes.h:566
void WINAPI wined3d_mutex_unlock(void)
Definition: wined3d_main.c:544
void WINAPI wined3d_mutex_lock(void)
Definition: wined3d_main.c:539

◆ d3d_light_init()

void d3d_light_init ( struct d3d_light *  light,
struct ddraw *  ddraw 
)

Definition at line 250 of file light.c.

251{
252 light->IDirect3DLight_iface.lpVtbl = &d3d_light_vtbl;
253 light->ref = 1;
254 light->ddraw = ddraw;
255}
static const struct IDirect3DLightVtbl d3d_light_vtbl
Definition: light.c:238

Referenced by d3d3_CreateLight().

◆ d3d_light_Initialize()

static HRESULT WINAPI d3d_light_Initialize ( IDirect3DLight *  iface,
IDirect3D *  d3d 
)
static

Definition at line 163 of file light.c.

164{
165 TRACE("iface %p, d3d %p.\n", iface, d3d);
166
167 return D3D_OK;
168}
#define D3D_OK
Definition: d3d.h:106

◆ d3d_light_QueryInterface()

static HRESULT WINAPI d3d_light_QueryInterface ( IDirect3DLight *  iface,
REFIID  riid,
void **  object 
)
static

Definition at line 113 of file light.c.

114{
115 FIXME("iface %p, riid %s, object %p stub!\n", iface, debugstr_guid(riid), object);
116
117 *object = NULL;
118 return E_NOINTERFACE;
119}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define NULL
Definition: types.h:112
REFIID riid
Definition: atlbase.h:39
#define debugstr_guid
Definition: kernel32.h:35
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ d3d_light_Release()

static ULONG WINAPI d3d_light_Release ( IDirect3DLight *  iface)
static

Definition at line 131 of file light.c.

132{
135
136 TRACE("%p decreasing refcount to %lu.\n", light, ref);
137
138 if (!ref)
139 {
140 free(light);
141 return 0;
142 }
143 return ref;
144}
#define InterlockedDecrement
Definition: armddk.h:52
#define free
Definition: debug_ros.c:5

◆ d3d_light_SetLight()

static HRESULT WINAPI d3d_light_SetLight ( IDirect3DLight *  iface,
D3DLIGHT *  data 
)
static

Definition at line 170 of file light.c.

171{
172 static const D3DCOLORVALUE zero_value = {{0.0f}, {0.0f}, {0.0f}, {0.0f}};
174 DWORD flags = data->dwSize >= sizeof(D3DLIGHT2) ? ((D3DLIGHT2 *)data)->dwFlags : D3DLIGHT_ACTIVE;
175 D3DLIGHT7 *light7 = &light->light7;
176
177 TRACE("iface %p, data %p.\n", iface, data);
178
179 if ((!data->dltType) || (data->dltType > D3DLIGHT_PARALLELPOINT))
180 return DDERR_INVALIDPARAMS;
181
182 /* Translate D3DLIGHT2 structure to D3DLIGHT7. */
183 light7->dltType = data->dltType;
184 light7->dcvDiffuse = data->dcvColor;
186 light7->dcvSpecular = zero_value;
187 else
188 light7->dcvSpecular = data->dcvColor;
189 light7->dcvAmbient = zero_value;
190 light7->dvPosition = data->dvPosition;
191 light7->dvDirection = data->dvDirection;
192 light7->dvRange = data->dvRange;
193 light7->dvFalloff = data->dvFalloff;
194 light7->dvAttenuation0 = data->dvAttenuation0;
195 light7->dvAttenuation1 = data->dvAttenuation1;
196 light7->dvAttenuation2 = data->dvAttenuation2;
197 light7->dvTheta = data->dvTheta;
198 light7->dvPhi = data->dvPhi;
199
201 memcpy(&light->light, data, sizeof(*data));
202
203 if (!(flags & D3DLIGHT_ACTIVE))
205
206 light->light.dwFlags = flags;
209
210 return D3D_OK;
211}
@ D3DLIGHT_PARALLELPOINT
Definition: d3dtypes.h:558
#define D3DLIGHT_NO_SPECULAR
Definition: d3dtypes.h:597
#define D3DLIGHT_ACTIVE
Definition: d3dtypes.h:596
struct _D3DLIGHT2 D3DLIGHT2
void light_activate(struct d3d_light *light)
Definition: light.c:48
void light_deactivate(struct d3d_light *light)
Definition: light.c:74
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLbitfield flags
Definition: glext.h:7161
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
#define DDERR_INVALIDPARAMS
Definition: ddraw.h:81
D3DVALUE dvPhi
Definition: d3dtypes.h:593
D3DVALUE dvFalloff
Definition: d3dtypes.h:588
D3DCOLORVALUE dcvDiffuse
Definition: d3dtypes.h:582
D3DCOLORVALUE dcvAmbient
Definition: d3dtypes.h:584
D3DVALUE dvAttenuation2
Definition: d3dtypes.h:591
D3DVALUE dvAttenuation0
Definition: d3dtypes.h:589
D3DVECTOR dvPosition
Definition: d3dtypes.h:585
D3DVALUE dvRange
Definition: d3dtypes.h:587
D3DLIGHTTYPE dltType
Definition: d3dtypes.h:581
D3DVALUE dvTheta
Definition: d3dtypes.h:592
D3DCOLORVALUE dcvSpecular
Definition: d3dtypes.h:583
D3DVALUE dvAttenuation1
Definition: d3dtypes.h:590
D3DVECTOR dvDirection
Definition: d3dtypes.h:586
D3DLIGHT7 light7

◆ impl_from_IDirect3DLight()

static struct d3d_light * impl_from_IDirect3DLight ( IDirect3DLight *  iface)
inlinestatic

Definition at line 95 of file light.c.

96{
97 return CONTAINING_RECORD(iface, struct d3d_light, IDirect3DLight_iface);
98}
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

Referenced by d3d_light_AddRef(), d3d_light_GetLight(), d3d_light_Release(), d3d_light_SetLight(), and unsafe_impl_from_IDirect3DLight().

◆ light_activate()

void light_activate ( struct d3d_light *  light)

Definition at line 48 of file light.c.

49{
50 struct d3d_device *device;
51
52 TRACE("light %p.\n", light);
53
54 if (!light->active_viewport || !light->active_viewport->active_device
55 || light->active_viewport->active_device->current_viewport != light->active_viewport)
56 return;
57 device = light->active_viewport->active_device;
58
59 if (light->light.dwFlags & D3DLIGHT_ACTIVE)
60 {
63 IDirect3DDevice7_LightEnable(&device->IDirect3DDevice7_iface, light->active_light_index, TRUE);
64 }
65}
#define IDirect3DDevice7_LightEnable(p, a, b)
Definition: d3d.h:1387
void viewport_alloc_active_light_index(struct d3d_light *light)
Definition: viewport.c:121
static void light_update(struct d3d_light *light)
Definition: light.c:30
#define TRUE
Definition: types.h:120
Definition: devices.h:37

Referenced by d3d_light_SetLight(), d3d_viewport_AddLight(), and viewport_activate().

◆ light_deactivate()

void light_deactivate ( struct d3d_light *  light)

Definition at line 74 of file light.c.

75{
76 struct d3d_device *device;
77
78 TRACE("light %p.\n", light);
79
80 if (!light->active_viewport || !light->active_viewport->active_device
81 || light->active_viewport->active_device->current_viewport != light->active_viewport)
82 {
83 assert(!light->active_light_index);
84 return;
85 }
86
87 device = light->active_viewport->active_device;
88 if (light->active_light_index)
89 {
90 IDirect3DDevice7_LightEnable(&device->IDirect3DDevice7_iface, light->active_light_index, FALSE);
92 }
93}
void viewport_free_active_light_index(struct d3d_light *light)
Definition: viewport.c:159
#define FALSE
Definition: types.h:117
#define assert(_expr)
Definition: assert.h:32

Referenced by d3d_light_SetLight(), d3d_viewport_DeleteLight(), viewport_alloc_active_light_index(), and viewport_deactivate().

◆ light_update()

static void light_update ( struct d3d_light *  light)
static

Definition at line 30 of file light.c.

31{
32 struct d3d_device *device;
33
34 TRACE("light %p.\n", light);
35
36 if (!light->active_viewport || !light->active_viewport->active_device) return;
37 device = light->active_viewport->active_device;
38
39 IDirect3DDevice7_SetLight(&device->IDirect3DDevice7_iface, light->active_light_index, &light->light7);
40}
#define IDirect3DDevice7_SetLight(p, a, b)
Definition: d3d.h:1361

Referenced by light_activate().

◆ unsafe_impl_from_IDirect3DLight()

struct d3d_light * unsafe_impl_from_IDirect3DLight ( IDirect3DLight *  iface)

Definition at line 257 of file light.c.

258{
259 if (!iface)
260 return NULL;
261 assert(iface->lpVtbl == &d3d_light_vtbl);
262
263 return impl_from_IDirect3DLight(iface);
264}

Referenced by d3d_viewport_AddLight(), d3d_viewport_DeleteLight(), and d3d_viewport_NextLight().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( ddraw  )

Variable Documentation

◆ d3d_light_vtbl

const struct IDirect3DLightVtbl d3d_light_vtbl
static
Initial value:
=
{
}
static HRESULT WINAPI d3d_light_SetLight(IDirect3DLight *iface, D3DLIGHT *data)
Definition: light.c:170
static ULONG WINAPI d3d_light_AddRef(IDirect3DLight *iface)
Definition: light.c:121
static HRESULT WINAPI d3d_light_GetLight(IDirect3DLight *iface, D3DLIGHT *lpLight)
Definition: light.c:225
static HRESULT WINAPI d3d_light_QueryInterface(IDirect3DLight *iface, REFIID riid, void **object)
Definition: light.c:113
static HRESULT WINAPI d3d_light_Initialize(IDirect3DLight *iface, IDirect3D *d3d)
Definition: light.c:163
static ULONG WINAPI d3d_light_Release(IDirect3DLight *iface)
Definition: light.c:131

Definition at line 238 of file light.c.

Referenced by d3d_light_init(), and unsafe_impl_from_IDirect3DLight().