d3dx9_36: COM cleanup for the ID3DXEffect iface.
[wine.git] / dlls / d3dx9_36 / effect.c
blobd1c60946f59e9d511780c09cfb49cf01432bbc76
1 /*
2 * Copyright 2010 Christian Costa
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.
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.
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
19 #include "config.h"
20 #include "wine/port.h"
21 #include "wine/debug.h"
22 #include "wine/unicode.h"
23 #include "windef.h"
24 #include "wingdi.h"
25 #include "d3dx9_36_private.h"
27 WINE_DEFAULT_DEBUG_CHANNEL(d3dx);
29 static const struct ID3DXEffectVtbl ID3DXEffect_Vtbl;
31 typedef struct ID3DXEffectImpl {
32 ID3DXEffect ID3DXEffect_iface;
33 LONG ref;
34 } ID3DXEffectImpl;
36 static inline ID3DXEffectImpl *impl_from_ID3DXEffect(ID3DXEffect *iface)
38 return CONTAINING_RECORD(iface, ID3DXEffectImpl, ID3DXEffect_iface);
41 /*** IUnknown methods ***/
42 static HRESULT WINAPI ID3DXEffectImpl_QueryInterface(ID3DXEffect* iface, REFIID riid, void** object)
44 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
46 TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid), object);
48 if (IsEqualGUID(riid, &IID_IUnknown) ||
49 IsEqualGUID(riid, &IID_ID3DXBaseEffect) ||
50 IsEqualGUID(riid, &IID_ID3DXEffect))
52 This->ID3DXEffect_iface.lpVtbl->AddRef(iface);
53 *object = This;
54 return S_OK;
57 ERR("Interface %s not found\n", debugstr_guid(riid));
59 return E_NOINTERFACE;
62 static ULONG WINAPI ID3DXEffectImpl_AddRef(ID3DXEffect* iface)
64 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
66 TRACE("(%p)->(): AddRef from %u\n", This, This->ref);
68 return InterlockedIncrement(&This->ref);
71 static ULONG WINAPI ID3DXEffectImpl_Release(ID3DXEffect* iface)
73 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
74 ULONG ref = InterlockedDecrement(&This->ref);
76 TRACE("(%p)->(): Release from %u\n", This, ref + 1);
78 if (!ref)
79 HeapFree(GetProcessHeap(), 0, This);
81 return ref;
84 /*** ID3DXBaseEffect methods ***/
85 static HRESULT WINAPI ID3DXEffectImpl_GetDesc(ID3DXEffect* iface, D3DXEFFECT_DESC* desc)
87 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
89 FIXME("(%p)->(%p): stub\n", This, desc);
91 return E_NOTIMPL;
94 static HRESULT WINAPI ID3DXEffectImpl_GetParameterDesc(ID3DXEffect* iface, D3DXHANDLE parameter, D3DXPARAMETER_DESC* desc)
96 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
98 FIXME("(%p)->(%p, %p): stub\n", This, parameter, desc);
100 return E_NOTIMPL;
103 static HRESULT WINAPI ID3DXEffectImpl_GetTechniqueDesc(ID3DXEffect* iface, D3DXHANDLE technique, D3DXTECHNIQUE_DESC* desc)
105 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
107 FIXME("(%p)->(%p, %p): stub\n", This, technique, desc);
109 return E_NOTIMPL;
112 static HRESULT WINAPI ID3DXEffectImpl_GetPassDesc(ID3DXEffect* iface, D3DXHANDLE pass, D3DXPASS_DESC* desc)
114 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
116 FIXME("(%p)->(%p, %p): stub\n", This, pass, desc);
118 return E_NOTIMPL;
121 static HRESULT WINAPI ID3DXEffectImpl_GetFunctionDesc(ID3DXEffect* iface, D3DXHANDLE shader, D3DXFUNCTION_DESC* desc)
123 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
125 FIXME("(%p)->(%p, %p): stub\n", This, shader, desc);
127 return E_NOTIMPL;
130 static D3DXHANDLE WINAPI ID3DXEffectImpl_GetParameter(ID3DXEffect* iface, D3DXHANDLE parameter, UINT index)
132 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
134 FIXME("(%p)->(%p, %u): stub\n", This, parameter, index);
136 return NULL;
139 static D3DXHANDLE WINAPI ID3DXEffectImpl_GetParameterByName(ID3DXEffect* iface, D3DXHANDLE parameter, LPCSTR name)
141 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
143 FIXME("(%p)->(%p, %s): stub\n", This, parameter, name);
145 return NULL;
148 static D3DXHANDLE WINAPI ID3DXEffectImpl_GetParameterBySemantic(ID3DXEffect* iface, D3DXHANDLE parameter, LPCSTR semantic)
150 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
152 FIXME("(%p)->(%p, %s): stub\n", This, parameter, semantic);
154 return NULL;
157 static D3DXHANDLE WINAPI ID3DXEffectImpl_GetParameterElement(ID3DXEffect* iface, D3DXHANDLE parameter, UINT index)
159 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
161 FIXME("(%p)->(%p, %u): stub\n", This, parameter, index);
163 return NULL;
166 static D3DXHANDLE WINAPI ID3DXEffectImpl_GetTechnique(ID3DXEffect* iface, UINT index)
168 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
170 FIXME("(%p)->(%u): stub\n", This, index);
172 return NULL;
175 static D3DXHANDLE WINAPI ID3DXEffectImpl_GetTechniqueByName(ID3DXEffect* iface, LPCSTR name)
177 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
179 FIXME("(%p)->(%s): stub\n", This, name);
181 return NULL;
184 static D3DXHANDLE WINAPI ID3DXEffectImpl_GetPass(ID3DXEffect* iface, D3DXHANDLE technique, UINT index)
186 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
188 FIXME("(%p)->(%p, %u): stub\n", This, technique, index);
190 return NULL;
193 static D3DXHANDLE WINAPI ID3DXEffectImpl_GetPassByName(ID3DXEffect* iface, D3DXHANDLE technique, LPCSTR name)
195 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
197 FIXME("(%p)->(%p, %s): stub\n", This, technique, name);
199 return NULL;
202 static D3DXHANDLE WINAPI ID3DXEffectImpl_GetFunction(ID3DXEffect* iface, UINT index)
204 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
206 FIXME("(%p)->(%u): stub\n", This, index);
208 return NULL;
211 static D3DXHANDLE WINAPI ID3DXEffectImpl_GetFunctionByName(ID3DXEffect* iface, LPCSTR name)
213 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
215 FIXME("(%p)->(%s): stub\n", This, name);
217 return NULL;
220 static D3DXHANDLE WINAPI ID3DXEffectImpl_GetAnnotation(ID3DXEffect* iface, D3DXHANDLE object, UINT index)
222 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
224 FIXME("(%p)->(%p, %u): stub\n", This, object, index);
226 return NULL;
229 static D3DXHANDLE WINAPI ID3DXEffectImpl_GetAnnotationByName(ID3DXEffect* iface, D3DXHANDLE object, LPCSTR name)
231 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
233 FIXME("(%p)->(%p, %s): stub\n", This, object, name);
235 return NULL;
238 static HRESULT WINAPI ID3DXEffectImpl_SetValue(ID3DXEffect* iface, D3DXHANDLE parameter, LPCVOID data, UINT bytes)
240 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
242 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, data, bytes);
244 return E_NOTIMPL;
247 static HRESULT WINAPI ID3DXEffectImpl_GetValue(ID3DXEffect* iface, D3DXHANDLE parameter, LPVOID data, UINT bytes)
249 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
251 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, data, bytes);
253 return E_NOTIMPL;
256 static HRESULT WINAPI ID3DXEffectImpl_SetBool(ID3DXEffect* iface, D3DXHANDLE parameter, BOOL b)
258 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
260 FIXME("(%p)->(%p, %u): stub\n", This, parameter, b);
262 return E_NOTIMPL;
265 static HRESULT WINAPI ID3DXEffectImpl_GetBool(ID3DXEffect* iface, D3DXHANDLE parameter, BOOL* b)
267 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
269 FIXME("(%p)->(%p, %p): stub\n", This, parameter, b);
271 return E_NOTIMPL;
274 static HRESULT WINAPI ID3DXEffectImpl_SetBoolArray(ID3DXEffect* iface, D3DXHANDLE parameter, CONST BOOL* b, UINT count)
276 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
278 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, b, count);
280 return E_NOTIMPL;
283 static HRESULT WINAPI ID3DXEffectImpl_GetBoolArray(ID3DXEffect* iface, D3DXHANDLE parameter, BOOL* b, UINT count)
285 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
287 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, b, count);
289 return E_NOTIMPL;
292 static HRESULT WINAPI ID3DXEffectImpl_SetInt(ID3DXEffect* iface, D3DXHANDLE parameter, INT n)
294 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
296 FIXME("(%p)->(%p, %d): stub\n", This, parameter, n);
298 return E_NOTIMPL;
301 static HRESULT WINAPI ID3DXEffectImpl_GetInt(ID3DXEffect* iface, D3DXHANDLE parameter, INT* n)
303 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
305 FIXME("(%p)->(%p, %p): stub\n", This, parameter, n);
307 return E_NOTIMPL;
310 static HRESULT WINAPI ID3DXEffectImpl_SetIntArray(ID3DXEffect* iface, D3DXHANDLE parameter, CONST INT* n, UINT count)
312 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
314 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, n, count);
316 return E_NOTIMPL;
319 static HRESULT WINAPI ID3DXEffectImpl_GetIntArray(ID3DXEffect* iface, D3DXHANDLE parameter, INT* n, UINT count)
321 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
323 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, n, count);
325 return E_NOTIMPL;
328 static HRESULT WINAPI ID3DXEffectImpl_SetFloat(ID3DXEffect* iface, D3DXHANDLE parameter, FLOAT f)
330 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
332 FIXME("(%p)->(%p, %f): stub\n", This, parameter, f);
334 return E_NOTIMPL;
337 static HRESULT WINAPI ID3DXEffectImpl_GetFloat(ID3DXEffect* iface, D3DXHANDLE parameter, FLOAT* f)
339 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
341 FIXME("(%p)->(%p, %p): stub\n", This, parameter, f);
343 return E_NOTIMPL;
346 static HRESULT WINAPI ID3DXEffectImpl_SetFloatArray(ID3DXEffect* iface, D3DXHANDLE parameter, CONST FLOAT* f, UINT count)
348 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
350 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, f, count);
352 return E_NOTIMPL;
355 static HRESULT WINAPI ID3DXEffectImpl_GetFloatArray(ID3DXEffect* iface, D3DXHANDLE parameter, FLOAT* f, UINT count)
357 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
359 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, f, count);
361 return E_NOTIMPL;
364 static HRESULT WINAPI ID3DXEffectImpl_SetVector(ID3DXEffect* iface, D3DXHANDLE parameter, CONST D3DXVECTOR4* vector)
366 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
368 FIXME("(%p)->(%p, %p): stub\n", This, parameter, vector);
370 return E_NOTIMPL;
373 static HRESULT WINAPI ID3DXEffectImpl_GetVector(ID3DXEffect* iface, D3DXHANDLE parameter, D3DXVECTOR4* vector)
375 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
377 FIXME("(%p)->(%p, %p): stub\n", This, parameter, vector);
379 return E_NOTIMPL;
382 static HRESULT WINAPI ID3DXEffectImpl_SetVectorArray(ID3DXEffect* iface, D3DXHANDLE parameter, CONST D3DXVECTOR4* vector, UINT count)
384 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
386 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, vector, count);
388 return E_NOTIMPL;
391 static HRESULT WINAPI ID3DXEffectImpl_GetVectorArray(ID3DXEffect* iface, D3DXHANDLE parameter, D3DXVECTOR4* vector, UINT count)
393 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
395 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, vector, count);
397 return E_NOTIMPL;
400 static HRESULT WINAPI ID3DXEffectImpl_SetMatrix(ID3DXEffect* iface, D3DXHANDLE parameter, CONST D3DXMATRIX* matrix)
402 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
404 FIXME("(%p)->(%p, %p): stub\n", This, parameter, matrix);
406 return E_NOTIMPL;
409 static HRESULT WINAPI ID3DXEffectImpl_GetMatrix(ID3DXEffect* iface, D3DXHANDLE parameter, D3DXMATRIX* matrix)
411 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
413 FIXME("(%p)->(%p, %p): stub\n", This, parameter, matrix);
415 return E_NOTIMPL;
418 static HRESULT WINAPI ID3DXEffectImpl_SetMatrixArray(ID3DXEffect* iface, D3DXHANDLE parameter, CONST D3DXMATRIX* matrix, UINT count)
420 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
422 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, matrix, count);
424 return E_NOTIMPL;
427 static HRESULT WINAPI ID3DXEffectImpl_GetMatrixArray(ID3DXEffect* iface, D3DXHANDLE parameter, D3DXMATRIX* matrix, UINT count)
429 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
431 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, matrix, count);
433 return E_NOTIMPL;
436 static HRESULT WINAPI ID3DXEffectImpl_SetMatrixPointerArray(ID3DXEffect* iface, D3DXHANDLE parameter, CONST D3DXMATRIX** matrix, UINT count)
438 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
440 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, matrix, count);
442 return E_NOTIMPL;
445 static HRESULT WINAPI ID3DXEffectImpl_GetMatrixPointerArray(ID3DXEffect* iface, D3DXHANDLE parameter, D3DXMATRIX** matrix, UINT count)
447 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
449 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, matrix, count);
451 return E_NOTIMPL;
454 static HRESULT WINAPI ID3DXEffectImpl_SetMatrixTranspose(ID3DXEffect* iface, D3DXHANDLE parameter, CONST D3DXMATRIX* matrix)
456 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
458 FIXME("(%p)->(%p, %p): stub\n", This, parameter, matrix);
460 return E_NOTIMPL;
463 static HRESULT WINAPI ID3DXEffectImpl_GetMatrixTranspose(ID3DXEffect* iface, D3DXHANDLE parameter, D3DXMATRIX* matrix)
465 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
467 FIXME("(%p)->(%p, %p): stub\n", This, parameter, matrix);
469 return E_NOTIMPL;
472 static HRESULT WINAPI ID3DXEffectImpl_SetMatrixTransposeArray(ID3DXEffect* iface, D3DXHANDLE parameter, CONST D3DXMATRIX* matrix, UINT count)
474 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
476 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, matrix, count);
478 return E_NOTIMPL;
481 static HRESULT WINAPI ID3DXEffectImpl_GetMatrixTransposeArray(ID3DXEffect* iface, D3DXHANDLE parameter, D3DXMATRIX* matrix, UINT count)
483 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
485 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, matrix, count);
487 return E_NOTIMPL;
490 static HRESULT WINAPI ID3DXEffectImpl_SetMatrixTransposePointerArray(ID3DXEffect* iface, D3DXHANDLE parameter, CONST D3DXMATRIX** matrix, UINT count)
492 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
494 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, matrix, count);
496 return E_NOTIMPL;
499 static HRESULT WINAPI ID3DXEffectImpl_GetMatrixTransposePointerArray(ID3DXEffect* iface, D3DXHANDLE parameter, D3DXMATRIX** matrix, UINT count)
501 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
503 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, matrix, count);
505 return E_NOTIMPL;
508 static HRESULT WINAPI ID3DXEffectImpl_SetString(ID3DXEffect* iface, D3DXHANDLE parameter, LPCSTR string)
510 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
512 FIXME("(%p)->(%p, %p): stub\n", This, parameter, string);
514 return E_NOTIMPL;
517 static HRESULT WINAPI ID3DXEffectImpl_GetString(ID3DXEffect* iface, D3DXHANDLE parameter, LPCSTR* string)
519 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
521 FIXME("(%p)->(%p, %p): stub\n", This, parameter, string);
523 return E_NOTIMPL;
526 static HRESULT WINAPI ID3DXEffectImpl_SetTexture(ID3DXEffect* iface, D3DXHANDLE parameter, LPDIRECT3DBASETEXTURE9 texture)
528 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
530 FIXME("(%p)->(%p, %p): stub\n", This, parameter, texture);
532 return E_NOTIMPL;
535 static HRESULT WINAPI ID3DXEffectImpl_GetTexture(ID3DXEffect* iface, D3DXHANDLE parameter, LPDIRECT3DBASETEXTURE9* texture)
537 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
539 FIXME("(%p)->(%p, %p): stub\n", This, parameter, texture);
541 return E_NOTIMPL;
544 static HRESULT WINAPI ID3DXEffectImpl_GetPixelShader(ID3DXEffect* iface, D3DXHANDLE parameter, LPDIRECT3DPIXELSHADER9* pshader)
546 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
548 FIXME("(%p)->(%p, %p): stub\n", This, parameter, pshader);
550 return E_NOTIMPL;
553 static HRESULT WINAPI ID3DXEffectImpl_GetVertexShader(ID3DXEffect* iface, D3DXHANDLE parameter, LPDIRECT3DVERTEXSHADER9* vshader)
555 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
557 FIXME("(%p)->(%p, %p): stub\n", This, parameter, vshader);
559 return E_NOTIMPL;
562 static HRESULT WINAPI ID3DXEffectImpl_SetArrayRange(ID3DXEffect* iface, D3DXHANDLE parameter, UINT start, UINT end)
564 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
566 FIXME("(%p)->(%p, %u, %u): stub\n", This, parameter, start, end);
568 return E_NOTIMPL;
571 /*** ID3DXEffect methods ***/
572 static HRESULT WINAPI ID3DXEffectImpl_GetPool(ID3DXEffect* iface, LPD3DXEFFECTPOOL* pool)
574 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
576 FIXME("(%p)->(%p): stub\n", This, pool);
578 return E_NOTIMPL;
581 static HRESULT WINAPI ID3DXEffectImpl_SetTechnique(ID3DXEffect* iface, D3DXHANDLE technique)
583 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
585 FIXME("(%p)->(%p): stub\n", This, technique);
587 return E_NOTIMPL;
590 static D3DXHANDLE WINAPI ID3DXEffectImpl_GetCurrentTechnique(ID3DXEffect* iface)
592 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
594 FIXME("(%p)->(): stub\n", This);
596 return NULL;
599 static HRESULT WINAPI ID3DXEffectImpl_ValidateTechnique(ID3DXEffect* iface, D3DXHANDLE technique)
601 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
603 FIXME("(%p)->(%p): stub\n", This, technique);
605 return D3D_OK;
608 static HRESULT WINAPI ID3DXEffectImpl_FindNextValidTechnique(ID3DXEffect* iface, D3DXHANDLE technique, D3DXHANDLE* next_technique)
610 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
612 FIXME("(%p)->(%p, %p): stub\n", This, technique, next_technique);
614 return E_NOTIMPL;
617 static BOOL WINAPI ID3DXEffectImpl_IsParameterUsed(ID3DXEffect* iface, D3DXHANDLE parameter, D3DXHANDLE technique)
619 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
621 FIXME("(%p)->(%p, %p): stub\n", This, parameter, technique);
623 return FALSE;
626 static HRESULT WINAPI ID3DXEffectImpl_Begin(ID3DXEffect* iface, UINT *passes, DWORD flags)
628 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
630 FIXME("(%p)->(%p, %#x): stub\n", This, passes, flags);
632 return E_NOTIMPL;
635 static HRESULT WINAPI ID3DXEffectImpl_BeginPass(ID3DXEffect* iface, UINT pass)
637 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
639 FIXME("(%p)->(%u): stub\n", This, pass);
641 return E_NOTIMPL;
644 static HRESULT WINAPI ID3DXEffectImpl_CommitChanges(ID3DXEffect* iface)
646 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
648 FIXME("(%p)->(): stub\n", This);
650 return E_NOTIMPL;
653 static HRESULT WINAPI ID3DXEffectImpl_EndPass(ID3DXEffect* iface)
655 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
657 FIXME("(%p)->(): stub\n", This);
659 return E_NOTIMPL;
662 static HRESULT WINAPI ID3DXEffectImpl_End(ID3DXEffect* iface)
664 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
666 FIXME("(%p)->(): stub\n", This);
668 return E_NOTIMPL;
671 static HRESULT WINAPI ID3DXEffectImpl_GetDevice(ID3DXEffect* iface, LPDIRECT3DDEVICE9* device)
673 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
675 FIXME("(%p)->(%p): stub\n", This, device);
677 return E_NOTIMPL;
680 static HRESULT WINAPI ID3DXEffectImpl_OnLostDevice(ID3DXEffect* iface)
682 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
684 FIXME("(%p)->(): stub\n", This);
686 return E_NOTIMPL;
689 static HRESULT WINAPI ID3DXEffectImpl_OnResetDevice(ID3DXEffect* iface)
691 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
693 FIXME("(%p)->(): stub\n", This);
695 return E_NOTIMPL;
698 static HRESULT WINAPI ID3DXEffectImpl_SetStateManager(ID3DXEffect* iface, LPD3DXEFFECTSTATEMANAGER manager)
700 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
702 FIXME("(%p)->(%p): stub\n", This, manager);
704 return E_NOTIMPL;
707 static HRESULT WINAPI ID3DXEffectImpl_GetStateManager(ID3DXEffect* iface, LPD3DXEFFECTSTATEMANAGER* manager)
709 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
711 FIXME("(%p)->(%p): stub\n", This, manager);
713 return E_NOTIMPL;
716 static HRESULT WINAPI ID3DXEffectImpl_BeginParameterBlock(ID3DXEffect* iface)
718 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
720 FIXME("(%p)->(): stub\n", This);
722 return E_NOTIMPL;
725 static D3DXHANDLE WINAPI ID3DXEffectImpl_EndParameterBlock(ID3DXEffect* iface)
727 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
729 FIXME("(%p)->(): stub\n", This);
731 return NULL;
734 static HRESULT WINAPI ID3DXEffectImpl_ApplyParameterBlock(ID3DXEffect* iface, D3DXHANDLE parameter_block)
736 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
738 FIXME("(%p)->(%p): stub\n", This, parameter_block);
740 return E_NOTIMPL;
743 static HRESULT WINAPI ID3DXEffectImpl_DeleteParameterBlock(ID3DXEffect* iface, D3DXHANDLE parameter_block)
745 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
747 FIXME("(%p)->(%p): stub\n", This, parameter_block);
749 return E_NOTIMPL;
752 static HRESULT WINAPI ID3DXEffectImpl_CloneEffect(ID3DXEffect* iface, LPDIRECT3DDEVICE9 device, LPD3DXEFFECT* effect)
754 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
756 FIXME("(%p)->(%p, %p): stub\n", This, device, effect);
758 return E_NOTIMPL;
761 static HRESULT WINAPI ID3DXEffectImpl_SetRawValue(ID3DXEffect* iface, D3DXHANDLE parameter, LPCVOID data, UINT byte_offset, UINT bytes)
763 ID3DXEffectImpl *This = impl_from_ID3DXEffect(iface);
765 FIXME("(%p)->(%p, %p, %u, %u): stub\n", This, parameter, data, byte_offset, bytes);
767 return E_NOTIMPL;
770 static const struct ID3DXEffectVtbl ID3DXEffect_Vtbl =
772 /*** IUnknown methods ***/
773 ID3DXEffectImpl_QueryInterface,
774 ID3DXEffectImpl_AddRef,
775 ID3DXEffectImpl_Release,
776 /*** ID3DXBaseEffect methods ***/
777 ID3DXEffectImpl_GetDesc,
778 ID3DXEffectImpl_GetParameterDesc,
779 ID3DXEffectImpl_GetTechniqueDesc,
780 ID3DXEffectImpl_GetPassDesc,
781 ID3DXEffectImpl_GetFunctionDesc,
782 ID3DXEffectImpl_GetParameter,
783 ID3DXEffectImpl_GetParameterByName,
784 ID3DXEffectImpl_GetParameterBySemantic,
785 ID3DXEffectImpl_GetParameterElement,
786 ID3DXEffectImpl_GetTechnique,
787 ID3DXEffectImpl_GetTechniqueByName,
788 ID3DXEffectImpl_GetPass,
789 ID3DXEffectImpl_GetPassByName,
790 ID3DXEffectImpl_GetFunction,
791 ID3DXEffectImpl_GetFunctionByName,
792 ID3DXEffectImpl_GetAnnotation,
793 ID3DXEffectImpl_GetAnnotationByName,
794 ID3DXEffectImpl_SetValue,
795 ID3DXEffectImpl_GetValue,
796 ID3DXEffectImpl_SetBool,
797 ID3DXEffectImpl_GetBool,
798 ID3DXEffectImpl_SetBoolArray,
799 ID3DXEffectImpl_GetBoolArray,
800 ID3DXEffectImpl_SetInt,
801 ID3DXEffectImpl_GetInt,
802 ID3DXEffectImpl_SetIntArray,
803 ID3DXEffectImpl_GetIntArray,
804 ID3DXEffectImpl_SetFloat,
805 ID3DXEffectImpl_GetFloat,
806 ID3DXEffectImpl_SetFloatArray,
807 ID3DXEffectImpl_GetFloatArray,
808 ID3DXEffectImpl_SetVector,
809 ID3DXEffectImpl_GetVector,
810 ID3DXEffectImpl_SetVectorArray,
811 ID3DXEffectImpl_GetVectorArray,
812 ID3DXEffectImpl_SetMatrix,
813 ID3DXEffectImpl_GetMatrix,
814 ID3DXEffectImpl_SetMatrixArray,
815 ID3DXEffectImpl_GetMatrixArray,
816 ID3DXEffectImpl_SetMatrixPointerArray,
817 ID3DXEffectImpl_GetMatrixPointerArray,
818 ID3DXEffectImpl_SetMatrixTranspose,
819 ID3DXEffectImpl_GetMatrixTranspose,
820 ID3DXEffectImpl_SetMatrixTransposeArray,
821 ID3DXEffectImpl_GetMatrixTransposeArray,
822 ID3DXEffectImpl_SetMatrixTransposePointerArray,
823 ID3DXEffectImpl_GetMatrixTransposePointerArray,
824 ID3DXEffectImpl_SetString,
825 ID3DXEffectImpl_GetString,
826 ID3DXEffectImpl_SetTexture,
827 ID3DXEffectImpl_GetTexture,
828 ID3DXEffectImpl_GetPixelShader,
829 ID3DXEffectImpl_GetVertexShader,
830 ID3DXEffectImpl_SetArrayRange,
831 /*** ID3DXEffect methods ***/
832 ID3DXEffectImpl_GetPool,
833 ID3DXEffectImpl_SetTechnique,
834 ID3DXEffectImpl_GetCurrentTechnique,
835 ID3DXEffectImpl_ValidateTechnique,
836 ID3DXEffectImpl_FindNextValidTechnique,
837 ID3DXEffectImpl_IsParameterUsed,
838 ID3DXEffectImpl_Begin,
839 ID3DXEffectImpl_BeginPass,
840 ID3DXEffectImpl_CommitChanges,
841 ID3DXEffectImpl_EndPass,
842 ID3DXEffectImpl_End,
843 ID3DXEffectImpl_GetDevice,
844 ID3DXEffectImpl_OnLostDevice,
845 ID3DXEffectImpl_OnResetDevice,
846 ID3DXEffectImpl_SetStateManager,
847 ID3DXEffectImpl_GetStateManager,
848 ID3DXEffectImpl_BeginParameterBlock,
849 ID3DXEffectImpl_EndParameterBlock,
850 ID3DXEffectImpl_ApplyParameterBlock,
851 ID3DXEffectImpl_DeleteParameterBlock,
852 ID3DXEffectImpl_CloneEffect,
853 ID3DXEffectImpl_SetRawValue
856 HRESULT WINAPI D3DXCreateEffectEx(LPDIRECT3DDEVICE9 device,
857 LPCVOID srcdata,
858 UINT srcdatalen,
859 CONST D3DXMACRO* defines,
860 LPD3DXINCLUDE include,
861 LPCSTR skip_constants,
862 DWORD flags,
863 LPD3DXEFFECTPOOL pool,
864 LPD3DXEFFECT* effect,
865 LPD3DXBUFFER* compilation_errors)
867 ID3DXEffectImpl* object;
869 FIXME("(%p, %p, %u, %p, %p, %p, %#x, %p, %p, %p): semi-stub\n", device, srcdata, srcdatalen, defines, include,
870 skip_constants, flags, pool, effect, compilation_errors);
872 if (!device || !srcdata)
873 return D3DERR_INVALIDCALL;
875 if (!srcdatalen)
876 return E_FAIL;
878 /* Native dll allows effect to be null so just return D3D_OK after doing basic checks */
879 if (!effect)
880 return D3D_OK;
882 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(ID3DXEffectImpl));
883 if (!object)
885 ERR("Out of memory\n");
886 return E_OUTOFMEMORY;
889 object->ID3DXEffect_iface.lpVtbl = &ID3DXEffect_Vtbl;
890 object->ref = 1;
892 *effect = &object->ID3DXEffect_iface;
894 return D3D_OK;
897 HRESULT WINAPI D3DXCreateEffect(LPDIRECT3DDEVICE9 device,
898 LPCVOID srcdata,
899 UINT srcdatalen,
900 CONST D3DXMACRO* defines,
901 LPD3DXINCLUDE include,
902 DWORD flags,
903 LPD3DXEFFECTPOOL pool,
904 LPD3DXEFFECT* effect,
905 LPD3DXBUFFER* compilation_errors)
907 TRACE("(%p, %p, %u, %p, %p, %#x, %p, %p, %p): Forwarded to D3DXCreateEffectEx\n", device, srcdata, srcdatalen, defines,
908 include, flags, pool, effect, compilation_errors);
910 return D3DXCreateEffectEx(device, srcdata, srcdatalen, defines, include, NULL, flags, pool, effect, compilation_errors);
913 HRESULT WINAPI D3DXCreateEffectCompiler(LPCSTR srcdata,
914 UINT srcdatalen,
915 CONST D3DXMACRO* defines,
916 LPD3DXINCLUDE include,
917 DWORD flags,
918 LPD3DXEFFECTCOMPILER* compiler,
919 LPD3DXBUFFER* parse_errors)
921 FIXME("(%p, %u, %p, %p, %#x, %p, %p): stub\n", srcdata, srcdatalen, defines, include, flags, compiler, parse_errors);
923 return E_NOTIMPL;
926 static const struct ID3DXEffectPoolVtbl ID3DXEffectPool_Vtbl;
928 typedef struct ID3DXEffectPoolImpl {
929 const ID3DXEffectPoolVtbl *lpVtbl;
930 LONG ref;
931 } ID3DXEffectPoolImpl;
933 /*** IUnknown methods ***/
934 static HRESULT WINAPI ID3DXEffectPoolImpl_QueryInterface(ID3DXEffectPool* iface, REFIID riid, void** object)
936 ID3DXEffectPoolImpl *This = (ID3DXEffectPoolImpl *)iface;
938 TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid), object);
940 if (IsEqualGUID(riid, &IID_IUnknown) ||
941 IsEqualGUID(riid, &IID_ID3DXEffectPool))
943 This->lpVtbl->AddRef(iface);
944 *object = This;
945 return S_OK;
948 WARN("Interface %s not found\n", debugstr_guid(riid));
950 return E_NOINTERFACE;
953 static ULONG WINAPI ID3DXEffectPoolImpl_AddRef(ID3DXEffectPool* iface)
955 ID3DXEffectPoolImpl *This = (ID3DXEffectPoolImpl *)iface;
957 TRACE("(%p)->(): AddRef from %u\n", This, This->ref);
959 return InterlockedIncrement(&This->ref);
962 static ULONG WINAPI ID3DXEffectPoolImpl_Release(ID3DXEffectPool* iface)
964 ID3DXEffectPoolImpl *This = (ID3DXEffectPoolImpl *)iface;
965 ULONG ref = InterlockedDecrement(&This->ref);
967 TRACE("(%p)->(): Release from %u\n", This, ref + 1);
969 if (!ref)
970 HeapFree(GetProcessHeap(), 0, This);
972 return ref;
975 static const struct ID3DXEffectPoolVtbl ID3DXEffectPool_Vtbl =
977 /*** IUnknown methods ***/
978 ID3DXEffectPoolImpl_QueryInterface,
979 ID3DXEffectPoolImpl_AddRef,
980 ID3DXEffectPoolImpl_Release
983 HRESULT WINAPI D3DXCreateEffectPool(LPD3DXEFFECTPOOL* pool)
985 ID3DXEffectPoolImpl* object;
987 TRACE("(%p)\n", pool);
989 if (!pool)
990 return D3DERR_INVALIDCALL;
992 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(ID3DXEffectImpl));
993 if (!object)
995 ERR("Out of memory\n");
996 return E_OUTOFMEMORY;
999 object->lpVtbl = &ID3DXEffectPool_Vtbl;
1000 object->ref = 1;
1002 *pool = (LPD3DXEFFECTPOOL)object;
1004 return S_OK;
1007 HRESULT WINAPI D3DXCreateEffectFromFileExW(LPDIRECT3DDEVICE9 device, LPCWSTR srcfile,
1008 const D3DXMACRO *defines, LPD3DXINCLUDE include, LPCSTR skipconstants, DWORD flags,
1009 LPD3DXEFFECTPOOL pool, LPD3DXEFFECT *effect, LPD3DXBUFFER *compilationerrors)
1011 LPVOID buffer;
1012 HRESULT ret;
1013 DWORD size;
1015 TRACE("(%s): relay\n", debugstr_w(srcfile));
1017 if (!device || !srcfile || !defines)
1018 return D3DERR_INVALIDCALL;
1020 ret = map_view_of_file(srcfile, &buffer, &size);
1022 if (FAILED(ret))
1023 return D3DXERR_INVALIDDATA;
1025 ret = D3DXCreateEffectEx(device, buffer, size, defines, include, skipconstants, flags, pool, effect, compilationerrors);
1026 UnmapViewOfFile(buffer);
1028 return ret;
1031 HRESULT WINAPI D3DXCreateEffectFromFileExA(LPDIRECT3DDEVICE9 device, LPCSTR srcfile,
1032 const D3DXMACRO *defines, LPD3DXINCLUDE include, LPCSTR skipconstants, DWORD flags,
1033 LPD3DXEFFECTPOOL pool, LPD3DXEFFECT *effect, LPD3DXBUFFER *compilationerrors)
1035 LPWSTR srcfileW;
1036 HRESULT ret;
1037 DWORD len;
1039 TRACE("(void): relay\n");
1041 if (!srcfile || !defines)
1042 return D3DERR_INVALIDCALL;
1044 len = MultiByteToWideChar(CP_ACP, 0, srcfile, -1, NULL, 0);
1045 srcfileW = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len * sizeof(WCHAR));
1046 MultiByteToWideChar(CP_ACP, 0, srcfile, -1, srcfileW, len);
1048 ret = D3DXCreateEffectFromFileExW(device, srcfileW, defines, include, skipconstants, flags, pool, effect, compilationerrors);
1049 HeapFree(GetProcessHeap(), 0, srcfileW);
1051 return ret;
1054 HRESULT WINAPI D3DXCreateEffectFromFileW(LPDIRECT3DDEVICE9 device, LPCWSTR srcfile,
1055 const D3DXMACRO *defines, LPD3DXINCLUDE include, DWORD flags, LPD3DXEFFECTPOOL pool,
1056 LPD3DXEFFECT *effect, LPD3DXBUFFER *compilationerrors)
1058 TRACE("(void): relay\n");
1059 return D3DXCreateEffectFromFileExW(device, srcfile, defines, include, NULL, flags, pool, effect, compilationerrors);
1062 HRESULT WINAPI D3DXCreateEffectFromFileA(LPDIRECT3DDEVICE9 device, LPCSTR srcfile,
1063 const D3DXMACRO *defines, LPD3DXINCLUDE include, DWORD flags, LPD3DXEFFECTPOOL pool,
1064 LPD3DXEFFECT *effect, LPD3DXBUFFER *compilationerrors)
1066 TRACE("(void): relay\n");
1067 return D3DXCreateEffectFromFileExA(device, srcfile, defines, include, NULL, flags, pool, effect, compilationerrors);
1070 HRESULT WINAPI D3DXCreateEffectFromResourceExW(LPDIRECT3DDEVICE9 device, HMODULE srcmodule, LPCWSTR srcresource,
1071 const D3DXMACRO *defines, LPD3DXINCLUDE include, LPCSTR skipconstants, DWORD flags,
1072 LPD3DXEFFECTPOOL pool, LPD3DXEFFECT *effect, LPD3DXBUFFER *compilationerrors)
1074 HRSRC resinfo;
1076 TRACE("(%p, %s): relay\n", srcmodule, debugstr_w(srcresource));
1078 if (!device || !defines)
1079 return D3DERR_INVALIDCALL;
1081 resinfo = FindResourceW(srcmodule, srcresource, (LPCWSTR) RT_RCDATA);
1083 if (resinfo)
1085 LPVOID buffer;
1086 HRESULT ret;
1087 DWORD size;
1089 ret = load_resource_into_memory(srcmodule, resinfo, &buffer, &size);
1091 if (FAILED(ret))
1092 return D3DXERR_INVALIDDATA;
1094 return D3DXCreateEffectEx(device, buffer, size, defines, include, skipconstants, flags, pool, effect, compilationerrors);
1097 return D3DXERR_INVALIDDATA;
1100 HRESULT WINAPI D3DXCreateEffectFromResourceExA(LPDIRECT3DDEVICE9 device, HMODULE srcmodule, LPCSTR srcresource,
1101 const D3DXMACRO *defines, LPD3DXINCLUDE include, LPCSTR skipconstants, DWORD flags,
1102 LPD3DXEFFECTPOOL pool, LPD3DXEFFECT *effect, LPD3DXBUFFER *compilationerrors)
1104 HRSRC resinfo;
1106 TRACE("(%p, %s): relay\n", srcmodule, debugstr_a(srcresource));
1108 if (!device || !defines)
1109 return D3DERR_INVALIDCALL;
1111 resinfo = FindResourceA(srcmodule, srcresource, (LPCSTR) RT_RCDATA);
1113 if (resinfo)
1115 LPVOID buffer;
1116 HRESULT ret;
1117 DWORD size;
1119 ret = load_resource_into_memory(srcmodule, resinfo, &buffer, &size);
1121 if (FAILED(ret))
1122 return D3DXERR_INVALIDDATA;
1124 return D3DXCreateEffectEx(device, buffer, size, defines, include, skipconstants, flags, pool, effect, compilationerrors);
1127 return D3DXERR_INVALIDDATA;
1130 HRESULT WINAPI D3DXCreateEffectFromResourceW(LPDIRECT3DDEVICE9 device, HMODULE srcmodule, LPCWSTR srcresource,
1131 const D3DXMACRO *defines, LPD3DXINCLUDE include, DWORD flags, LPD3DXEFFECTPOOL pool,
1132 LPD3DXEFFECT *effect, LPD3DXBUFFER *compilationerrors)
1134 TRACE("(void): relay\n");
1135 return D3DXCreateEffectFromResourceExW(device, srcmodule, srcresource, defines, include, NULL, flags, pool, effect, compilationerrors);
1138 HRESULT WINAPI D3DXCreateEffectFromResourceA(LPDIRECT3DDEVICE9 device, HMODULE srcmodule, LPCSTR srcresource,
1139 const D3DXMACRO *defines, LPD3DXINCLUDE include, DWORD flags, LPD3DXEFFECTPOOL pool,
1140 LPD3DXEFFECT *effect, LPD3DXBUFFER *compilationerrors)
1142 TRACE("(void): relay\n");
1143 return D3DXCreateEffectFromResourceExA(device, srcmodule, srcresource, defines, include, NULL, flags, pool, effect, compilationerrors);
1146 HRESULT WINAPI D3DXCreateEffectCompilerFromFileW(LPCWSTR srcfile, const D3DXMACRO *defines, LPD3DXINCLUDE include,
1147 DWORD flags, LPD3DXEFFECTCOMPILER *effectcompiler, LPD3DXBUFFER *parseerrors)
1149 LPVOID buffer;
1150 HRESULT ret;
1151 DWORD size;
1153 TRACE("(%s): relay\n", debugstr_w(srcfile));
1155 if (!srcfile || !defines)
1156 return D3DERR_INVALIDCALL;
1158 ret = map_view_of_file(srcfile, &buffer, &size);
1160 if (FAILED(ret))
1161 return D3DXERR_INVALIDDATA;
1163 ret = D3DXCreateEffectCompiler(buffer, size, defines, include, flags, effectcompiler, parseerrors);
1164 UnmapViewOfFile(buffer);
1166 return ret;
1169 HRESULT WINAPI D3DXCreateEffectCompilerFromFileA(LPCSTR srcfile, const D3DXMACRO *defines, LPD3DXINCLUDE include,
1170 DWORD flags, LPD3DXEFFECTCOMPILER *effectcompiler, LPD3DXBUFFER *parseerrors)
1172 LPWSTR srcfileW;
1173 HRESULT ret;
1174 DWORD len;
1176 TRACE("(void): relay\n");
1178 if (!srcfile || !defines)
1179 return D3DERR_INVALIDCALL;
1181 len = MultiByteToWideChar(CP_ACP, 0, srcfile, -1, NULL, 0);
1182 srcfileW = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len * sizeof(WCHAR));
1183 MultiByteToWideChar(CP_ACP, 0, srcfile, -1, srcfileW, len);
1185 ret = D3DXCreateEffectCompilerFromFileW(srcfileW, defines, include, flags, effectcompiler, parseerrors);
1186 HeapFree(GetProcessHeap(), 0, srcfileW);
1188 return ret;
1191 HRESULT WINAPI D3DXCreateEffectCompilerFromResourceA(HMODULE srcmodule, LPCSTR srcresource, const D3DXMACRO *defines,
1192 LPD3DXINCLUDE include, DWORD flags, LPD3DXEFFECTCOMPILER *effectcompiler, LPD3DXBUFFER *parseerrors)
1194 HRSRC resinfo;
1196 TRACE("(%p, %s): relay\n", srcmodule, debugstr_a(srcresource));
1198 resinfo = FindResourceA(srcmodule, srcresource, (LPCSTR) RT_RCDATA);
1200 if (resinfo)
1202 LPVOID buffer;
1203 HRESULT ret;
1204 DWORD size;
1206 ret = load_resource_into_memory(srcmodule, resinfo, &buffer, &size);
1208 if (FAILED(ret))
1209 return D3DXERR_INVALIDDATA;
1211 return D3DXCreateEffectCompiler(buffer, size, defines, include, flags, effectcompiler, parseerrors);
1214 return D3DXERR_INVALIDDATA;
1217 HRESULT WINAPI D3DXCreateEffectCompilerFromResourceW(HMODULE srcmodule, LPCWSTR srcresource, const D3DXMACRO *defines,
1218 LPD3DXINCLUDE include, DWORD flags, LPD3DXEFFECTCOMPILER *effectcompiler, LPD3DXBUFFER *parseerrors)
1220 HRSRC resinfo;
1222 TRACE("(%p, %s): relay\n", srcmodule, debugstr_w(srcresource));
1224 resinfo = FindResourceW(srcmodule, srcresource, (LPCWSTR) RT_RCDATA);
1226 if (resinfo)
1228 LPVOID buffer;
1229 HRESULT ret;
1230 DWORD size;
1232 ret = load_resource_into_memory(srcmodule, resinfo, &buffer, &size);
1234 if (FAILED(ret))
1235 return D3DXERR_INVALIDDATA;
1237 return D3DXCreateEffectCompiler(buffer, size, defines, include, flags, effectcompiler, parseerrors);
1240 return D3DXERR_INVALIDDATA;