33 scale->x, 0.0f, 0.0f, 0.0f,
34 0.0f,
scale->y, 0.0f, 0.0f,
35 0.0f, 0.0f,
scale->z, 0.0f,
42 device->legacy_clipspace = clip_space;
69 TRACE(
"Viewport data was not set.\n");
76 vp.dwX =
This->viewports.vp2.dwX;
77 vp.dwY =
This->viewports.vp2.dwY;
78 vp.dwHeight =
This->viewports.vp2.dwHeight;
79 vp.dwWidth =
This->viewports.vp2.dwWidth;
83 scale.x = 2.0f /
This->viewports.vp2.dvClipWidth;
84 scale.y = 2.0f /
This->viewports.vp2.dvClipHeight;
85 scale.z = 1.0f / (
This->viewports.vp2.dvMaxZ -
This->viewports.vp2.dvMinZ);
86 offset.x = -2.0f *
This->viewports.vp2.dvClipX /
This->viewports.vp2.dvClipWidth - 1.0f;
87 offset.y = -2.0f *
This->viewports.vp2.dvClipY /
This->viewports.vp2.dvClipHeight + 1.0f;
88 offset.z = -
This->viewports.vp2.dvMinZ / (
This->viewports.vp2.dvMaxZ -
This->viewports.vp2.dvMinZ);
92 vp.dwX =
This->viewports.vp1.dwX;
93 vp.dwY =
This->viewports.vp1.dwY;
94 vp.dwHeight =
This->viewports.vp1.dwHeight;
95 vp.dwWidth =
This->viewports.vp1.dwWidth;
99 scale.x = 2.0f *
This->viewports.vp1.dvScaleX /
This->viewports.vp1.dwWidth;
100 scale.y = 2.0f *
This->viewports.vp1.dvScaleY /
This->viewports.vp1.dwHeight;
126 TRACE(
"vp %p, light %p, index %lu, active_lights_count %lu.\n",
129 if (
light->active_light_index)
138 if (
l->active_light_index)
140 WARN(
"Too many active lights, viewport %p, light %p, deactivating %p.\n", vp,
light,
l);
151 map = ~vp->map_lights;
154 light->active_light_index =
i + 1;
163 TRACE(
"vp %p, light %p, index %lu, active_lights_count %lu, map_lights %#lx.\n",
166 if (!
light->active_light_index)
173 light->active_light_index = 0;
184 TRACE(
" - dwSize = %lu dwX = %lu dwY = %lu\n",
186 TRACE(
" - dwWidth = %lu dwHeight = %lu\n",
188 TRACE(
" - dvScaleX = %f dvScaleY = %f\n",
190 TRACE(
" - dvMaxX = %f dvMaxY = %f\n",
192 TRACE(
" - dvMinZ = %f dvMaxZ = %f\n",
198 TRACE(
" - dwSize = %lu dwX = %lu dwY = %lu\n",
200 TRACE(
" - dwWidth = %lu dwHeight = %lu\n",
202 TRACE(
" - dvClipX = %f dvClipY = %f\n",
204 TRACE(
" - dvClipWidth = %f dvClipHeight = %f\n",
206 TRACE(
" - dvMinZ = %f dvMaxZ = %f\n",
269 TRACE(
"%p increasing refcount to %lu.\n", viewport,
ref);
288 TRACE(
"%p decreasing refcount to %lu.\n", viewport,
ref);
314 TRACE(
"iface %p, d3d %p.\n", iface, d3d);
324 TRACE(
"iface %p, vp %p.\n", iface, vp);
331 WARN(
"Viewport data was not set.\n");
363 TRACE(
" returning D3DVIEWPORT :\n");
378 IDirect3DViewport3 *current_viewport;
381 TRACE(
"iface %p, vp %p.\n", iface, vp);
386 if (vp->
dwSize !=
sizeof(*vp))
388 WARN(
"Invalid D3DVIEWPORT size %lu.\n", vp->
dwSize);
394 TRACE(
" getting D3DVIEWPORT :\n");
400 WARN(
"Viewport not bound to a device, returning D3DERR_VIEWPORTHASNODEVICE.\n");
420 WARN(
"Invalid viewport, returning DDERR_INVALIDPARAMS.\n");
436 if (current_viewport == iface)
494 BOOL activate =
device->current_viewport != viewport;
496 TRACE(
"iface %p, vertex_count %lu, data %p, flags %#lx, offscreen %p.\n",
510 WARN(
"Transform data is NULL or size is incorrect, returning DDERR_INVALIDPARAMS\n");
515 WARN(
"No clipping flag passed, returning DDERR_INVALIDPARAMS\n");
534 for(
i = 0;
i < dwVertexCount;
i++)
548 outH[
i].
hx = (
x -
device->legacy_clipspace._41 *
w) /
device->legacy_clipspace._11;
549 outH[
i].
hy = (
y -
device->legacy_clipspace._42 *
w) /
device->legacy_clipspace._22;
550 outH[
i].
hz = (
z -
device->legacy_clipspace._43 *
w) /
device->legacy_clipspace._33;
590 out->payload =
in->payload;
593 if (activate &&
device->current_viewport)
627 TRACE(
"iface %p, material %#lx.\n", iface, material);
633 WARN(
"Invalid material handle %#lx.\n", material);
638 TRACE(
"Setting background color : %.8e %.8e %.8e %.8e.\n",
639 m->mat.diffuse.r,
m->mat.diffuse.g,
640 m->mat.diffuse.b,
m->mat.diffuse.a);
666 TRACE(
"iface %p, material %p, valid %p.\n", iface, material,
valid);
692 FIXME(
"iface %p, surface %p stub!\n", iface, surface);
712 IDirectDrawSurface **surface,
BOOL *
valid)
714 FIXME(
"iface %p, surface %p, valid %p stub!\n", iface, surface,
valid);
742 IDirect3DViewport3 *current_viewport;
743 IDirect3DDevice3 *d3d_device3;
745 TRACE(
"iface %p, rect_count %lu, rects %p, flags %#lx.\n", iface, rect_count, rects,
flags);
747 if (!rects || !rect_count)
749 WARN(
"rect_count = %lu, rects = %p, ignoring clear\n", rect_count, rects);
754 ERR(
" Trying to clear a viewport not attached to a device!\n");
757 d3d_device3 = &
This->active_device->IDirect3DDevice3_iface;
763 if (!
This->background)
764 WARN(
"No background material set.\n");
767 This->background->mat.diffuse.g,
768 This->background->mat.diffuse.b,
769 This->background->mat.diffuse.a);
810 TRACE(
"viewport %p, light %p.\n", viewport,
light);
852 TRACE(
"iface %p, light %p.\n", iface, lpDirect3DLight);
856 if (
l->active_viewport != viewport)
858 WARN(
"Light %p active viewport is %p.\n",
l,
l->active_viewport);
865 l->active_viewport =
NULL;
887 IDirect3DLight *lpDirect3DLight, IDirect3DLight **lplpDirect3DLight,
DWORD flags)
894 TRACE(
"iface %p, light %p, next_light %p, flags %#lx.\n",
895 iface, lpDirect3DLight, lplpDirect3DLight,
flags);
897 if (!lplpDirect3DLight)
905 if (!
l ||
l->active_viewport != viewport)
908 WARN(
"Light %p active viewport is %p.\n",
l,
l->active_viewport);
937 *lplpDirect3DLight =
NULL;
955 TRACE(
"iface %p, vp %p.\n", iface, vp);
962 WARN(
"Viewport data was not set.\n");
993 TRACE(
" returning D3DVIEWPORT2 :\n");
1008 IDirect3DViewport3 *current_viewport;
1011 TRACE(
"iface %p, vp %p.\n", iface, vp);
1016 if (vp->
dwSize !=
sizeof(*vp))
1018 WARN(
"Invalid D3DVIEWPORT2 size %lu.\n", vp->
dwSize);
1024 TRACE(
" getting D3DVIEWPORT2 :\n");
1030 WARN(
"Viewport not bound to a device, returning D3DERR_VIEWPORTHASNODEVICE.\n");
1050 WARN(
"Invalid viewport, returning DDERR_INVALIDPARAMS.\n");
1061 if (current_viewport == iface)
1088 IDirectDrawSurface4 *surface)
1090 FIXME(
"iface %p, surface %p stub!\n", iface, surface);
1109 IDirectDrawSurface4 **surface,
BOOL *
valid)
1111 FIXME(
"iface %p, surface %p, valid %p stub!\n", iface, surface,
valid);
1137 IDirect3DViewport3 *current_viewport;
1138 IDirect3DDevice3 *d3d_device3;
1140 TRACE(
"iface %p, rect_count %lu, rects %p, flags %#lx, color 0x%08lx, depth %.8e, stencil %lu.\n",
1143 if (!rects || !rect_count)
1145 WARN(
"rect_count = %lu, rects = %p, ignoring clear\n", rect_count, rects);
1153 WARN(
"Trying to clear a viewport not attached to a device.\n");
1157 d3d_device3 = &viewport->
active_device->IDirect3DDevice3_iface;
1211 if (!iface)
return NULL;
1219 if (!iface)
return NULL;
1227 if (!iface)
return NULL;
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static void list_remove(struct list_entry *entry)
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
static void list_init(struct list_entry *head)
#define IDirect3DLight_AddRef(p)
#define D3DERR_VIEWPORTHASNODEVICE
#define IDirect3DLight_Release(p)
#define IDirect3DViewport3_Release(p)
#define D3DERR_LIGHTHASVIEWPORT
#define IDirect3DViewport3_AddRef(p)
#define IDirect3DDevice7_Clear(p, a, b, c, d, e, f)
#define D3DERR_VIEWPORTDATANOTSET
#define IDirect3DDevice3_GetCurrentViewport(p, a)
#define IDirect3DDevice7_SetViewport(p, a)
#define D3DTRANSFORM_UNCLIPPED
#define D3DTRANSFORM_CLIPPED
static HRESULT WINAPI d3d_viewport_Initialize(IDirect3DViewport3 *iface, IDirect3D *d3d)
static HRESULT WINAPI d3d_viewport_GetBackground(IDirect3DViewport3 *iface, D3DMATERIALHANDLE *material, BOOL *valid)
void viewport_alloc_active_light_index(struct d3d_light *light)
static HRESULT WINAPI d3d_viewport_SetViewport(IDirect3DViewport3 *iface, D3DVIEWPORT *vp)
void viewport_deactivate(struct d3d_viewport *viewport)
static const struct IDirect3DViewport3Vtbl d3d_viewport_vtbl
struct d3d_viewport * unsafe_impl_from_IDirect3DViewport(IDirect3DViewport *iface)
static HRESULT WINAPI d3d_viewport_SetBackground(IDirect3DViewport3 *iface, D3DMATERIALHANDLE material)
void d3d_viewport_init(struct d3d_viewport *viewport, struct ddraw *ddraw)
static HRESULT WINAPI d3d_viewport_Clear2(IDirect3DViewport3 *iface, DWORD rect_count, D3DRECT *rects, DWORD flags, DWORD color, D3DVALUE depth, DWORD stencil)
static ULONG WINAPI d3d_viewport_Release(IDirect3DViewport3 *iface)
static HRESULT WINAPI d3d_viewport_GetBackgroundDepth2(IDirect3DViewport3 *iface, IDirectDrawSurface4 **surface, BOOL *valid)
static ULONG WINAPI d3d_viewport_AddRef(IDirect3DViewport3 *iface)
struct d3d_viewport * unsafe_impl_from_IDirect3DViewport3(IDirect3DViewport3 *iface)
static HRESULT WINAPI d3d_viewport_NextLight(IDirect3DViewport3 *iface, IDirect3DLight *lpDirect3DLight, IDirect3DLight **lplpDirect3DLight, DWORD flags)
static void _dump_D3DVIEWPORT(const D3DVIEWPORT *lpvp)
static HRESULT WINAPI d3d_viewport_TransformVertices(IDirect3DViewport3 *iface, DWORD dwVertexCount, D3DTRANSFORMDATA *data, DWORD dwFlags, DWORD *offscreen)
static HRESULT WINAPI d3d_viewport_GetViewport(IDirect3DViewport3 *iface, D3DVIEWPORT *vp)
static HRESULT WINAPI d3d_viewport_Clear(IDirect3DViewport3 *iface, DWORD rect_count, D3DRECT *rects, DWORD flags)
struct d3d_viewport * unsafe_impl_from_IDirect3DViewport2(IDirect3DViewport2 *iface)
static HRESULT WINAPI d3d_viewport_SetViewport2(IDirect3DViewport3 *iface, D3DVIEWPORT2 *vp)
static HRESULT WINAPI d3d_viewport_QueryInterface(IDirect3DViewport3 *iface, REFIID riid, void **object)
static struct d3d_viewport * impl_from_IDirect3DViewport3(IDirect3DViewport3 *iface)
static HRESULT WINAPI d3d_viewport_SetBackgroundDepth2(IDirect3DViewport3 *iface, IDirectDrawSurface4 *surface)
static HRESULT WINAPI d3d_viewport_LightElements(IDirect3DViewport3 *iface, DWORD element_count, D3DLIGHTDATA *data)
static HRESULT WINAPI d3d_viewport_GetViewport2(IDirect3DViewport3 *iface, D3DVIEWPORT2 *vp)
static void update_clip_space(struct d3d_device *device, struct wined3d_vec3 *scale, struct wined3d_vec3 *offset)
static HRESULT WINAPI d3d_viewport_AddLight(IDirect3DViewport3 *viewport, IDirect3DLight *light)
void viewport_activate(struct d3d_viewport *This, BOOL ignore_lights)
static HRESULT WINAPI d3d_viewport_GetBackgroundDepth(IDirect3DViewport3 *iface, IDirectDrawSurface **surface, BOOL *valid)
static void _dump_D3DVIEWPORT2(const D3DVIEWPORT2 *lpvp)
static HRESULT WINAPI d3d_viewport_SetBackgroundDepth(IDirect3DViewport3 *iface, IDirectDrawSurface *surface)
static HRESULT WINAPI d3d_viewport_DeleteLight(IDirect3DViewport3 *iface, IDirect3DLight *lpDirect3DLight)
void viewport_free_active_light_index(struct d3d_light *light)
#define DDRAW_MAX_ACTIVE_LIGHTS
void light_activate(struct d3d_light *light)
void multiply_matrix(struct wined3d_matrix *dst, const struct wined3d_matrix *src1, const struct wined3d_matrix *src2)
void light_deactivate(struct d3d_light *light)
void * ddraw_get_object(struct ddraw_handle_table *t, DWORD handle, enum ddraw_handle_type type)
struct wined3d_rendertarget_view * ddraw_surface_get_rendertarget_view(struct ddraw_surface *surface)
struct d3d_light * unsafe_impl_from_IDirect3DLight(IDirect3DLight *iface)
@ DDRAW_VIEWPORT_VERSION_1
@ DDRAW_VIEWPORT_VERSION_NONE
@ DDRAW_VIEWPORT_VERSION_2
HRESULT CDECL wined3d_texture_get_sub_resource_desc(const struct wined3d_texture *texture, unsigned int sub_resource_idx, struct wined3d_sub_resource_desc *desc)
void *CDECL wined3d_rendertarget_view_get_sub_resource_parent(const struct wined3d_rendertarget_view *view)
GLint GLint GLsizei GLsizei GLsizei depth
GLint GLint GLint GLint GLint x
GLint GLint GLint GLint GLint GLint y
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLenum GLenum GLenum GLenum GLenum scale
GLubyte GLubyte GLubyte GLubyte w
GLint GLfloat GLint stencil
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 GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
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
#define memcpy(s1, s2, n)
static ULONG ** element_count
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
#define IsEqualGUID(rguid1, rguid2)
#define DDERR_INVALIDCAPS
#define DDERR_UNSUPPORTED
#define DDERR_INVALIDPARAMS
#define DDERR_ALREADYINITIALIZED
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
__WINE_SERVER_LIST_INLINE struct list * list_next(const struct list *list, const struct list *elem)
__WINE_SERVER_LIST_INLINE struct list * list_tail(const struct list *list)
struct d3d_viewport * active_viewport
enum ddraw_viewport_version version
struct d3d_device * active_device
struct d3d_material * background
IDirect3DViewport3 IDirect3DViewport3_iface
DWORD active_lights_count
union d3d_viewport::@288 viewports
unsigned int sub_resource_idx
struct wined3d_texture * wined3d_texture
struct wined3d_viewport viewport
#define CONTAINING_RECORD(address, type, field)
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
void CDECL wined3d_stateblock_set_transform(struct wined3d_stateblock *stateblock, enum wined3d_transform_state d3dts, const struct wined3d_matrix *matrix)
#define WINED3D_TS_WORLD_MATRIX(index)
static int wined3d_bit_scan(unsigned int *x)
static bool wined3d_bound_range(unsigned int start, unsigned int count, unsigned int limit)
void WINAPI wined3d_mutex_unlock(void)
void WINAPI wined3d_mutex_lock(void)