source: GTP/branches/IllumWPdeliver2008dec/IlluminationWP/demos/Standalone/Hierarchical Systems Demo [OpenGL]/RESOURCES/include/CgFX/ICgFXEffect.h @ 3255

Revision 3255, 10.5 KB checked in by szirmay, 15 years ago (diff)
Line 
1/*********************************************************************NVMH3****
2Path:  E:\Documents and Settings\sdomine\My Documents\CGFX_Beta_Runtime\include
3File:  ICgFXEffect.h
4
5Copyright NVIDIA Corporation 2002
6TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED
7*AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS
8OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
9AND FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS
10BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES
11WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS,
12BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS)
13ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS
14BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
15
16
17Comments:
18
19
20
21
22******************************************************************************/
23#ifndef __ICGFX_EFFECT_H
24#define __ICGFX_EFFECT_H
25
26#include "cgfx_stddefs.h"
27#define CGFX_MAX_DIMENSIONS 4
28
29#ifndef CGFXDLL_API
30#define CGFXDLL_API
31#endif
32
33#ifdef WIN32
34#define CGFXDLL_EXPORT __cdecl
35#else
36#define CGFXDLL_EXPORT
37#endif // WIN32
38
39//////////////////////////////////////////////////////////////////////////////
40// Types /////////////////////////////////////////////////////////////////////
41//////////////////////////////////////////////////////////////////////////////
42
43typedef LPCSTR CGFXHANDLE;
44
45enum CgFXPARAMETERTYPE {
46    CgFXPT_UNKNOWN                      = 0,
47    CgFXPT_BOOL,
48    CgFXPT_INT,
49    CgFXPT_FLOAT,
50    CgFXPT_DWORD,
51    CgFXPT_STRING,
52
53    CgFXPT_TEXTURE1D,
54    CgFXPT_TEXTURE2D,
55    CgFXPT_TEXTURERECT,
56    CgFXPT_TEXTURECUBE,
57    CgFXPT_TEXTURE3D,
58
59    CgFXPT_SAMPLER1D,
60    CgFXPT_SAMPLER2D,
61    CgFXPT_SAMPLERRECT,
62    CgFXPT_SAMPLERCUBE,
63    CgFXPT_SAMPLER3D,
64
65    CgFXPT_VERTEXSHADER,
66    CgFXPT_PIXELSHADER,
67
68    CgFXPT_STRUCT,
69   
70    // force 32-bit size enum
71    CgFXPT_FORCE_DWORD      = 0x7fffffff
72};
73
74enum CgFXPARAMETERCLASS {
75    CgFXPC_SCALAR,
76    CgFXPC_VECTOR,
77    CgFXPC_MATRIX_ROWS,
78    CgFXPC_MATRIX_COLUMNS,
79    CgFXPC_OBJECT,
80    CgFXPC_STRUCT,
81
82    CgFXPC_FORCE_DWORD      = 0x7fffffff
83};
84
85struct CgFXEFFECT_DESC {
86    LPCSTR Creator;
87    UINT Parameters;
88    UINT Techniques;
89    UINT Functions;
90};
91
92// CgFXPARAMETER_DESC::Flags
93#define CGFX_PARAMETER_SHARED 1
94#define CGFX_PARAMETER_LITERAL 2
95#define CGFX_PARAMETER_ANNOTATION 4
96
97struct CgFXPARAMETER_DESC {
98    LPCSTR Name;
99    LPCSTR Semantic;
100    CgFXPARAMETERCLASS Class;
101    CgFXPARAMETERTYPE Type;
102    UINT Dimension[CGFX_MAX_DIMENSIONS]; //
103    UINT Rows, Columns, Elements;
104    UINT Annotations;
105    UINT StructMembers;
106    UINT Bytes;
107    DWORD Flags;
108};
109
110struct CgFXTECHNIQUE_DESC {
111    LPCSTR Name;
112    UINT Annotations;
113    UINT Passes;
114};
115
116struct CgFXVARYING {
117    LPCSTR Name;
118    UINT Resource;
119    UINT Elements;
120};
121
122struct CgFXSAMPLER_INFO {
123    UINT Type;
124};
125
126#define MAX_CGFX_DECL_LENGTH 16
127
128struct CgFXPASS_DESC {
129    LPCSTR Name;
130    UINT Annotations;
131    DWORD VSVersion;
132    DWORD PSVersion;
133    UINT VertexVaryingUsed;
134    CgFXVARYING VertexVarying[MAX_CGFX_DECL_LENGTH];
135    UINT FragmentVaryingUsed;
136    CgFXVARYING FragmentVarying[MAX_CGFX_DECL_LENGTH];
137    UINT PSSamplersUsed;
138    CgFXSAMPLER_INFO PSSamplers[16];
139};
140
141enum CgFXMode {
142    CgFX_Unknown,
143    CgFX_OpenGL,
144    CgFX_Direct3D8,
145    CgFX_Direct3D9
146};
147
148//////////////////////////////////////////////////////////////////////////////
149// Base Effect ///////////////////////////////////////////////////////////////
150//////////////////////////////////////////////////////////////////////////////
151// base interface. extended by Effect and EffectCompiler.
152//////////////////////////////////////////////////////////////////////////////
153class ICgFXBaseEffect
154{
155public:
156    virtual ULONG AddRef() = 0;
157    virtual ULONG Release() = 0;
158
159    virtual CGFXHANDLE GetAnnotation(CGFXHANDLE object, UINT num) = 0;
160    virtual CGFXHANDLE GetAnnotationByName(CGFXHANDLE object, LPCSTR name) = 0;
161
162    virtual CGFXHANDLE GetParameter(CGFXHANDLE parent, UINT index) = 0;
163    virtual CGFXHANDLE GetParameterByName(CGFXHANDLE parent, LPCSTR name) = 0;
164    virtual CGFXHANDLE GetParameterBySemantic(CGFXHANDLE parent, LPCSTR name) = 0;
165    virtual CGFXHANDLE GetParameterElement(CGFXHANDLE parent, UINT element) = 0;
166
167    virtual CGFXHANDLE GetPass(CGFXHANDLE technique, UINT index) = 0;
168    virtual CGFXHANDLE GetPassByName(CGFXHANDLE technique, LPCSTR name) = 0;
169
170    virtual CGFXHANDLE GetTechnique(UINT index) = 0;
171    virtual CGFXHANDLE GetTechniqueByName(LPCSTR name) = 0;
172
173    virtual HRESULT GetDesc(CgFXEFFECT_DESC* pDesc) = 0;
174    virtual HRESULT GetParameterDesc(CGFXHANDLE pParameter, CgFXPARAMETER_DESC* pDesc) = 0;
175
176    virtual HRESULT GetTechniqueDesc(CGFXHANDLE pTechnique, CgFXTECHNIQUE_DESC* pDesc) = 0;
177    virtual HRESULT GetPassDesc(CGFXHANDLE pPass, CgFXPASS_DESC* pDesc) = 0;
178
179    virtual HRESULT SetValue(CGFXHANDLE pName, LPCVOID pData, UINT Bytes) = 0;
180    virtual HRESULT GetValue(CGFXHANDLE pName, LPVOID pData, UINT Bytes) = 0;
181
182    virtual HRESULT SetFloat(CGFXHANDLE pName, FLOAT f) = 0;
183    virtual HRESULT GetFloat(CGFXHANDLE pName, FLOAT* f) = 0;
184    virtual HRESULT GetFloatArray(CGFXHANDLE pName, FLOAT* f, UINT count) = 0;
185    virtual HRESULT SetFloatArray(CGFXHANDLE pName, const FLOAT* f, UINT count) = 0;
186
187    virtual HRESULT GetInt(CGFXHANDLE pName, int *value) = 0;
188    virtual HRESULT SetInt(CGFXHANDLE pName, int value) = 0;
189    virtual HRESULT GetIntArray(CGFXHANDLE pName, int *value, UINT count) = 0;
190    virtual HRESULT SetIntArray(CGFXHANDLE pName, const int *value, UINT count) = 0;
191
192    virtual HRESULT SetVector(CGFXHANDLE pName, const float *pVector, UINT vecSize) = 0;
193    virtual HRESULT GetVector(CGFXHANDLE pName, float *pVector, UINT vecSize) = 0;
194    virtual HRESULT SetVectorArray(CGFXHANDLE pName, const float *pVector, UINT vecSize,
195                                   UINT count) = 0;
196    virtual HRESULT GetVectorArray(CGFXHANDLE pName, float *pVector, UINT vecSize, UINT count) = 0;
197
198    virtual HRESULT SetMatrix(CGFXHANDLE pName, const float* pMatrix, UINT nRows, UINT nCols) = 0;
199    virtual HRESULT GetMatrix(CGFXHANDLE pName, float* pMatrix, UINT nRows, UINT nCols) = 0;
200    virtual HRESULT SetMatrixArray(CGFXHANDLE pName, const float* pMatrix, UINT nRows, UINT nCols,
201                                   UINT count) = 0;
202    virtual HRESULT GetMatrixArray(CGFXHANDLE pName, float* pMatrix, UINT nRows, UINT nCols,
203                                   UINT count) = 0;
204
205    virtual HRESULT SetMatrixTranspose(CGFXHANDLE pName, const float* pMatrix, UINT nRows, UINT nCols) = 0;
206    virtual HRESULT GetMatrixTranspose(CGFXHANDLE pName, float* pMatrix, UINT nRows, UINT nCols) = 0;
207    virtual HRESULT SetMatrixTransposeArray(CGFXHANDLE pName, const float *pMatrix, UINT nRows, UINT nCols,
208                                            UINT count) = 0;
209    virtual HRESULT GetMatrixTransposeArray(CGFXHANDLE pName, float *pMatrix, UINT nRows, UINT nCols,
210                                            UINT count) = 0;
211       
212    virtual HRESULT SetDWORD(CGFXHANDLE pName, DWORD dw) = 0;
213    virtual HRESULT GetDWORD(CGFXHANDLE pName, DWORD* dw) = 0;
214
215    virtual HRESULT SetBool(CGFXHANDLE pName, bool bvalue) = 0;
216    virtual HRESULT GetBool(CGFXHANDLE pName, bool* bvalue) = 0;
217    virtual HRESULT GetBoolArray(CGFXHANDLE pName, bool *bvalue, UINT count) = 0;
218    virtual HRESULT SetBoolArray(CGFXHANDLE pName, const bool *bvalue, UINT count) = 0;
219       
220    virtual HRESULT SetString(CGFXHANDLE pName, LPCSTR pString) = 0;
221    virtual HRESULT GetString(CGFXHANDLE pName, LPCSTR* ppString) = 0;
222
223    virtual HRESULT SetTexture(CGFXHANDLE pName, DWORD textureHandle) = 0;
224    virtual HRESULT GetTexture(CGFXHANDLE pName, DWORD* textureHandle) = 0;
225
226    virtual HRESULT SetVertexShader(CGFXHANDLE pName, DWORD vsHandle) = 0;
227    virtual HRESULT GetVertexShader(CGFXHANDLE pName, DWORD* vsHandle) = 0;
228
229    virtual HRESULT SetPixelShader(CGFXHANDLE pName, DWORD psHandle) = 0;
230    virtual HRESULT GetPixelShader(CGFXHANDLE pName, DWORD* psHandle) = 0;
231};
232
233enum CgFXPassFlags {
234    CGFX_DONOTSAVESTATE = 1,
235    CGFX_DONOTSAVESHADERSTATE = 2,
236};
237
238class ICgFXEffect : public ICgFXBaseEffect
239{
240public:
241    virtual HRESULT SetTechnique(CGFXHANDLE pTechnique) = 0;
242    virtual CGFXHANDLE GetCurrentTechnique() = 0;
243
244    virtual HRESULT ValidateTechnique(CGFXHANDLE technique) = 0;
245    virtual HRESULT FindNextValidTechnique(CGFXHANDLE hTechnique, CGFXHANDLE *pTechnique) = 0;
246
247    virtual HRESULT Begin(UINT* pPasses, DWORD Flags) = 0;
248    virtual HRESULT Pass(UINT passNum) = 0;
249    virtual HRESULT End() = 0;
250
251    virtual HRESULT CloneEffect(ICgFXEffect** ppNewEffect) = 0;
252
253    virtual HRESULT GetDevice(LPVOID* ppDevice) = 0;
254
255    virtual HRESULT OnLostDevice() = 0;
256    virtual HRESULT OnResetDevice() = 0;
257};
258
259class ICgFXEffectCompiler : public ICgFXBaseEffect
260{
261public:
262    virtual HRESULT CompileEffect(const char **compilerArgs, ICgFXEffect** ppEffect,
263                                  const char** ppCompilationErrors) = 0;
264};
265
266extern "C" {
267
268HRESULT CGFXDLL_EXPORT CGFXDLL_API CgFXCreateEffect(
269        LPCSTR               pSrcData,
270        const char            **compilerArguments,
271        ICgFXEffect**        ppEffect,
272        const char**         ppCompilationErrors);
273
274HRESULT CGFXDLL_EXPORT CGFXDLL_API CgFXCreateEffectFromFileA(
275        LPCSTR               pSrcFile,
276        const char            **compilerArguments,
277        ICgFXEffect**        ppEffect,
278        const char**         ppCompilationErrors);
279
280HRESULT CGFXDLL_EXPORT CGFXDLL_API CgFXCreateEffectCompiler(
281        LPCSTR                pSrcData,
282        const char            **compilerArguments,
283        ICgFXEffectCompiler** ppEffectCompiler,
284        const char**          ppCompilationErrors);
285
286HRESULT CGFXDLL_EXPORT CGFXDLL_API CgFXCreateEffectCompilerFromFileA(
287        LPCSTR                pSrcFile,
288        const char            **compilerArguments,
289        ICgFXEffectCompiler** ppEffectCompiler,
290        const char**          ppCompilationErrors);
291
292HRESULT CGFXDLL_EXPORT CGFXDLL_API CgFXSetDevice(const char* pDeviceName, LPVOID pDevice);
293HRESULT CGFXDLL_EXPORT CGFXDLL_API CgFXFreeDevice(const char* pDeviceName, LPVOID pDevice);
294
295HRESULT CGFXDLL_EXPORT CGFXDLL_API CgFXGetErrors(const char** ppErrors);
296
297} // extern "C"
298
299#endif
Note: See TracBrowser for help on using the repository browser.