[657] | 1 | /*
|
---|
| 2 | *
|
---|
| 3 | * Copyright (c) 2002, NVIDIA Corporation.
|
---|
| 4 | *
|
---|
| 5 | *
|
---|
| 6 | *
|
---|
| 7 | * NVIDIA Corporation("NVIDIA") supplies this software to you in consideration
|
---|
| 8 | * of your agreement to the following terms, and your use, installation,
|
---|
| 9 | * modification or redistribution of this NVIDIA software constitutes
|
---|
| 10 | * acceptance of these terms. If you do not agree with these terms, please do
|
---|
| 11 | * not use, install, modify or redistribute this NVIDIA software.
|
---|
| 12 | *
|
---|
| 13 | *
|
---|
| 14 | *
|
---|
| 15 | * In consideration of your agreement to abide by the following terms, and
|
---|
| 16 | * subject to these terms, NVIDIA grants you a personal, non-exclusive license,
|
---|
| 17 | * under NVIDIAs copyrights in this original NVIDIA software (the "NVIDIA
|
---|
| 18 | * Software"), to use, reproduce, modify and redistribute the NVIDIA
|
---|
| 19 | * Software, with or without modifications, in source and/or binary forms;
|
---|
| 20 | * provided that if you redistribute the NVIDIA Software, you must retain the
|
---|
| 21 | * copyright notice of NVIDIA, this notice and the following text and
|
---|
| 22 | * disclaimers in all such redistributions of the NVIDIA Software. Neither the
|
---|
| 23 | * name, trademarks, service marks nor logos of NVIDIA Corporation may be used
|
---|
| 24 | * to endorse or promote products derived from the NVIDIA Software without
|
---|
| 25 | * specific prior written permission from NVIDIA. Except as expressly stated
|
---|
| 26 | * in this notice, no other rights or licenses express or implied, are granted
|
---|
| 27 | * by NVIDIA herein, including but not limited to any patent rights that may be
|
---|
| 28 | * infringed by your derivative works or by other works in which the NVIDIA
|
---|
| 29 | * Software may be incorporated. No hardware is licensed hereunder.
|
---|
| 30 | *
|
---|
| 31 | *
|
---|
| 32 | *
|
---|
| 33 | * THE NVIDIA SOFTWARE IS BEING PROVIDED ON AN "AS IS" BASIS, WITHOUT
|
---|
| 34 | * WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING
|
---|
| 35 | * WITHOUT LIMITATION, WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
|
---|
| 36 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR ITS USE AND OPERATION
|
---|
| 37 | * EITHER ALONE OR IN COMBINATION WITH OTHER PRODUCTS.
|
---|
| 38 | *
|
---|
| 39 | *
|
---|
| 40 | *
|
---|
| 41 | * IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL,
|
---|
| 42 | * EXEMPLARY, CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOST
|
---|
| 43 | * PROFITS; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
---|
| 44 | * PROFITS; OR BUSINESS INTERRUPTION) OR ARISING IN ANY WAY OUT OF THE USE,
|
---|
| 45 | * REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE NVIDIA SOFTWARE,
|
---|
| 46 | * HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING
|
---|
| 47 | * NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF NVIDIA HAS BEEN ADVISED
|
---|
| 48 | * OF THE POSSIBILITY OF SUCH DAMAGE.
|
---|
| 49 | *
|
---|
| 50 | */
|
---|
| 51 | #ifndef CGD3D8_INCLUDED
|
---|
| 52 | #define CGD3D8_INCLUDED
|
---|
| 53 |
|
---|
| 54 | #if WIN32
|
---|
| 55 |
|
---|
| 56 | #pragma once
|
---|
| 57 |
|
---|
| 58 | #include "cg.h"
|
---|
| 59 | #include <d3d8.h>
|
---|
| 60 | #include <d3dx8.h>
|
---|
| 61 |
|
---|
| 62 | // Set up for either Win32 import/export/lib.
|
---|
| 63 | #if WIN32
|
---|
| 64 | # include <windows.h>
|
---|
| 65 | #ifdef CGD3D8DLL_EXPORTS
|
---|
| 66 | #define CGD3D8DLL_API __declspec(dllexport)
|
---|
| 67 | #elif defined (CG_LIB)
|
---|
| 68 | #define CGD3D8DLL_API
|
---|
| 69 | #else
|
---|
| 70 | #define CGD3D8DLL_API __declspec(dllimport)
|
---|
| 71 | #endif
|
---|
| 72 | #else
|
---|
| 73 | #define CGD3D8DLL_API
|
---|
| 74 | #endif
|
---|
| 75 |
|
---|
| 76 | /*---------------------------------------------------------------------------
|
---|
| 77 | // CGerrors that will be fed to cgSetError
|
---|
| 78 | // Use cgD3D8TranslateCGerror() to translate these errors into strings.
|
---|
| 79 | ---------------------------------------------------------------------------*/
|
---|
| 80 | enum cgD3D8Errors
|
---|
| 81 | {
|
---|
| 82 | cgD3D8Failed = 1000,
|
---|
| 83 | cgD3D8DebugTrace = 1001,
|
---|
| 84 | };
|
---|
| 85 |
|
---|
| 86 | /*---------------------------------------------------------------------------
|
---|
| 87 | // HRESULTs specific to cgD3D8. When the CGerror is set to cgD3D8Failed
|
---|
| 88 | // cgD3D8GetLastError will return an HRESULT that could be one these.
|
---|
| 89 | // Use cgD3D8TranslateHRESULT() to translate these errors into strings.
|
---|
| 90 | ---------------------------------------------------------------------------*/
|
---|
| 91 | static const HRESULT CGD3D8ERR_NOTLOADED = MAKE_HRESULT(1, 0x877, 1);
|
---|
| 92 | static const HRESULT CGD3D8ERR_NODEVICE = MAKE_HRESULT(1, 0x877, 2);
|
---|
| 93 | static const HRESULT CGD3D8ERR_NOTSAMPLER = MAKE_HRESULT(1, 0x877, 3);
|
---|
| 94 | static const HRESULT CGD3D8ERR_INVALIDPROFILE = MAKE_HRESULT(1, 0x877, 4);
|
---|
| 95 | static const HRESULT CGD3D8ERR_NULLVALUE = MAKE_HRESULT(1, 0x877, 5);
|
---|
| 96 | static const HRESULT CGD3D8ERR_OUTOFRANGE = MAKE_HRESULT(1, 0x877, 6);
|
---|
| 97 | static const HRESULT CGD3D8ERR_NOTUNIFORM = MAKE_HRESULT(1, 0x877, 7);
|
---|
| 98 | static const HRESULT CGD3D8ERR_NOTMATRIX = MAKE_HRESULT(1, 0x877, 8);
|
---|
| 99 | static const HRESULT CGD3D8ERR_INVALIDPARAM = MAKE_HRESULT(1, 0x877, 9);
|
---|
| 100 |
|
---|
| 101 | static const HRESULT CGD3D8ERR_INVALIDSAMPLERSTATE = MAKE_HRESULT(1, 0x877, 100);
|
---|
| 102 | static const HRESULT CGD3D8ERR_INVALIDVEREXDECL = MAKE_HRESULT(1, 0x877, 101);
|
---|
| 103 |
|
---|
| 104 | /*---------------------------------------------------------------------------
|
---|
| 105 | // Other error return values
|
---|
| 106 | ---------------------------------------------------------------------------*/
|
---|
| 107 | static const DWORD CGD3D8_INVALID_REG = 0xFFFFFFFF;
|
---|
| 108 |
|
---|
| 109 | #ifdef __cplusplus
|
---|
| 110 | extern "C"
|
---|
| 111 | {
|
---|
| 112 | #endif
|
---|
| 113 |
|
---|
| 114 | /*---------------------------------------------------------------------------
|
---|
| 115 | // Minimal Interface
|
---|
| 116 | ---------------------------------------------------------------------------*/
|
---|
| 117 |
|
---|
| 118 | CGD3D8DLL_API
|
---|
| 119 | DWORD cgD3D8TypeToSize(
|
---|
| 120 | CGtype type
|
---|
| 121 | );
|
---|
| 122 |
|
---|
| 123 | CGD3D8DLL_API
|
---|
| 124 | DWORD cgD3D8ResourceToInputRegister(
|
---|
| 125 | CGresource resource
|
---|
| 126 | );
|
---|
| 127 |
|
---|
| 128 | CGD3D8DLL_API
|
---|
| 129 | CGbool cgD3D8GetVertexDeclaration(
|
---|
| 130 | CGprogram prog,
|
---|
| 131 | DWORD decl[MAX_FVF_DECL_SIZE]
|
---|
| 132 | );
|
---|
| 133 |
|
---|
| 134 | CGD3D8DLL_API
|
---|
| 135 | CGbool cgD3D8ValidateVertexDeclaration(
|
---|
| 136 | CGprogram prog,
|
---|
| 137 | const DWORD* decl
|
---|
| 138 | );
|
---|
| 139 |
|
---|
| 140 | /*---------------------------------------------------------------------------
|
---|
| 141 | // Expanded Interface
|
---|
| 142 | ---------------------------------------------------------------------------*/
|
---|
| 143 |
|
---|
| 144 | /* ----- D3D Device Control ----------- */
|
---|
| 145 | CGD3D8DLL_API
|
---|
| 146 | IDirect3DDevice8* cgD3D8GetDevice();
|
---|
| 147 |
|
---|
| 148 | CGD3D8DLL_API
|
---|
| 149 | HRESULT cgD3D8SetDevice(
|
---|
| 150 | IDirect3DDevice8* pDevice
|
---|
| 151 | );
|
---|
| 152 |
|
---|
| 153 | /* ----- Shader Management ----------- */
|
---|
| 154 | CGD3D8DLL_API
|
---|
| 155 | HRESULT cgD3D8LoadProgram(
|
---|
| 156 | CGprogram prog,
|
---|
| 157 | CGbool paramShadowing,
|
---|
| 158 | DWORD assemFlags,
|
---|
| 159 | DWORD vshaderUsage,
|
---|
| 160 | const DWORD* vertexDecl
|
---|
| 161 | );
|
---|
| 162 |
|
---|
| 163 | CGD3D8DLL_API
|
---|
| 164 | HRESULT cgD3D8UnloadProgram(
|
---|
| 165 | CGprogram prog
|
---|
| 166 | );
|
---|
| 167 |
|
---|
| 168 | CGD3D8DLL_API
|
---|
| 169 | CGbool cgD3D8IsProgramLoaded(
|
---|
| 170 | CGprogram prog
|
---|
| 171 | );
|
---|
| 172 |
|
---|
| 173 | CGD3D8DLL_API
|
---|
| 174 | HRESULT cgD3D8BindProgram(
|
---|
| 175 | CGprogram prog
|
---|
| 176 | );
|
---|
| 177 |
|
---|
| 178 | /* ----- Parameter Management ----------- */
|
---|
| 179 | CGD3D8DLL_API
|
---|
| 180 | HRESULT cgD3D8SetUniform(
|
---|
| 181 | CGparameter param,
|
---|
| 182 | const void* floats
|
---|
| 183 | );
|
---|
| 184 |
|
---|
| 185 | CGD3D8DLL_API
|
---|
| 186 | HRESULT cgD3D8SetUniformArray(
|
---|
| 187 | CGparameter param,
|
---|
| 188 | DWORD offset,
|
---|
| 189 | DWORD numItems,
|
---|
| 190 | const void* values
|
---|
| 191 | );
|
---|
| 192 |
|
---|
| 193 | CGD3D8DLL_API
|
---|
| 194 | HRESULT cgD3D8SetUniformMatrix(
|
---|
| 195 | CGparameter param,
|
---|
| 196 | const D3DMATRIX* matrix
|
---|
| 197 | );
|
---|
| 198 |
|
---|
| 199 | CGD3D8DLL_API
|
---|
| 200 | HRESULT cgD3D8SetUniformMatrixArray(
|
---|
| 201 | CGparameter param,
|
---|
| 202 | DWORD offset,
|
---|
| 203 | DWORD numItems,
|
---|
| 204 | const D3DMATRIX* matrices
|
---|
| 205 | );
|
---|
| 206 |
|
---|
| 207 | CGD3D8DLL_API
|
---|
| 208 | HRESULT cgD3D8SetTexture(
|
---|
| 209 | CGparameter param,
|
---|
| 210 | IDirect3DBaseTexture8* tex
|
---|
| 211 | );
|
---|
| 212 |
|
---|
| 213 | CGD3D8DLL_API
|
---|
| 214 | HRESULT cgD3D8SetTextureStageState(
|
---|
| 215 | CGparameter param,
|
---|
| 216 | D3DTEXTURESTAGESTATETYPE type,
|
---|
| 217 | DWORD value
|
---|
| 218 | );
|
---|
| 219 |
|
---|
| 220 | CGD3D8DLL_API
|
---|
| 221 | HRESULT cgD3D8SetTextureWrapMode(
|
---|
| 222 | CGparameter param,
|
---|
| 223 | DWORD value
|
---|
| 224 | );
|
---|
| 225 |
|
---|
| 226 | /* ----- Parameter Management (Shadowing) ----------- */
|
---|
| 227 | CGD3D8DLL_API
|
---|
| 228 | HRESULT cgD3D8EnableParameterShadowing(
|
---|
| 229 | CGprogram prog,
|
---|
| 230 | CGbool enable
|
---|
| 231 | );
|
---|
| 232 |
|
---|
| 233 | CGD3D8DLL_API
|
---|
| 234 | CGbool cgD3D8IsParameterShadowingEnabled(
|
---|
| 235 | CGprogram prog
|
---|
| 236 | );
|
---|
| 237 |
|
---|
| 238 | /* --------- Profile Options ----------------- */
|
---|
| 239 | CGD3D8DLL_API
|
---|
| 240 | CGprofile cgD3D8GetLatestVertexProfile();
|
---|
| 241 |
|
---|
| 242 | CGD3D8DLL_API
|
---|
| 243 | CGprofile cgD3D8GetLatestPixelProfile();
|
---|
| 244 |
|
---|
| 245 | CGD3D8DLL_API
|
---|
| 246 | char const* cgD3D8GetOptimalOptions(
|
---|
| 247 | CGprofile profile
|
---|
| 248 | );
|
---|
| 249 |
|
---|
| 250 | /* --------- Error reporting ----------------- */
|
---|
| 251 | CGD3D8DLL_API
|
---|
| 252 | HRESULT cgD3D8GetLastError();
|
---|
| 253 |
|
---|
| 254 | CGD3D8DLL_API
|
---|
| 255 | const char* cgD3D8TranslateCGerror(
|
---|
| 256 | CGerror error
|
---|
| 257 | );
|
---|
| 258 |
|
---|
| 259 | CGD3D8DLL_API
|
---|
| 260 | const char* cgD3D8TranslateHRESULT(
|
---|
| 261 | HRESULT hr
|
---|
| 262 | );
|
---|
| 263 |
|
---|
| 264 | CGD3D8DLL_API
|
---|
| 265 | void cgD3D8EnableDebugTracing(
|
---|
| 266 | CGbool enable
|
---|
| 267 | );
|
---|
| 268 |
|
---|
| 269 | #ifdef __cplusplus
|
---|
| 270 | };
|
---|
| 271 | #endif
|
---|
| 272 |
|
---|
| 273 | #endif // WIN32
|
---|
| 274 |
|
---|
| 275 | #endif
|
---|