ReactOS  0.4.15-dev-3440-g915569a
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 
29 struct d3dx9_line
30 {
31  ID3DXLine ID3DXLine_iface;
33 
34  IDirect3DDevice9 *device;
35  IDirect3DStateBlock9 *state;
36 };
37 
38 static inline struct d3dx9_line *impl_from_ID3DXLine(ID3DXLine *iface)
39 {
40  return CONTAINING_RECORD(iface, struct d3dx9_line, ID3DXLine_iface);
41 }
42 
43 static 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 
61 static 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 
71 static 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 
87 static 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 
102 static 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 
144 failed:
147  line->state = NULL;
148  return D3DXERR_INVALIDDATA;
149 }
150 
151 static 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 
160 static 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 
176 static DWORD WINAPI d3dx9_line_GetPattern(ID3DXLine *iface)
177 {
178  FIXME("iface %p stub!\n", iface);
179 
180  return 0xffffffff;
181 }
182 
183 static 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 
190 static float WINAPI d3dx9_line_GetPatternScale(ID3DXLine *iface)
191 {
192  FIXME("iface %p stub!\n", iface);
193 
194  return 1.0f;
195 }
196 
197 static 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 
204 static float WINAPI d3dx9_line_GetWidth(ID3DXLine *iface)
205 {
206  FIXME("iface %p stub!\n", iface);
207 
208  return 1.0f;
209 }
210 
211 static 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 
218 static BOOL WINAPI d3dx9_line_GetAntialias(ID3DXLine *iface)
219 {
220  FIXME("iface %p stub!\n", iface);
221 
222  return FALSE;
223 }
224 
225 static 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 
232 static BOOL WINAPI d3dx9_line_GetGLLines(ID3DXLine *iface)
233 {
234  FIXME("iface %p stub!\n", iface);
235 
236  return FALSE;
237 }
238 
239 static 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 
260 static HRESULT WINAPI d3dx9_line_OnLostDevice(ID3DXLine *iface)
261 {
262  FIXME("iface %p stub!\n", iface);
263 
264  return E_NOTIMPL;
265 }
266 static HRESULT WINAPI d3dx9_line_OnResetDevice(ID3DXLine *iface)
267 {
268  FIXME("iface %p stub!\n", iface);
269 
270  return S_OK;
271 }
272 
273 static const struct ID3DXLineVtbl d3dx9_line_vtbl =
274 {
295 };
296 
297 HRESULT 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 }
GLint GLint GLsizei width
Definition: gl.h:1546
#define REFIID
Definition: guiddef.h:118
#define E_NOINTERFACE
Definition: winerror.h:2364
coclass MSXML2::XSLTemplate40 object
HRESULT hr
Definition: shlfolder.c:183
ID3DXLine ID3DXLine_iface
Definition: line.c:31
static BOOL WINAPI d3dx9_line_GetGLLines(ID3DXLine *iface)
Definition: line.c:232
#define TRUE
Definition: types.h:120
REFIID riid
Definition: precomp.h:44
static float WINAPI d3dx9_line_GetWidth(ID3DXLine *iface)
Definition: line.c:204
LONG ref
Definition: line.c:32
GLenum GLenum GLenum GLenum GLenum scale
Definition: glext.h:9032
#define WARN(fmt,...)
Definition: debug.h:112
static HRESULT WINAPI d3dx9_line_SetWidth(ID3DXLine *iface, float width)
Definition: line.c:197
static HRESULT WINAPI d3dx9_line_OnLostDevice(ID3DXLine *iface)
Definition: line.c:260
#define D3DERR_INVALIDCALL
#define IDirect3DStateBlock9_Apply(p)
Definition: d3d9.h:1304
static DWORD WINAPI d3dx9_line_GetPattern(ID3DXLine *iface)
Definition: line.c:176
static HRESULT WINAPI d3dx9_line_QueryInterface(ID3DXLine *iface, REFIID riid, void **out)
Definition: line.c:43
FxDevice * device
static HRESULT WINAPI d3dx9_line_End(ID3DXLine *iface)
Definition: line.c:239
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
GLuint color
Definition: glext.h:6243
Definition: devices.h:37
static HRESULT WINAPI d3dx9_line_SetGLLines(ID3DXLine *iface, BOOL gl_lines)
Definition: line.c:225
#define FIXME(fmt,...)
Definition: debug.h:111
#define IDirect3DDevice9_Release(p)
Definition: d3d9.h:1508
Definition: parser.c:48
#define debugstr_guid
Definition: kernel32.h:35
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
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
#define IDirect3DDevice9_GetViewport(p, a)
Definition: d3d9.h:1555
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
static const struct ID3DXLineVtbl d3dx9_line_vtbl
Definition: line.c:273
static HRESULT WINAPI d3dx9_line_SetPattern(ID3DXLine *iface, DWORD pattern)
Definition: line.c:169
LONG HRESULT
Definition: typedefs.h:79
const GUID IID_IUnknown
#define IDirect3DDevice9_CreateStateBlock(p, a, b)
Definition: d3d9.h:1566
HRESULT WINAPI D3DXCreateLine(struct IDirect3DDevice9 *device, struct ID3DXLine **line)
Definition: line.c:297
#define WINAPI
Definition: msvc.h:6
static const struct d3drm_matrix identity
Definition: frame.c:26
static FILE * out
Definition: regtests2xml.c:44
unsigned long DWORD
Definition: ntddk_ex.h:95
#define ID3DXLine_AddRef(p)
Definition: d3dx9core.h:245
#define IDirect3DDevice9_AddRef(p)
Definition: d3d9.h:1507
D3DXMATRIX *WINAPI D3DXMatrixOrthoOffCenterLH(D3DXMATRIX *pout, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, FLOAT zf)
Definition: math.c:443
#define IDirect3DDevice9_SetTransform(p, a, b)
Definition: d3d9.h:1551
#define InterlockedDecrement
Definition: armddk.h:52
#define IDirect3DStateBlock9_Release(p)
Definition: d3d9.h:1300
static BOOL WINAPI d3dx9_line_GetAntialias(ID3DXLine *iface)
Definition: line.c:218
#define IDirect3DDevice9_SetRenderState(p, a, b)
Definition: d3d9.h:1564
#define S_OK
Definition: intsafe.h:52
#define D3D_OK
Definition: d3d.h:106
#define InterlockedIncrement
Definition: armddk.h:53
IDirect3DDevice9 * device
Definition: line.c:34
#define E_NOTIMPL
Definition: ddrawi.h:99
WINE_DEFAULT_DEBUG_CHANNEL(d3dx)
static float WINAPI d3dx9_line_GetPatternScale(ID3DXLine *iface)
Definition: line.c:190
#define D3DTS_WORLD
Definition: d3d8types.h:85
#define NULL
Definition: types.h:112
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
Definition: compobj.c:4112
static HRESULT WINAPI d3dx9_line_OnResetDevice(ID3DXLine *iface)
Definition: line.c:266
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
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_SetAntialias(ID3DXLine *iface, BOOL antialias)
Definition: line.c:211
float FLOAT
Definition: typedefs.h:69
unsigned int ULONG
Definition: retypes.h:1
GLuint GLenum GLenum transform
Definition: glext.h:9407
static HRESULT WINAPI d3dx9_line_GetDevice(struct ID3DXLine *iface, struct IDirect3DDevice9 **device)
Definition: line.c:87
static ULONG WINAPI d3dx9_line_AddRef(ID3DXLine *iface)
Definition: line.c:61
static HRESULT WINAPI d3dx9_line_Begin(ID3DXLine *iface)
Definition: line.c:102
static HRESULT WINAPI d3dx9_line_SetPatternScale(ID3DXLine *iface, float scale)
Definition: line.c:183
static struct d3dx9_line * impl_from_ID3DXLine(ID3DXLine *iface)
Definition: line.c:38
#define HeapFree(x, y, z)
Definition: compat.h:594
IDirect3DStateBlock9 * state
Definition: line.c:35
static ULONG WINAPI d3dx9_line_Release(ID3DXLine *iface)
Definition: line.c:71
GLubyte * pattern
Definition: glext.h:7787