00001
00002
00003
00004
00005 #ifndef __I_GPU_PROGRAMMING_SERVICES_H_INCLUDED__
00006 #define __I_GPU_PROGRAMMING_SERVICES_H_INCLUDED__
00007
00008 #include "IReferenceCounted.h"
00009 #include "SMaterial.h"
00010
00011 namespace irr
00012 {
00013
00014 namespace io
00015 {
00016 class IReadFile;
00017 }
00018
00019 namespace video
00020 {
00021
00022 class IVideoDriver;
00023 class IShaderConstantSetCallBack;
00024
00026 enum E_VERTEX_SHADER_TYPE
00027 {
00028 EVST_VS_1_1 = 0,
00029 EVST_VS_2_0,
00030 EVST_VS_2_a,
00031 EVST_VS_3_0,
00032
00034 EVST_COUNT
00035 };
00036
00038 const c8* const VERTEX_SHADER_TYPE_NAMES[] = {
00039 "vs_1_1",
00040 "vs_2_0",
00041 "vs_2_a",
00042 "vs_3_0",
00043 0 };
00044
00046 enum E_PIXEL_SHADER_TYPE
00047 {
00048 EPST_PS_1_1 = 0,
00049 EPST_PS_1_2,
00050 EPST_PS_1_3,
00051 EPST_PS_1_4,
00052 EPST_PS_2_0,
00053 EPST_PS_2_a,
00054 EPST_PS_2_b,
00055 EPST_PS_3_0,
00056
00058 EPST_COUNT
00059 };
00060
00062 const c8* const PIXEL_SHADER_TYPE_NAMES[] = {
00063 "ps_1_1",
00064 "ps_1_2",
00065 "ps_1_3",
00066 "ps_1_4",
00067 "ps_2_0",
00068 "ps_2_a",
00069 "ps_2_b",
00070 "ps_3_0",
00071 0 };
00072
00074 class IGPUProgrammingServices
00075 {
00076 public:
00077
00079 virtual ~IGPUProgrammingServices() {}
00080
00082
00111 virtual s32 addHighLevelShaderMaterial(
00112 const c8* vertexShaderProgram,
00113 const c8* vertexShaderEntryPointName = "main",
00114 E_VERTEX_SHADER_TYPE vsCompileTarget = EVST_VS_1_1,
00115 const c8* pixelShaderProgram = 0,
00116 const c8* pixelShaderEntryPointName = "main",
00117 E_PIXEL_SHADER_TYPE psCompileTarget = EPST_PS_1_1,
00118 IShaderConstantSetCallBack* callback = 0,
00119 E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
00120 s32 userData = 0 ) = 0;
00121
00123
00158 virtual s32 addHighLevelShaderMaterialFromFiles(
00159 const c8* vertexShaderProgram,
00160 const c8* vertexShaderEntryPointName = "main",
00161 E_VERTEX_SHADER_TYPE vsCompileTarget = EVST_VS_1_1,
00162 const c8* pixelShaderProgram = 0,
00163 const c8* pixelShaderEntryPointName = "main",
00164 E_PIXEL_SHADER_TYPE psCompileTarget = EPST_PS_1_1,
00165 IShaderConstantSetCallBack* callback = 0,
00166 E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
00167 s32 userData = 0) = 0;
00168
00169
00171
00202 virtual s32 addHighLevelShaderMaterialFromFiles(
00203 io::IReadFile* vertexShaderProgram,
00204 const c8* vertexShaderEntryPointName = "main",
00205 E_VERTEX_SHADER_TYPE vsCompileTarget = EVST_VS_1_1,
00206 io::IReadFile* pixelShaderProgram = 0,
00207 const c8* pixelShaderEntryPointName = "main",
00208 E_PIXEL_SHADER_TYPE psCompileTarget = EPST_PS_1_1,
00209 IShaderConstantSetCallBack* callback = 0,
00210 E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
00211 s32 userData = 0) = 0;
00212
00214
00247 virtual s32 addShaderMaterial(const c8* vertexShaderProgram = 0,
00248 const c8* pixelShaderProgram = 0,
00249 IShaderConstantSetCallBack* callback = 0,
00250 E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
00251 s32 userData = 0) = 0;
00252
00254
00271 virtual s32 addShaderMaterialFromFiles(io::IReadFile* vertexShaderProgram,
00272 io::IReadFile* pixelShaderProgram,
00273 IShaderConstantSetCallBack* callback = 0,
00274 E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
00275 s32 userData = 0) = 0;
00276
00278
00296 virtual s32 addShaderMaterialFromFiles(const c8* vertexShaderProgramFileName,
00297 const c8* pixelShaderProgramFileName,
00298 IShaderConstantSetCallBack* callback = 0,
00299 E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
00300 s32 userData = 0) = 0;
00301 };
00302
00303
00304 }
00305 }
00306
00307 #endif
00308