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 #include "path.h"
00011
00012 namespace irr
00013 {
00014
00015 namespace io
00016 {
00017 class IReadFile;
00018 }
00019
00020 namespace video
00021 {
00022
00023 class IVideoDriver;
00024 class IShaderConstantSetCallBack;
00025
00027 enum E_VERTEX_SHADER_TYPE
00028 {
00029 EVST_VS_1_1 = 0,
00030 EVST_VS_2_0,
00031 EVST_VS_2_a,
00032 EVST_VS_3_0,
00033
00035 EVST_COUNT
00036 };
00037
00039 const c8* const VERTEX_SHADER_TYPE_NAMES[] = {
00040 "vs_1_1",
00041 "vs_2_0",
00042 "vs_2_a",
00043 "vs_3_0",
00044 0 };
00045
00047 enum E_PIXEL_SHADER_TYPE
00048 {
00049 EPST_PS_1_1 = 0,
00050 EPST_PS_1_2,
00051 EPST_PS_1_3,
00052 EPST_PS_1_4,
00053 EPST_PS_2_0,
00054 EPST_PS_2_a,
00055 EPST_PS_2_b,
00056 EPST_PS_3_0,
00057
00059 EPST_COUNT
00060 };
00061
00063 const c8* const PIXEL_SHADER_TYPE_NAMES[] = {
00064 "ps_1_1",
00065 "ps_1_2",
00066 "ps_1_3",
00067 "ps_1_4",
00068 "ps_2_0",
00069 "ps_2_a",
00070 "ps_2_b",
00071 "ps_3_0",
00072 0 };
00073
00075 class IGPUProgrammingServices
00076 {
00077 public:
00078
00080 virtual ~IGPUProgrammingServices() {}
00081
00083
00112 virtual s32 addHighLevelShaderMaterial(
00113 const c8* vertexShaderProgram,
00114 const c8* vertexShaderEntryPointName = "main",
00115 E_VERTEX_SHADER_TYPE vsCompileTarget = EVST_VS_1_1,
00116 const c8* pixelShaderProgram = 0,
00117 const c8* pixelShaderEntryPointName = "main",
00118 E_PIXEL_SHADER_TYPE psCompileTarget = EPST_PS_1_1,
00119 IShaderConstantSetCallBack* callback = 0,
00120 E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
00121 s32 userData = 0 ) = 0;
00122
00124
00159 virtual s32 addHighLevelShaderMaterialFromFiles(
00160 const io::path& vertexShaderProgramFileName,
00161 const c8* vertexShaderEntryPointName = "main",
00162 E_VERTEX_SHADER_TYPE vsCompileTarget = EVST_VS_1_1,
00163 const io::path& pixelShaderProgramFileName = "",
00164 const c8* pixelShaderEntryPointName = "main",
00165 E_PIXEL_SHADER_TYPE psCompileTarget = EPST_PS_1_1,
00166 IShaderConstantSetCallBack* callback = 0,
00167 E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
00168 s32 userData = 0) = 0;
00169
00170
00172
00203 virtual s32 addHighLevelShaderMaterialFromFiles(
00204 io::IReadFile* vertexShaderProgram,
00205 const c8* vertexShaderEntryPointName = "main",
00206 E_VERTEX_SHADER_TYPE vsCompileTarget = EVST_VS_1_1,
00207 io::IReadFile* pixelShaderProgram = 0,
00208 const c8* pixelShaderEntryPointName = "main",
00209 E_PIXEL_SHADER_TYPE psCompileTarget = EPST_PS_1_1,
00210 IShaderConstantSetCallBack* callback = 0,
00211 E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
00212 s32 userData = 0) = 0;
00213
00215
00248 virtual s32 addShaderMaterial(const c8* vertexShaderProgram = 0,
00249 const c8* pixelShaderProgram = 0,
00250 IShaderConstantSetCallBack* callback = 0,
00251 E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
00252 s32 userData = 0) = 0;
00253
00255
00272 virtual s32 addShaderMaterialFromFiles(io::IReadFile* vertexShaderProgram,
00273 io::IReadFile* pixelShaderProgram,
00274 IShaderConstantSetCallBack* callback = 0,
00275 E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
00276 s32 userData = 0) = 0;
00277
00279
00297 virtual s32 addShaderMaterialFromFiles(const io::path& vertexShaderProgramFileName,
00298 const io::path& pixelShaderProgramFileName,
00299 IShaderConstantSetCallBack* callback = 0,
00300 E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
00301 s32 userData = 0) = 0;
00302 };
00303
00304
00305 }
00306 }
00307
00308 #endif
00309