ReactOS 0.4.17-dev-966-gf06eace
line.c
Go to the documentation of this file.
1/*
2 * Copyright 2010 Christian Costa
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17 *
18 */
19
20
21#include "d3dx9_private.h"
22
24
26{
27 ID3DXLine ID3DXLine_iface;
29
31 IDirect3DStateBlock9 *state;
32 float width;
33};
34
35static inline struct d3dx9_line *impl_from_ID3DXLine(ID3DXLine *iface)
36{
37 return CONTAINING_RECORD(iface, struct d3dx9_line, ID3DXLine_iface);
38}
39
40static HRESULT WINAPI d3dx9_line_QueryInterface(ID3DXLine *iface, REFIID riid, void **out)
41{
42 TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out);
43
44 if (IsEqualGUID(riid, &IID_ID3DXLine)
46 {
47 ID3DXLine_AddRef(iface);
48 *out = iface;
49 return S_OK;
50 }
51
52 WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
53
54 *out = NULL;
55 return E_NOINTERFACE;
56}
57
58static ULONG WINAPI d3dx9_line_AddRef(ID3DXLine *iface)
59{
60 struct d3dx9_line *line = impl_from_ID3DXLine(iface);
61 ULONG refcount = InterlockedIncrement(&line->ref);
62
63 TRACE("%p increasing refcount to %lu.\n", line, refcount);
64
65 return refcount;
66}
67
68static ULONG WINAPI d3dx9_line_Release(ID3DXLine *iface)
69{
70 struct d3dx9_line *line = impl_from_ID3DXLine(iface);
71 ULONG refcount = InterlockedDecrement(&line->ref);
72
73 TRACE("%p decreasing refcount to %lu.\n", line, refcount);
74
75 if (!refcount)
76 {
78 free(line);
79 }
80
81 return refcount;
82}
83
84static HRESULT WINAPI d3dx9_line_GetDevice(struct ID3DXLine *iface, struct IDirect3DDevice9 **device)
85{
86 struct d3dx9_line *line = impl_from_ID3DXLine(iface);
87
88 TRACE("iface %p, device %p.\n", iface, line);
89
90 if (!device)
91 return D3DERR_INVALIDCALL;
92
93 *device = line->device;
95
96 return D3D_OK;
97}
98
99static HRESULT WINAPI d3dx9_line_Begin(ID3DXLine *iface)
100{
101 struct d3dx9_line *line = impl_from_ID3DXLine(iface);
102 D3DXMATRIX identity, projection;
103 D3DVIEWPORT9 vp;
104
105 TRACE("iface %p.\n", iface);
106
107 if (line->state)
108 return D3DERR_INVALIDCALL;
109
111 return D3DXERR_INVALIDDATA;
112
113 if (FAILED(IDirect3DDevice9_GetViewport(line->device, &vp)))
114 goto failed;
115
116 D3DXMatrixIdentity(&identity);
117 D3DXMatrixOrthoOffCenterLH(&projection, 0.0, (FLOAT)vp.Width, (FLOAT)vp.Height, 0.0, 0.0, 1.0);
118
120 goto failed;
122 goto failed;
123 if (FAILED(IDirect3DDevice9_SetTransform(line->device, D3DTS_PROJECTION, &projection)))
124 goto failed;
125
127 goto failed;
129 goto failed;
131 goto failed;
133 goto failed;
135 goto failed;
137 goto failed;
138
139 return D3D_OK;
140
141failed:
144 line->state = NULL;
145 return D3DXERR_INVALIDDATA;
146}
147
148static HRESULT WINAPI d3dx9_line_Draw(ID3DXLine *iface, const D3DXVECTOR2 *vertex_list,
149 DWORD vertex_list_count, D3DCOLOR color)
150{
151 FIXME("iface %p, vertex_list %p, vertex_list_count %lu, color 0x%08lx stub!\n",
152 iface, vertex_list, vertex_list_count, color);
153
154 return E_NOTIMPL;
155}
156
157static HRESULT WINAPI d3dx9_line_DrawTransform(ID3DXLine *iface, const D3DXVECTOR3 *vertex_list,
158 DWORD vertex_list_count, const D3DXMATRIX *transform, D3DCOLOR color)
159{
160 FIXME("iface %p, vertex_list %p, vertex_list_count %lu, transform %p, color 0x%08lx stub!\n",
161 iface, vertex_list, vertex_list_count, transform, color);
162
163 return E_NOTIMPL;
164}
165
167{
168 FIXME("iface %p, pattern 0x%08lx stub!\n", iface, pattern);
169
170 return E_NOTIMPL;
171}
172
173static DWORD WINAPI d3dx9_line_GetPattern(ID3DXLine *iface)
174{
175 FIXME("iface %p stub!\n", iface);
176
177 return 0xffffffff;
178}
179
180static HRESULT WINAPI d3dx9_line_SetPatternScale(ID3DXLine *iface, float scale)
181{
182 FIXME("iface %p, scale %.8e stub!\n", iface, scale);
183
184 return E_NOTIMPL;
185}
186
187static float WINAPI d3dx9_line_GetPatternScale(ID3DXLine *iface)
188{
189 FIXME("iface %p stub!\n", iface);
190
191 return 1.0f;
192}
193
194static HRESULT WINAPI d3dx9_line_SetWidth(ID3DXLine *iface, float width)
195{
196 struct d3dx9_line *line = impl_from_ID3DXLine(iface);
197
198 TRACE("iface %p, width %.8e.\n", iface, width);
199
200 if (width <= 0.0f)
201 return D3DERR_INVALIDCALL;
202
203 line->width = width;
204
205 return D3D_OK;
206}
207
208static float WINAPI d3dx9_line_GetWidth(ID3DXLine *iface)
209{
210 struct d3dx9_line *line = impl_from_ID3DXLine(iface);
211
212 TRACE("iface %p.\n", iface);
213
214 return line->width;
215}
216
217static HRESULT WINAPI d3dx9_line_SetAntialias(ID3DXLine *iface, BOOL antialias)
218{
219 FIXME("iface %p, antialias %#x stub!\n", iface, antialias);
220
221 return E_NOTIMPL;
222}
223
224static BOOL WINAPI d3dx9_line_GetAntialias(ID3DXLine *iface)
225{
226 FIXME("iface %p stub!\n", iface);
227
228 return FALSE;
229}
230
231static HRESULT WINAPI d3dx9_line_SetGLLines(ID3DXLine *iface, BOOL gl_lines)
232{
233 FIXME("iface %p, gl_lines %#x stub!\n", iface, gl_lines);
234
235 return E_NOTIMPL;
236}
237
238static BOOL WINAPI d3dx9_line_GetGLLines(ID3DXLine *iface)
239{
240 FIXME("iface %p stub!\n", iface);
241
242 return FALSE;
243}
244
245static HRESULT WINAPI d3dx9_line_End(ID3DXLine *iface)
246{
247 struct d3dx9_line *line = impl_from_ID3DXLine(iface);
248
249 HRESULT hr;
250
251 TRACE("iface %p.\n", iface);
252
253 if (!line->state)
254 return D3DERR_INVALIDCALL;
255
258 line->state = NULL;
259
260 if (FAILED(hr))
261 return D3DXERR_INVALIDDATA;
262
263 return D3D_OK;
264}
265
266static HRESULT WINAPI d3dx9_line_OnLostDevice(ID3DXLine *iface)
267{
268 FIXME("iface %p stub!\n", iface);
269
270 return E_NOTIMPL;
271}
273{
274 FIXME("iface %p stub!\n", iface);
275
276 return S_OK;
277}
278
279static const struct ID3DXLineVtbl d3dx9_line_vtbl =
280{
301};
302
304{
305 struct d3dx9_line *object;
306
307 TRACE("device %p, line %p.\n", device, line);
308
309 if (!device || !line)
310 return D3DERR_INVALIDCALL;
311
312 if (!(object = calloc(1, sizeof(*object))))
313 return E_OUTOFMEMORY;
314
315 object->ID3DXLine_iface.lpVtbl = &d3dx9_line_vtbl;
316 object->ref = 1;
317 object->device = device;
319 object->width = 1.0f;
320
321 *line = &object->ID3DXLine_iface;
322
323 return D3D_OK;
324}
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
const GUID IID_IUnknown
#define D3DERR_INVALIDCALL
Definition: d3d10_private.h:42
@ D3DRS_SHADEMODE
Definition: d3d8types.h:731
@ D3DRS_SRCBLEND
Definition: d3d8types.h:736
@ D3DRS_DESTBLEND
Definition: d3d8types.h:737
@ D3DRS_ALPHABLENDENABLE
Definition: d3d8types.h:743
@ D3DRS_LIGHTING
Definition: d3d8types.h:773
@ D3DRS_FOGENABLE
Definition: d3d8types.h:744
@ D3DSHADE_FLAT
Definition: d3d8types.h:822
@ D3DBLEND_SRCALPHA
Definition: d3d8types.h:513
@ D3DBLEND_INVSRCALPHA
Definition: d3d8types.h:514
@ D3DSBT_ALL
Definition: d3d8types.h:830
@ D3DTS_VIEW
Definition: d3d8types.h:955
@ D3DTS_PROJECTION
Definition: d3d8types.h:956
#define D3DTS_WORLD
Definition: d3d8types.h:85
#define IDirect3DStateBlock9_Release(p)
Definition: d3d9.h:1128
#define IDirect3DDevice9_SetRenderState(p, a, b)
Definition: d3d9.h:1392
#define IDirect3DDevice9_GetViewport(p, a)
Definition: d3d9.h:1383
#define IDirect3DDevice9_SetTransform(p, a, b)
Definition: d3d9.h:1379
#define IDirect3DDevice9_Release(p)
Definition: d3d9.h:1336
#define IDirect3DStateBlock9_Apply(p)
Definition: d3d9.h:1132
#define IDirect3DDevice9_CreateStateBlock(p, a, b)
Definition: d3d9.h:1394
#define IDirect3DDevice9_AddRef(p)
Definition: d3d9.h:1335
#define D3D_OK
Definition: d3d.h:106
#define D3DXERR_INVALIDDATA
Definition: compiler.c:53
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_NOTIMPL
Definition: ddrawi.h:99
#define free
Definition: debug_ros.c:5
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
static BOOL WINAPI d3dx9_line_GetGLLines(ID3DXLine *iface)
Definition: line.c:238
static HRESULT WINAPI d3dx9_line_Begin(ID3DXLine *iface)
Definition: line.c:99
static HRESULT WINAPI d3dx9_line_SetWidth(ID3DXLine *iface, float width)
Definition: line.c:194
static HRESULT WINAPI d3dx9_line_SetGLLines(ID3DXLine *iface, BOOL gl_lines)
Definition: line.c:231
static HRESULT WINAPI d3dx9_line_GetDevice(struct ID3DXLine *iface, struct IDirect3DDevice9 **device)
Definition: line.c:84
static float WINAPI d3dx9_line_GetWidth(ID3DXLine *iface)
Definition: line.c:208
static ULONG WINAPI d3dx9_line_Release(ID3DXLine *iface)
Definition: line.c:68
HRESULT WINAPI D3DXCreateLine(struct IDirect3DDevice9 *device, struct ID3DXLine **line)
Definition: line.c:303
static BOOL WINAPI d3dx9_line_GetAntialias(ID3DXLine *iface)
Definition: line.c:224
static ULONG WINAPI d3dx9_line_AddRef(ID3DXLine *iface)
Definition: line.c:58
static DWORD WINAPI d3dx9_line_GetPattern(ID3DXLine *iface)
Definition: line.c:173
static HRESULT WINAPI d3dx9_line_SetPatternScale(ID3DXLine *iface, float scale)
Definition: line.c:180
static HRESULT WINAPI d3dx9_line_Draw(ID3DXLine *iface, const D3DXVECTOR2 *vertex_list, DWORD vertex_list_count, D3DCOLOR color)
Definition: line.c:148
static HRESULT WINAPI d3dx9_line_SetPattern(ID3DXLine *iface, DWORD pattern)
Definition: line.c:166
static HRESULT WINAPI d3dx9_line_End(ID3DXLine *iface)
Definition: line.c:245
static HRESULT WINAPI d3dx9_line_QueryInterface(ID3DXLine *iface, REFIID riid, void **out)
Definition: line.c:40
static HRESULT WINAPI d3dx9_line_DrawTransform(ID3DXLine *iface, const D3DXVECTOR3 *vertex_list, DWORD vertex_list_count, const D3DXMATRIX *transform, D3DCOLOR color)
Definition: line.c:157
static struct d3dx9_line * impl_from_ID3DXLine(ID3DXLine *iface)
Definition: line.c:35
static HRESULT WINAPI d3dx9_line_OnResetDevice(ID3DXLine *iface)
Definition: line.c:272
static HRESULT WINAPI d3dx9_line_SetAntialias(ID3DXLine *iface, BOOL antialias)
Definition: line.c:217
static float WINAPI d3dx9_line_GetPatternScale(ID3DXLine *iface)
Definition: line.c:187
static const struct ID3DXLineVtbl d3dx9_line_vtbl
Definition: line.c:279
static HRESULT WINAPI d3dx9_line_OnLostDevice(ID3DXLine *iface)
Definition: line.c:266
D3DXMATRIX *WINAPI D3DXMatrixOrthoOffCenterLH(D3DXMATRIX *pout, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, FLOAT zf)
Definition: math.c:439
#define ID3DXLine_AddRef(p)
Definition: d3dx9core.h:245
DWORD IDirect3DDevice9
Definition: dxva2api.idl:22
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLint GLsizei width
Definition: gl.h:1546
GLuint GLenum GLenum transform
Definition: glext.h:9407
GLenum GLenum GLenum GLenum GLenum scale
Definition: glext.h:9032
GLuint color
Definition: glext.h:6243
GLubyte * pattern
Definition: glext.h:7787
REFIID riid
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
#define debugstr_guid
Definition: kernel32.h:35
long LONG
Definition: pedump.c:60
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define REFIID
Definition: guiddef.h:118
#define calloc
Definition: rosglue.h:14
#define TRACE(s)
Definition: solgame.cpp:4
LONG ref
Definition: line.c:28
float width
Definition: line.c:32
ID3DXLine ID3DXLine_iface
Definition: line.c:27
IDirect3DDevice9 * device
Definition: line.c:30
IDirect3DStateBlock9 * state
Definition: line.c:31
Definition: devices.h:37
Definition: parser.c:49
float FLOAT
Definition: typedefs.h:69
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383
#define WINAPI
Definition: msvc.h:6
#define E_NOINTERFACE
Definition: winerror.h:3479