ReactOS 0.4.15-dev-8093-g3285f69
line.c
Go to the documentation of this file.
1#ifdef __REACTOS__
2#include "precomp.h"
3#else
4/*
5 * Copyright 2010 Christian Costa
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20 *
21 */
22
23
24#include "d3dx9_private.h"
25#endif /* __REACTOS__ */
26
28
30{
31 ID3DXLine ID3DXLine_iface;
33
34 IDirect3DDevice9 *device;
35 IDirect3DStateBlock9 *state;
36};
37
38static inline struct d3dx9_line *impl_from_ID3DXLine(ID3DXLine *iface)
39{
40 return CONTAINING_RECORD(iface, struct d3dx9_line, ID3DXLine_iface);
41}
42
43static HRESULT WINAPI d3dx9_line_QueryInterface(ID3DXLine *iface, REFIID riid, void **out)
44{
45 TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out);
46
47 if (IsEqualGUID(riid, &IID_ID3DXLine)
49 {
50 ID3DXLine_AddRef(iface);
51 *out = iface;
52 return S_OK;
53 }
54
55 WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
56
57 *out = NULL;
58 return E_NOINTERFACE;
59}
60
61static ULONG WINAPI d3dx9_line_AddRef(ID3DXLine *iface)
62{
63 struct d3dx9_line *line = impl_from_ID3DXLine(iface);
64 ULONG refcount = InterlockedIncrement(&line->ref);
65
66 TRACE("%p increasing refcount to %u.\n", line, refcount);
67
68 return refcount;
69}
70
71static ULONG WINAPI d3dx9_line_Release(ID3DXLine *iface)
72{
73 struct d3dx9_line *line = impl_from_ID3DXLine(iface);
74 ULONG refcount = InterlockedDecrement(&line->ref);
75
76 TRACE("%p decreasing refcount to %u.\n", line, refcount);
77
78 if (!refcount)
79 {
82 }
83
84 return refcount;
85}
86
87static HRESULT WINAPI d3dx9_line_GetDevice(struct ID3DXLine *iface, struct IDirect3DDevice9 **device)
88{
89 struct d3dx9_line *line = impl_from_ID3DXLine(iface);
90
91 TRACE("iface %p, device %p.\n", iface, line);
92
93 if (!device)
94 return D3DERR_INVALIDCALL;
95
96 *device = line->device;
98
99 return D3D_OK;
100}
101
102static HRESULT WINAPI d3dx9_line_Begin(ID3DXLine *iface)
103{
104 struct d3dx9_line *line = impl_from_ID3DXLine(iface);
105 D3DXMATRIX identity, projection;
106 D3DVIEWPORT9 vp;
107
108 TRACE("iface %p.\n", iface);
109
110 if (line->state)
111 return D3DERR_INVALIDCALL;
112
114 return D3DXERR_INVALIDDATA;
115
116 if (FAILED(IDirect3DDevice9_GetViewport(line->device, &vp)))
117 goto failed;
118
119 D3DXMatrixIdentity(&identity);
120 D3DXMatrixOrthoOffCenterLH(&projection, 0.0, (FLOAT)vp.Width, (FLOAT)vp.Height, 0.0, 0.0, 1.0);
121
123 goto failed;
125 goto failed;
126 if (FAILED(IDirect3DDevice9_SetTransform(line->device, D3DTS_PROJECTION, &projection)))
127 goto failed;
128
130 goto failed;
132 goto failed;
134 goto failed;
136 goto failed;
138 goto failed;
140 goto failed;
141
142 return D3D_OK;
143
144failed:
147 line->state = NULL;
148 return D3DXERR_INVALIDDATA;
149}
150
151static HRESULT WINAPI d3dx9_line_Draw(ID3DXLine *iface, const D3DXVECTOR2 *vertex_list,
152 DWORD vertex_list_count, D3DCOLOR color)
153{
154 FIXME("iface %p, vertex_list %p, vertex_list_count %u, color 0x%08x stub!\n",
155 iface, vertex_list, vertex_list_count, color);
156
157 return E_NOTIMPL;
158}
159
160static HRESULT WINAPI d3dx9_line_DrawTransform(ID3DXLine *iface, const D3DXVECTOR3 *vertex_list,
161 DWORD vertex_list_count, const D3DXMATRIX *transform, D3DCOLOR color)
162{
163 FIXME("iface %p, vertex_list %p, vertex_list_count %u, transform %p, color 0x%08x stub!\n",
164 iface, vertex_list, vertex_list_count, transform, color);
165
166 return E_NOTIMPL;
167}
168
170{
171 FIXME("iface %p, pattern 0x%08x stub!\n", iface, pattern);
172
173 return E_NOTIMPL;
174}
175
176static DWORD WINAPI d3dx9_line_GetPattern(ID3DXLine *iface)
177{
178 FIXME("iface %p stub!\n", iface);
179
180 return 0xffffffff;
181}
182
183static HRESULT WINAPI d3dx9_line_SetPatternScale(ID3DXLine *iface, float scale)
184{
185 FIXME("iface %p, scale %.8e stub!\n", iface, scale);
186
187 return E_NOTIMPL;
188}
189
190static float WINAPI d3dx9_line_GetPatternScale(ID3DXLine *iface)
191{
192 FIXME("iface %p stub!\n", iface);
193
194 return 1.0f;
195}
196
197static HRESULT WINAPI d3dx9_line_SetWidth(ID3DXLine *iface, float width)
198{
199 FIXME("iface %p, width %.8e stub!\n", iface, width);
200
201 return E_NOTIMPL;
202}
203
204static float WINAPI d3dx9_line_GetWidth(ID3DXLine *iface)
205{
206 FIXME("iface %p stub!\n", iface);
207
208 return 1.0f;
209}
210
211static HRESULT WINAPI d3dx9_line_SetAntialias(ID3DXLine *iface, BOOL antialias)
212{
213 FIXME("iface %p, antialias %#x stub!\n", iface, antialias);
214
215 return E_NOTIMPL;
216}
217
218static BOOL WINAPI d3dx9_line_GetAntialias(ID3DXLine *iface)
219{
220 FIXME("iface %p stub!\n", iface);
221
222 return FALSE;
223}
224
225static HRESULT WINAPI d3dx9_line_SetGLLines(ID3DXLine *iface, BOOL gl_lines)
226{
227 FIXME("iface %p, gl_lines %#x stub!\n", iface, gl_lines);
228
229 return E_NOTIMPL;
230}
231
232static BOOL WINAPI d3dx9_line_GetGLLines(ID3DXLine *iface)
233{
234 FIXME("iface %p stub!\n", iface);
235
236 return FALSE;
237}
238
239static HRESULT WINAPI d3dx9_line_End(ID3DXLine *iface)
240{
241 struct d3dx9_line *line = impl_from_ID3DXLine(iface);
242
243 HRESULT hr;
244
245 TRACE("iface %p.\n", iface);
246
247 if (!line->state)
248 return D3DERR_INVALIDCALL;
249
252 line->state = NULL;
253
254 if (FAILED(hr))
255 return D3DXERR_INVALIDDATA;
256
257 return D3D_OK;
258}
259
260static HRESULT WINAPI d3dx9_line_OnLostDevice(ID3DXLine *iface)
261{
262 FIXME("iface %p stub!\n", iface);
263
264 return E_NOTIMPL;
265}
267{
268 FIXME("iface %p stub!\n", iface);
269
270 return S_OK;
271}
272
273static const struct ID3DXLineVtbl d3dx9_line_vtbl =
274{
295};
296
297HRESULT WINAPI D3DXCreateLine(struct IDirect3DDevice9 *device, struct ID3DXLine **line)
298{
299 struct d3dx9_line *object;
300
301 TRACE("device %p, line %p.\n", device, line);
302
303 if (!device || !line)
304 return D3DERR_INVALIDCALL;
305
306 if (!(object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object))))
307 return E_OUTOFMEMORY;
308
309 object->ID3DXLine_iface.lpVtbl = &d3dx9_line_vtbl;
310 object->ref = 1;
311 object->device = device;
313
314 *line = &object->ID3DXLine_iface;
315
316 return D3D_OK;
317}
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
const GUID IID_IUnknown
#define FIXME(fmt,...)
Definition: debug.h:114
#define WARN(fmt,...)
Definition: debug.h:115
#define D3DXERR_INVALIDDATA
Definition: compiler.c:30
@ 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:1300
#define IDirect3DDevice9_SetRenderState(p, a, b)
Definition: d3d9.h:1564
#define IDirect3DDevice9_GetViewport(p, a)
Definition: d3d9.h:1555
#define IDirect3DDevice9_SetTransform(p, a, b)
Definition: d3d9.h:1551
#define IDirect3DDevice9_Release(p)
Definition: d3d9.h:1508
#define IDirect3DStateBlock9_Apply(p)
Definition: d3d9.h:1304
#define IDirect3DDevice9_CreateStateBlock(p, a, b)
Definition: d3d9.h:1566
#define IDirect3DDevice9_AddRef(p)
Definition: d3d9.h:1507
#define D3D_OK
Definition: d3d.h:106
#define D3DERR_INVALIDCALL
#define ID3DXLine_AddRef(p)
Definition: d3dx9core.h:245
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_NOTIMPL
Definition: ddrawi.h:99
#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:232
static HRESULT WINAPI d3dx9_line_Begin(ID3DXLine *iface)
Definition: line.c:102
static HRESULT WINAPI d3dx9_line_SetWidth(ID3DXLine *iface, float width)
Definition: line.c:197
static HRESULT WINAPI d3dx9_line_SetGLLines(ID3DXLine *iface, BOOL gl_lines)
Definition: line.c:225
static HRESULT WINAPI d3dx9_line_GetDevice(struct ID3DXLine *iface, struct IDirect3DDevice9 **device)
Definition: line.c:87
static float WINAPI d3dx9_line_GetWidth(ID3DXLine *iface)
Definition: line.c:204
static ULONG WINAPI d3dx9_line_Release(ID3DXLine *iface)
Definition: line.c:71
HRESULT WINAPI D3DXCreateLine(struct IDirect3DDevice9 *device, struct ID3DXLine **line)
Definition: line.c:297
static BOOL WINAPI d3dx9_line_GetAntialias(ID3DXLine *iface)
Definition: line.c:218
static ULONG WINAPI d3dx9_line_AddRef(ID3DXLine *iface)
Definition: line.c:61
static DWORD WINAPI d3dx9_line_GetPattern(ID3DXLine *iface)
Definition: line.c:176
static HRESULT WINAPI d3dx9_line_SetPatternScale(ID3DXLine *iface, float scale)
Definition: line.c:183
static HRESULT WINAPI d3dx9_line_Draw(ID3DXLine *iface, const D3DXVECTOR2 *vertex_list, DWORD vertex_list_count, D3DCOLOR color)
Definition: line.c:151
static HRESULT WINAPI d3dx9_line_SetPattern(ID3DXLine *iface, DWORD pattern)
Definition: line.c:169
static HRESULT WINAPI d3dx9_line_End(ID3DXLine *iface)
Definition: line.c:239
static HRESULT WINAPI d3dx9_line_QueryInterface(ID3DXLine *iface, REFIID riid, void **out)
Definition: line.c:43
static HRESULT WINAPI d3dx9_line_DrawTransform(ID3DXLine *iface, const D3DXVECTOR3 *vertex_list, DWORD vertex_list_count, const D3DXMATRIX *transform, D3DCOLOR color)
Definition: line.c:160
static struct d3dx9_line * impl_from_ID3DXLine(ID3DXLine *iface)
Definition: line.c:38
static HRESULT WINAPI d3dx9_line_OnResetDevice(ID3DXLine *iface)
Definition: line.c:266
static HRESULT WINAPI d3dx9_line_SetAntialias(ID3DXLine *iface, BOOL antialias)
Definition: line.c:211
static float WINAPI d3dx9_line_GetPatternScale(ID3DXLine *iface)
Definition: line.c:190
static const struct ID3DXLineVtbl d3dx9_line_vtbl
Definition: line.c:273
static HRESULT WINAPI d3dx9_line_OnLostDevice(ID3DXLine *iface)
Definition: line.c:260
D3DXMATRIX *WINAPI D3DXMatrixOrthoOffCenterLH(D3DXMATRIX *pout, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, FLOAT zf)
Definition: math.c:443
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
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
static FILE * out
Definition: regtests2xml.c:44
HRESULT hr
Definition: shlfolder.c:183
#define TRACE(s)
Definition: solgame.cpp:4
LONG ref
Definition: line.c:32
ID3DXLine ID3DXLine_iface
Definition: line.c:31
IDirect3DDevice9 * device
Definition: line.c:34
IDirect3DStateBlock9 * state
Definition: line.c:35
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
#define WINAPI
Definition: msvc.h:6
#define E_NOINTERFACE
Definition: winerror.h:2364