1 | /*********************************************************************NVMH3****
|
---|
2 | Path: E:\Documents and Settings\sdomine\My Documents\CGFX_Beta_Runtime\include
|
---|
3 | File: ICgFXEffect.h
|
---|
4 |
|
---|
5 | Copyright NVIDIA Corporation 2002
|
---|
6 | TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED
|
---|
7 | *AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS
|
---|
8 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
|
---|
9 | AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS
|
---|
10 | BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES
|
---|
11 | WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS,
|
---|
12 | BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS)
|
---|
13 | ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS
|
---|
14 | BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
---|
15 |
|
---|
16 |
|
---|
17 | Comments:
|
---|
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 |
|
---|
43 | typedef LPCSTR CGFXHANDLE;
|
---|
44 |
|
---|
45 | enum 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 |
|
---|
74 | enum 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 |
|
---|
85 | struct 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 |
|
---|
97 | struct 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 |
|
---|
110 | struct CgFXTECHNIQUE_DESC {
|
---|
111 | LPCSTR Name;
|
---|
112 | UINT Annotations;
|
---|
113 | UINT Passes;
|
---|
114 | };
|
---|
115 |
|
---|
116 | struct CgFXVARYING {
|
---|
117 | LPCSTR Name;
|
---|
118 | UINT Resource;
|
---|
119 | UINT Elements;
|
---|
120 | };
|
---|
121 |
|
---|
122 | struct CgFXSAMPLER_INFO {
|
---|
123 | UINT Type;
|
---|
124 | };
|
---|
125 |
|
---|
126 | #define MAX_CGFX_DECL_LENGTH 16
|
---|
127 |
|
---|
128 | struct 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 |
|
---|
141 | enum 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 | //////////////////////////////////////////////////////////////////////////////
|
---|
153 | class ICgFXBaseEffect
|
---|
154 | {
|
---|
155 | public:
|
---|
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 |
|
---|
233 | enum CgFXPassFlags {
|
---|
234 | CGFX_DONOTSAVESTATE = 1,
|
---|
235 | CGFX_DONOTSAVESHADERSTATE = 2,
|
---|
236 | };
|
---|
237 |
|
---|
238 | class ICgFXEffect : public ICgFXBaseEffect
|
---|
239 | {
|
---|
240 | public:
|
---|
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 |
|
---|
259 | class ICgFXEffectCompiler : public ICgFXBaseEffect
|
---|
260 | {
|
---|
261 | public:
|
---|
262 | virtual HRESULT CompileEffect(const char **compilerArgs, ICgFXEffect** ppEffect,
|
---|
263 | const char** ppCompilationErrors) = 0;
|
---|
264 | };
|
---|
265 |
|
---|
266 | extern "C" {
|
---|
267 |
|
---|
268 | HRESULT CGFXDLL_EXPORT CGFXDLL_API CgFXCreateEffect(
|
---|
269 | LPCSTR pSrcData,
|
---|
270 | const char **compilerArguments,
|
---|
271 | ICgFXEffect** ppEffect,
|
---|
272 | const char** ppCompilationErrors);
|
---|
273 |
|
---|
274 | HRESULT CGFXDLL_EXPORT CGFXDLL_API CgFXCreateEffectFromFileA(
|
---|
275 | LPCSTR pSrcFile,
|
---|
276 | const char **compilerArguments,
|
---|
277 | ICgFXEffect** ppEffect,
|
---|
278 | const char** ppCompilationErrors);
|
---|
279 |
|
---|
280 | HRESULT CGFXDLL_EXPORT CGFXDLL_API CgFXCreateEffectCompiler(
|
---|
281 | LPCSTR pSrcData,
|
---|
282 | const char **compilerArguments,
|
---|
283 | ICgFXEffectCompiler** ppEffectCompiler,
|
---|
284 | const char** ppCompilationErrors);
|
---|
285 |
|
---|
286 | HRESULT CGFXDLL_EXPORT CGFXDLL_API CgFXCreateEffectCompilerFromFileA(
|
---|
287 | LPCSTR pSrcFile,
|
---|
288 | const char **compilerArguments,
|
---|
289 | ICgFXEffectCompiler** ppEffectCompiler,
|
---|
290 | const char** ppCompilationErrors);
|
---|
291 |
|
---|
292 | HRESULT CGFXDLL_EXPORT CGFXDLL_API CgFXSetDevice(const char* pDeviceName, LPVOID pDevice);
|
---|
293 | HRESULT CGFXDLL_EXPORT CGFXDLL_API CgFXFreeDevice(const char* pDeviceName, LPVOID pDevice);
|
---|
294 |
|
---|
295 | HRESULT CGFXDLL_EXPORT CGFXDLL_API CgFXGetErrors(const char** ppErrors);
|
---|
296 |
|
---|
297 | } // extern "C"
|
---|
298 |
|
---|
299 | #endif
|
---|