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
20 #include "wine/port.h"
21 #include "wine/debug.h"
22 #include "wine/unicode.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 const ID3DXEffectVtbl *lpVtbl;
36 /*** IUnknown methods ***/
37 static HRESULT WINAPI ID3DXEffectImpl_QueryInterface(ID3DXEffect* iface, REFIID riid, void** object)
39 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
41 TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid), object);
43 if (IsEqualGUID(riid, &IID_IUnknown) ||
44 IsEqualGUID(riid, &IID_ID3DXBaseEffect) ||
45 IsEqualGUID(riid, &IID_ID3DXEffect))
47 This->lpVtbl->AddRef(iface);
52 ERR("Interface %s not found\n", debugstr_guid(riid));
57 static ULONG WINAPI ID3DXEffectImpl_AddRef(ID3DXEffect* iface)
59 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
61 TRACE("(%p)->(): AddRef from %u\n", This, This->ref);
63 return InterlockedIncrement(&This->ref);
66 static ULONG WINAPI ID3DXEffectImpl_Release(ID3DXEffect* iface)
68 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
69 ULONG ref = InterlockedDecrement(&This->ref);
71 TRACE("(%p)->(): Release from %u\n", This, ref + 1);
74 HeapFree(GetProcessHeap(), 0, This);
79 /*** ID3DXBaseEffect methods ***/
80 static HRESULT WINAPI ID3DXEffectImpl_GetDesc(ID3DXEffect* iface, D3DXEFFECT_DESC* desc)
82 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
84 FIXME("(%p)->(%p): stub\n", This, desc);
89 static HRESULT WINAPI ID3DXEffectImpl_GetParameterDesc(ID3DXEffect* iface, D3DXHANDLE parameter, D3DXPARAMETER_DESC* desc)
91 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
93 FIXME("(%p)->(%p, %p): stub\n", This, parameter, desc);
98 static HRESULT WINAPI ID3DXEffectImpl_GetTechniqueDesc(ID3DXEffect* iface, D3DXHANDLE technique, D3DXTECHNIQUE_DESC* desc)
100 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
102 FIXME("(%p)->(%p, %p): stub\n", This, technique, desc);
107 static HRESULT WINAPI ID3DXEffectImpl_GetPassDesc(ID3DXEffect* iface, D3DXHANDLE pass, D3DXPASS_DESC* desc)
109 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
111 FIXME("(%p)->(%p, %p): stub\n", This, pass, desc);
116 static HRESULT WINAPI ID3DXEffectImpl_GetFunctionDesc(ID3DXEffect* iface, D3DXHANDLE shader, D3DXFUNCTION_DESC* desc)
118 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
120 FIXME("(%p)->(%p, %p): stub\n", This, shader, desc);
125 static D3DXHANDLE WINAPI ID3DXEffectImpl_GetParameter(ID3DXEffect* iface, D3DXHANDLE parameter, UINT index)
127 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
129 FIXME("(%p)->(%p, %u): stub\n", This, parameter, index);
134 static D3DXHANDLE WINAPI ID3DXEffectImpl_GetParameterByName(ID3DXEffect* iface, D3DXHANDLE parameter, LPCSTR name)
136 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
138 FIXME("(%p)->(%p, %s): stub\n", This, parameter, name);
143 static D3DXHANDLE WINAPI ID3DXEffectImpl_GetParameterBySemantic(ID3DXEffect* iface, D3DXHANDLE parameter, LPCSTR semantic)
145 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
147 FIXME("(%p)->(%p, %s): stub\n", This, parameter, semantic);
152 static D3DXHANDLE WINAPI ID3DXEffectImpl_GetParameterElement(ID3DXEffect* iface, D3DXHANDLE parameter, UINT index)
154 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
156 FIXME("(%p)->(%p, %u): stub\n", This, parameter, index);
161 static D3DXHANDLE WINAPI ID3DXEffectImpl_GetTechnique(ID3DXEffect* iface, UINT index)
163 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
165 FIXME("(%p)->(%u): stub\n", This, index);
170 static D3DXHANDLE WINAPI ID3DXEffectImpl_GetTechniqueByName(ID3DXEffect* iface, LPCSTR name)
172 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
174 FIXME("(%p)->(%s): stub\n", This, name);
179 static D3DXHANDLE WINAPI ID3DXEffectImpl_GetPass(ID3DXEffect* iface, D3DXHANDLE technique, UINT index)
181 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
183 FIXME("(%p)->(%p, %u): stub\n", This, technique, index);
188 static D3DXHANDLE WINAPI ID3DXEffectImpl_GetPassByName(ID3DXEffect* iface, D3DXHANDLE technique, LPCSTR name)
190 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
192 FIXME("(%p)->(%p, %s): stub\n", This, technique, name);
197 static D3DXHANDLE WINAPI ID3DXEffectImpl_GetFunction(ID3DXEffect* iface, UINT index)
199 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
201 FIXME("(%p)->(%u): stub\n", This, index);
206 static D3DXHANDLE WINAPI ID3DXEffectImpl_GetFunctionByName(ID3DXEffect* iface, LPCSTR name)
208 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
210 FIXME("(%p)->(%s): stub\n", This, name);
215 static D3DXHANDLE WINAPI ID3DXEffectImpl_GetAnnotation(ID3DXEffect* iface, D3DXHANDLE object, UINT index)
217 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
219 FIXME("(%p)->(%p, %u): stub\n", This, object, index);
224 static D3DXHANDLE WINAPI ID3DXEffectImpl_GetAnnotationByName(ID3DXEffect* iface, D3DXHANDLE object, LPCSTR name)
226 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
228 FIXME("(%p)->(%p, %s): stub\n", This, object, name);
233 static HRESULT WINAPI ID3DXEffectImpl_SetValue(ID3DXEffect* iface, D3DXHANDLE parameter, LPCVOID data, UINT bytes)
235 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
237 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, data, bytes);
242 static HRESULT WINAPI ID3DXEffectImpl_GetValue(ID3DXEffect* iface, D3DXHANDLE parameter, LPVOID data, UINT bytes)
244 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
246 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, data, bytes);
251 static HRESULT WINAPI ID3DXEffectImpl_SetBool(ID3DXEffect* iface, D3DXHANDLE parameter, BOOL b)
253 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
255 FIXME("(%p)->(%p, %u): stub\n", This, parameter, b);
260 static HRESULT WINAPI ID3DXEffectImpl_GetBool(ID3DXEffect* iface, D3DXHANDLE parameter, BOOL* b)
262 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
264 FIXME("(%p)->(%p, %p): stub\n", This, parameter, b);
269 static HRESULT WINAPI ID3DXEffectImpl_SetBoolArray(ID3DXEffect* iface, D3DXHANDLE parameter, CONST BOOL* b, UINT count)
271 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
273 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, b, count);
278 static HRESULT WINAPI ID3DXEffectImpl_GetBoolArray(ID3DXEffect* iface, D3DXHANDLE parameter, BOOL* b, UINT count)
280 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
282 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, b, count);
287 static HRESULT WINAPI ID3DXEffectImpl_SetInt(ID3DXEffect* iface, D3DXHANDLE parameter, INT n)
289 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
291 FIXME("(%p)->(%p, %d): stub\n", This, parameter, n);
296 static HRESULT WINAPI ID3DXEffectImpl_GetInt(ID3DXEffect* iface, D3DXHANDLE parameter, INT* n)
298 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
300 FIXME("(%p)->(%p, %p): stub\n", This, parameter, n);
305 static HRESULT WINAPI ID3DXEffectImpl_SetIntArray(ID3DXEffect* iface, D3DXHANDLE parameter, CONST INT* n, UINT count)
307 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
309 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, n, count);
314 static HRESULT WINAPI ID3DXEffectImpl_GetIntArray(ID3DXEffect* iface, D3DXHANDLE parameter, INT* n, UINT count)
316 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
318 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, n, count);
323 static HRESULT WINAPI ID3DXEffectImpl_SetFloat(ID3DXEffect* iface, D3DXHANDLE parameter, FLOAT f)
325 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
327 FIXME("(%p)->(%p, %f): stub\n", This, parameter, f);
332 static HRESULT WINAPI ID3DXEffectImpl_GetFloat(ID3DXEffect* iface, D3DXHANDLE parameter, FLOAT* f)
334 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
336 FIXME("(%p)->(%p, %p): stub\n", This, parameter, f);
341 static HRESULT WINAPI ID3DXEffectImpl_SetFloatArray(ID3DXEffect* iface, D3DXHANDLE parameter, CONST FLOAT* f, UINT count)
343 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
345 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, f, count);
350 static HRESULT WINAPI ID3DXEffectImpl_GetFloatArray(ID3DXEffect* iface, D3DXHANDLE parameter, FLOAT* f, UINT count)
352 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
354 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, f, count);
359 static HRESULT WINAPI ID3DXEffectImpl_SetVector(ID3DXEffect* iface, D3DXHANDLE parameter, CONST D3DXVECTOR4* vector)
361 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
363 FIXME("(%p)->(%p, %p): stub\n", This, parameter, vector);
368 static HRESULT WINAPI ID3DXEffectImpl_GetVector(ID3DXEffect* iface, D3DXHANDLE parameter, D3DXVECTOR4* vector)
370 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
372 FIXME("(%p)->(%p, %p): stub\n", This, parameter, vector);
377 static HRESULT WINAPI ID3DXEffectImpl_SetVectorArray(ID3DXEffect* iface, D3DXHANDLE parameter, CONST D3DXVECTOR4* vector, UINT count)
379 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
381 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, vector, count);
386 static HRESULT WINAPI ID3DXEffectImpl_GetVectorArray(ID3DXEffect* iface, D3DXHANDLE parameter, D3DXVECTOR4* vector, UINT count)
388 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
390 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, vector, count);
395 static HRESULT WINAPI ID3DXEffectImpl_SetMatrix(ID3DXEffect* iface, D3DXHANDLE parameter, CONST D3DXMATRIX* matrix)
397 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
399 FIXME("(%p)->(%p, %p): stub\n", This, parameter, matrix);
404 static HRESULT WINAPI ID3DXEffectImpl_GetMatrix(ID3DXEffect* iface, D3DXHANDLE parameter, D3DXMATRIX* matrix)
406 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
408 FIXME("(%p)->(%p, %p): stub\n", This, parameter, matrix);
413 static HRESULT WINAPI ID3DXEffectImpl_SetMatrixArray(ID3DXEffect* iface, D3DXHANDLE parameter, CONST D3DXMATRIX* matrix, UINT count)
415 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
417 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, matrix, count);
422 static HRESULT WINAPI ID3DXEffectImpl_GetMatrixArray(ID3DXEffect* iface, D3DXHANDLE parameter, D3DXMATRIX* matrix, UINT count)
424 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
426 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, matrix, count);
431 static HRESULT WINAPI ID3DXEffectImpl_SetMatrixPointerArray(ID3DXEffect* iface, D3DXHANDLE parameter, CONST D3DXMATRIX** matrix, UINT count)
433 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
435 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, matrix, count);
440 static HRESULT WINAPI ID3DXEffectImpl_GetMatrixPointerArray(ID3DXEffect* iface, D3DXHANDLE parameter, D3DXMATRIX** matrix, UINT count)
442 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
444 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, matrix, count);
449 static HRESULT WINAPI ID3DXEffectImpl_SetMatrixTranspose(ID3DXEffect* iface, D3DXHANDLE parameter, CONST D3DXMATRIX* matrix)
451 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
453 FIXME("(%p)->(%p, %p): stub\n", This, parameter, matrix);
458 static HRESULT WINAPI ID3DXEffectImpl_GetMatrixTranspose(ID3DXEffect* iface, D3DXHANDLE parameter, D3DXMATRIX* matrix)
460 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
462 FIXME("(%p)->(%p, %p): stub\n", This, parameter, matrix);
467 static HRESULT WINAPI ID3DXEffectImpl_SetMatrixTransposeArray(ID3DXEffect* iface, D3DXHANDLE parameter, CONST D3DXMATRIX* matrix, UINT count)
469 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
471 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, matrix, count);
476 static HRESULT WINAPI ID3DXEffectImpl_GetMatrixTransposeArray(ID3DXEffect* iface, D3DXHANDLE parameter, D3DXMATRIX* matrix, UINT count)
478 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
480 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, matrix, count);
485 static HRESULT WINAPI ID3DXEffectImpl_SetMatrixTransposePointerArray(ID3DXEffect* iface, D3DXHANDLE parameter, CONST D3DXMATRIX** matrix, UINT count)
487 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
489 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, matrix, count);
494 static HRESULT WINAPI ID3DXEffectImpl_GetMatrixTransposePointerArray(ID3DXEffect* iface, D3DXHANDLE parameter, D3DXMATRIX** matrix, UINT count)
496 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
498 FIXME("(%p)->(%p, %p, %u): stub\n", This, parameter, matrix, count);
503 static HRESULT WINAPI ID3DXEffectImpl_SetString(ID3DXEffect* iface, D3DXHANDLE parameter, LPCSTR string)
505 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
507 FIXME("(%p)->(%p, %p): stub\n", This, parameter, string);
512 static HRESULT WINAPI ID3DXEffectImpl_GetString(ID3DXEffect* iface, D3DXHANDLE parameter, LPCSTR* string)
514 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
516 FIXME("(%p)->(%p, %p): stub\n", This, parameter, string);
521 static HRESULT WINAPI ID3DXEffectImpl_SetTexture(ID3DXEffect* iface, D3DXHANDLE parameter, LPDIRECT3DBASETEXTURE9 texture)
523 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
525 FIXME("(%p)->(%p, %p): stub\n", This, parameter, texture);
530 static HRESULT WINAPI ID3DXEffectImpl_GetTexture(ID3DXEffect* iface, D3DXHANDLE parameter, LPDIRECT3DBASETEXTURE9* texture)
532 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
534 FIXME("(%p)->(%p, %p): stub\n", This, parameter, texture);
539 static HRESULT WINAPI ID3DXEffectImpl_GetPixelShader(ID3DXEffect* iface, D3DXHANDLE parameter, LPDIRECT3DPIXELSHADER9* pshader)
541 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
543 FIXME("(%p)->(%p, %p): stub\n", This, parameter, pshader);
548 static HRESULT WINAPI ID3DXEffectImpl_GetVertexShader(ID3DXEffect* iface, D3DXHANDLE parameter, LPDIRECT3DVERTEXSHADER9* vshader)
550 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
552 FIXME("(%p)->(%p, %p): stub\n", This, parameter, vshader);
557 static HRESULT WINAPI ID3DXEffectImpl_SetArrayRange(ID3DXEffect* iface, D3DXHANDLE parameter, UINT start, UINT end)
559 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
561 FIXME("(%p)->(%p, %u, %u): stub\n", This, parameter, start, end);
566 /*** ID3DXEffect methods ***/
567 static HRESULT WINAPI ID3DXEffectImpl_GetPool(ID3DXEffect* iface, LPD3DXEFFECTPOOL* pool)
569 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
571 FIXME("(%p)->(%p): stub\n", This, pool);
576 static HRESULT WINAPI ID3DXEffectImpl_SetTechnique(ID3DXEffect* iface, D3DXHANDLE technique)
578 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
580 FIXME("(%p)->(%p): stub\n", This, technique);
585 static D3DXHANDLE WINAPI ID3DXEffectImpl_GetCurrentTechnique(ID3DXEffect* iface)
587 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
589 FIXME("(%p)->(): stub\n", This);
594 static HRESULT WINAPI ID3DXEffectImpl_ValidateTechnique(ID3DXEffect* iface, D3DXHANDLE technique)
596 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
598 FIXME("(%p)->(%p): stub\n", This, technique);
603 static HRESULT WINAPI ID3DXEffectImpl_FindNextValidTechnique(ID3DXEffect* iface, D3DXHANDLE technique, D3DXHANDLE* next_technique)
605 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
607 FIXME("(%p)->(%p, %p): stub\n", This, technique, next_technique);
612 static BOOL WINAPI ID3DXEffectImpl_IsParameterUsed(ID3DXEffect* iface, D3DXHANDLE parameter, D3DXHANDLE technique)
614 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
616 FIXME("(%p)->(%p, %p): stub\n", This, parameter, technique);
621 static HRESULT WINAPI ID3DXEffectImpl_Begin(ID3DXEffect* iface, UINT *passes, DWORD flags)
623 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
625 FIXME("(%p)->(%p, %#x): stub\n", This, passes, flags);
630 static HRESULT WINAPI ID3DXEffectImpl_BeginPass(ID3DXEffect* iface, UINT pass)
632 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
634 FIXME("(%p)->(%u): stub\n", This, pass);
639 static HRESULT WINAPI ID3DXEffectImpl_CommitChanges(ID3DXEffect* iface)
641 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
643 FIXME("(%p)->(): stub\n", This);
648 static HRESULT WINAPI ID3DXEffectImpl_EndPass(ID3DXEffect* iface)
650 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
652 FIXME("(%p)->(): stub\n", This);
657 static HRESULT WINAPI ID3DXEffectImpl_End(ID3DXEffect* iface)
659 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
661 FIXME("(%p)->(): stub\n", This);
666 static HRESULT WINAPI ID3DXEffectImpl_GetDevice(ID3DXEffect* iface, LPDIRECT3DDEVICE9* device)
668 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
670 FIXME("(%p)->(%p): stub\n", This, device);
675 static HRESULT WINAPI ID3DXEffectImpl_OnLostDevice(ID3DXEffect* iface)
677 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
679 FIXME("(%p)->(): stub\n", This);
684 static HRESULT WINAPI ID3DXEffectImpl_OnResetDevice(ID3DXEffect* iface)
686 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
688 FIXME("(%p)->(): stub\n", This);
693 static HRESULT WINAPI ID3DXEffectImpl_SetStateManager(ID3DXEffect* iface, LPD3DXEFFECTSTATEMANAGER manager)
695 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
697 FIXME("(%p)->(%p): stub\n", This, manager);
702 static HRESULT WINAPI ID3DXEffectImpl_GetStateManager(ID3DXEffect* iface, LPD3DXEFFECTSTATEMANAGER* manager)
704 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
706 FIXME("(%p)->(%p): stub\n", This, manager);
711 static HRESULT WINAPI ID3DXEffectImpl_BeginParameterBlock(ID3DXEffect* iface)
713 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
715 FIXME("(%p)->(): stub\n", This);
720 static D3DXHANDLE WINAPI ID3DXEffectImpl_EndParameterBlock(ID3DXEffect* iface)
722 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
724 FIXME("(%p)->(): stub\n", This);
729 static HRESULT WINAPI ID3DXEffectImpl_ApplyParameterBlock(ID3DXEffect* iface, D3DXHANDLE parameter_block)
731 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
733 FIXME("(%p)->(%p): stub\n", This, parameter_block);
738 static HRESULT WINAPI ID3DXEffectImpl_DeleteParameterBlock(ID3DXEffect* iface, D3DXHANDLE parameter_block)
740 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
742 FIXME("(%p)->(%p): stub\n", This, parameter_block);
747 static HRESULT WINAPI ID3DXEffectImpl_CloneEffect(ID3DXEffect* iface, LPDIRECT3DDEVICE9 device, LPD3DXEFFECT* effect)
749 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
751 FIXME("(%p)->(%p, %p): stub\n", This, device, effect);
756 static HRESULT WINAPI ID3DXEffectImpl_SetRawValue(ID3DXEffect* iface, D3DXHANDLE parameter, LPCVOID data, UINT byte_offset, UINT bytes)
758 ID3DXEffectImpl *This = (ID3DXEffectImpl *)iface;
760 FIXME("(%p)->(%p, %p, %u, %u): stub\n", This, parameter, data, byte_offset, bytes);
765 static const struct ID3DXEffectVtbl ID3DXEffect_Vtbl =
767 /*** IUnknown methods ***/
768 ID3DXEffectImpl_QueryInterface,
769 ID3DXEffectImpl_AddRef,
770 ID3DXEffectImpl_Release,
771 /*** ID3DXBaseEffect methods ***/
772 ID3DXEffectImpl_GetDesc,
773 ID3DXEffectImpl_GetParameterDesc,
774 ID3DXEffectImpl_GetTechniqueDesc,
775 ID3DXEffectImpl_GetPassDesc,
776 ID3DXEffectImpl_GetFunctionDesc,
777 ID3DXEffectImpl_GetParameter,
778 ID3DXEffectImpl_GetParameterByName,
779 ID3DXEffectImpl_GetParameterBySemantic,
780 ID3DXEffectImpl_GetParameterElement,
781 ID3DXEffectImpl_GetTechnique,
782 ID3DXEffectImpl_GetTechniqueByName,
783 ID3DXEffectImpl_GetPass,
784 ID3DXEffectImpl_GetPassByName,
785 ID3DXEffectImpl_GetFunction,
786 ID3DXEffectImpl_GetFunctionByName,
787 ID3DXEffectImpl_GetAnnotation,
788 ID3DXEffectImpl_GetAnnotationByName,
789 ID3DXEffectImpl_SetValue,
790 ID3DXEffectImpl_GetValue,
791 ID3DXEffectImpl_SetBool,
792 ID3DXEffectImpl_GetBool,
793 ID3DXEffectImpl_SetBoolArray,
794 ID3DXEffectImpl_GetBoolArray,
795 ID3DXEffectImpl_SetInt,
796 ID3DXEffectImpl_GetInt,
797 ID3DXEffectImpl_SetIntArray,
798 ID3DXEffectImpl_GetIntArray,
799 ID3DXEffectImpl_SetFloat,
800 ID3DXEffectImpl_GetFloat,
801 ID3DXEffectImpl_SetFloatArray,
802 ID3DXEffectImpl_GetFloatArray,
803 ID3DXEffectImpl_SetVector,
804 ID3DXEffectImpl_GetVector,
805 ID3DXEffectImpl_SetVectorArray,
806 ID3DXEffectImpl_GetVectorArray,
807 ID3DXEffectImpl_SetMatrix,
808 ID3DXEffectImpl_GetMatrix,
809 ID3DXEffectImpl_SetMatrixArray,
810 ID3DXEffectImpl_GetMatrixArray,
811 ID3DXEffectImpl_SetMatrixPointerArray,
812 ID3DXEffectImpl_GetMatrixPointerArray,
813 ID3DXEffectImpl_SetMatrixTranspose,
814 ID3DXEffectImpl_GetMatrixTranspose,
815 ID3DXEffectImpl_SetMatrixTransposeArray,
816 ID3DXEffectImpl_GetMatrixTransposeArray,
817 ID3DXEffectImpl_SetMatrixTransposePointerArray,
818 ID3DXEffectImpl_GetMatrixTransposePointerArray,
819 ID3DXEffectImpl_SetString,
820 ID3DXEffectImpl_GetString,
821 ID3DXEffectImpl_SetTexture,
822 ID3DXEffectImpl_GetTexture,
823 ID3DXEffectImpl_GetPixelShader,
824 ID3DXEffectImpl_GetVertexShader,
825 ID3DXEffectImpl_SetArrayRange,
826 /*** ID3DXEffect methods ***/
827 ID3DXEffectImpl_GetPool,
828 ID3DXEffectImpl_SetTechnique,
829 ID3DXEffectImpl_GetCurrentTechnique,
830 ID3DXEffectImpl_ValidateTechnique,
831 ID3DXEffectImpl_FindNextValidTechnique,
832 ID3DXEffectImpl_IsParameterUsed,
833 ID3DXEffectImpl_Begin,
834 ID3DXEffectImpl_BeginPass,
835 ID3DXEffectImpl_CommitChanges,
836 ID3DXEffectImpl_EndPass,
838 ID3DXEffectImpl_GetDevice,
839 ID3DXEffectImpl_OnLostDevice,
840 ID3DXEffectImpl_OnResetDevice,
841 ID3DXEffectImpl_SetStateManager,
842 ID3DXEffectImpl_GetStateManager,
843 ID3DXEffectImpl_BeginParameterBlock,
844 ID3DXEffectImpl_EndParameterBlock,
845 ID3DXEffectImpl_ApplyParameterBlock,
846 ID3DXEffectImpl_DeleteParameterBlock,
847 ID3DXEffectImpl_CloneEffect,
848 ID3DXEffectImpl_SetRawValue
851 HRESULT WINAPI D3DXCreateEffectEx(LPDIRECT3DDEVICE9 device,
854 CONST D3DXMACRO* defines,
855 LPD3DXINCLUDE include,
856 LPCSTR skip_constants,
858 LPD3DXEFFECTPOOL pool,
859 LPD3DXEFFECT* effect,
860 LPD3DXBUFFER* compilation_errors)
862 ID3DXEffectImpl* object;
864 FIXME("(%p, %p, %u, %p, %p, %p, %#x, %p, %p, %p): semi-stub\n", device, srcdata, srcdatalen, defines, include,
865 skip_constants, flags, pool, effect, compilation_errors);
867 if (!device || !srcdata)
868 return D3DERR_INVALIDCALL;
873 /* Native dll allows effect to be null so just return D3D_OK after doing basic checks */
877 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(ID3DXEffectImpl));
880 ERR("Out of memory\n");
881 return E_OUTOFMEMORY;
884 object->lpVtbl = &ID3DXEffect_Vtbl;
887 *effect = (LPD3DXEFFECT)object;
892 HRESULT WINAPI D3DXCreateEffect(LPDIRECT3DDEVICE9 device,
895 CONST D3DXMACRO* defines,
896 LPD3DXINCLUDE include,
898 LPD3DXEFFECTPOOL pool,
899 LPD3DXEFFECT* effect,
900 LPD3DXBUFFER* compilation_errors)
902 TRACE("(%p, %p, %u, %p, %p, %#x, %p, %p, %p): Forwarded to D3DXCreateEffectEx\n", device, srcdata, srcdatalen, defines,
903 include, flags, pool, effect, compilation_errors);
905 return D3DXCreateEffectEx(device, srcdata, srcdatalen, defines, include, NULL, flags, pool, effect, compilation_errors);
908 HRESULT WINAPI D3DXCreateEffectCompiler(LPCSTR srcdata,
910 CONST D3DXMACRO* defines,
911 LPD3DXINCLUDE include,
913 LPD3DXEFFECTCOMPILER* compiler,
914 LPD3DXBUFFER* parse_errors)
916 FIXME("(%p, %u, %p, %p, %#x, %p, %p): stub\n", srcdata, srcdatalen, defines, include, flags, compiler, parse_errors);
921 static const struct ID3DXEffectPoolVtbl ID3DXEffectPool_Vtbl;
923 typedef struct ID3DXEffectPoolImpl {
924 const ID3DXEffectPoolVtbl *lpVtbl;
926 } ID3DXEffectPoolImpl;
928 /*** IUnknown methods ***/
929 static HRESULT WINAPI ID3DXEffectPoolImpl_QueryInterface(ID3DXEffectPool* iface, REFIID riid, void** object)
931 ID3DXEffectPoolImpl *This = (ID3DXEffectPoolImpl *)iface;
933 TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid), object);
935 if (IsEqualGUID(riid, &IID_IUnknown) ||
936 IsEqualGUID(riid, &IID_ID3DXEffectPool))
938 This->lpVtbl->AddRef(iface);
943 WARN("Interface %s not found\n", debugstr_guid(riid));
945 return E_NOINTERFACE;
948 static ULONG WINAPI ID3DXEffectPoolImpl_AddRef(ID3DXEffectPool* iface)
950 ID3DXEffectPoolImpl *This = (ID3DXEffectPoolImpl *)iface;
952 TRACE("(%p)->(): AddRef from %u\n", This, This->ref);
954 return InterlockedIncrement(&This->ref);
957 static ULONG WINAPI ID3DXEffectPoolImpl_Release(ID3DXEffectPool* iface)
959 ID3DXEffectPoolImpl *This = (ID3DXEffectPoolImpl *)iface;
960 ULONG ref = InterlockedDecrement(&This->ref);
962 TRACE("(%p)->(): Release from %u\n", This, ref + 1);
965 HeapFree(GetProcessHeap(), 0, This);
970 static const struct ID3DXEffectPoolVtbl ID3DXEffectPool_Vtbl =
972 /*** IUnknown methods ***/
973 ID3DXEffectPoolImpl_QueryInterface,
974 ID3DXEffectPoolImpl_AddRef,
975 ID3DXEffectPoolImpl_Release
978 HRESULT WINAPI D3DXCreateEffectPool(LPD3DXEFFECTPOOL* pool)
980 ID3DXEffectPoolImpl* object;
982 TRACE("(%p)\n", pool);
985 return D3DERR_INVALIDCALL;
987 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(ID3DXEffectImpl));
990 ERR("Out of memory\n");
991 return E_OUTOFMEMORY;
994 object->lpVtbl = &ID3DXEffectPool_Vtbl;
997 *pool = (LPD3DXEFFECTPOOL)object;