00001
00002
00003
00004
00005 #ifndef __I_GPU_PROGRAMMING_SERVICES_H_INCLUDED__
00006 #define __I_GPU_PROGRAMMING_SERVICES_H_INCLUDED__
00007
00008 #include "EShaderTypes.h"
00009 #include "EMaterialTypes.h"
00010 #include "EPrimitiveTypes.h"
00011 #include "path.h"
00012
00013 namespace irr
00014 {
00015
00016 namespace io
00017 {
00018 class IReadFile;
00019 }
00020
00021 namespace video
00022 {
00023
00024 class IVideoDriver;
00025 class IShaderConstantSetCallBack;
00026
00028 class IGPUProgrammingServices
00029 {
00030 public:
00031
00033 virtual ~IGPUProgrammingServices() {}
00034
00036
00076 virtual s32 addHighLevelShaderMaterial(
00077 const c8* vertexShaderProgram,
00078 const c8* vertexShaderEntryPointName,
00079 E_VERTEX_SHADER_TYPE vsCompileTarget,
00080 const c8* pixelShaderProgram,
00081 const c8* pixelShaderEntryPointName,
00082 E_PIXEL_SHADER_TYPE psCompileTarget,
00083 const c8* geometryShaderProgram,
00084 const c8* geometryShaderEntryPointName = "main",
00085 E_GEOMETRY_SHADER_TYPE gsCompileTarget = EGST_GS_4_0,
00086 scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES,
00087 scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
00088 u32 verticesOut = 0,
00089 IShaderConstantSetCallBack* callback = 0,
00090 E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
00091 s32 userData = 0 ) = 0;
00092
00094 s32 addHighLevelShaderMaterial(
00095 const c8* vertexShaderProgram,
00096 const c8* vertexShaderEntryPointName = "main",
00097 E_VERTEX_SHADER_TYPE vsCompileTarget = EVST_VS_1_1,
00098 const c8* pixelShaderProgram = 0,
00099 const c8* pixelShaderEntryPointName = "main",
00100 E_PIXEL_SHADER_TYPE psCompileTarget = EPST_PS_1_1,
00101 IShaderConstantSetCallBack* callback = 0,
00102 E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
00103 s32 userData = 0 )
00104 {
00105 return addHighLevelShaderMaterial(
00106 vertexShaderProgram, vertexShaderEntryPointName,
00107 vsCompileTarget, pixelShaderProgram,
00108 pixelShaderEntryPointName, psCompileTarget,
00109 0, "main", EGST_GS_4_0,
00110 scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0,
00111 callback, baseMaterial, userData);
00112 }
00113
00115
00156 virtual s32 addHighLevelShaderMaterialFromFiles(
00157 const io::path& vertexShaderProgramFileName,
00158 const c8* vertexShaderEntryPointName,
00159 E_VERTEX_SHADER_TYPE vsCompileTarget,
00160 const io::path& pixelShaderProgramFileName,
00161 const c8* pixelShaderEntryPointName,
00162 E_PIXEL_SHADER_TYPE psCompileTarget,
00163 const io::path& geometryShaderProgramFileName,
00164 const c8* geometryShaderEntryPointName = "main",
00165 E_GEOMETRY_SHADER_TYPE gsCompileTarget = EGST_GS_4_0,
00166 scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES,
00167 scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
00168 u32 verticesOut = 0,
00169 IShaderConstantSetCallBack* callback = 0,
00170 E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
00171 s32 userData = 0) = 0;
00172
00174 s32 addHighLevelShaderMaterialFromFiles(
00175 const io::path& vertexShaderProgramFileName,
00176 const c8* vertexShaderEntryPointName = "main",
00177 E_VERTEX_SHADER_TYPE vsCompileTarget = EVST_VS_1_1,
00178 const io::path& pixelShaderProgramFileName = "",
00179 const c8* pixelShaderEntryPointName = "main",
00180 E_PIXEL_SHADER_TYPE psCompileTarget = EPST_PS_1_1,
00181 IShaderConstantSetCallBack* callback = 0,
00182 E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
00183 s32 userData = 0)
00184 {
00185 return addHighLevelShaderMaterialFromFiles(
00186 vertexShaderProgramFileName, vertexShaderEntryPointName,
00187 vsCompileTarget, pixelShaderProgramFileName,
00188 pixelShaderEntryPointName, psCompileTarget,
00189 "", "main", EGST_GS_4_0,
00190 scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0,
00191 callback, baseMaterial, userData);
00192 }
00193
00195
00234 virtual s32 addHighLevelShaderMaterialFromFiles(
00235 io::IReadFile* vertexShaderProgram,
00236 const c8* vertexShaderEntryPointName,
00237 E_VERTEX_SHADER_TYPE vsCompileTarget,
00238 io::IReadFile* pixelShaderProgram,
00239 const c8* pixelShaderEntryPointName,
00240 E_PIXEL_SHADER_TYPE psCompileTarget,
00241 io::IReadFile* geometryShaderProgram,
00242 const c8* geometryShaderEntryPointName = "main",
00243 E_GEOMETRY_SHADER_TYPE gsCompileTarget = EGST_GS_4_0,
00244 scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES,
00245 scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP,
00246 u32 verticesOut = 0,
00247 IShaderConstantSetCallBack* callback = 0,
00248 E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
00249 s32 userData = 0) = 0;
00250
00252 s32 addHighLevelShaderMaterialFromFiles(
00253 io::IReadFile* vertexShaderProgram,
00254 const c8* vertexShaderEntryPointName = "main",
00255 E_VERTEX_SHADER_TYPE vsCompileTarget = EVST_VS_1_1,
00256 io::IReadFile* pixelShaderProgram = 0,
00257 const c8* pixelShaderEntryPointName = "main",
00258 E_PIXEL_SHADER_TYPE psCompileTarget = EPST_PS_1_1,
00259 IShaderConstantSetCallBack* callback = 0,
00260 E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
00261 s32 userData = 0)
00262 {
00263 return addHighLevelShaderMaterialFromFiles(
00264 vertexShaderProgram, vertexShaderEntryPointName,
00265 vsCompileTarget, pixelShaderProgram,
00266 pixelShaderEntryPointName, psCompileTarget,
00267 0, "main", EGST_GS_4_0,
00268 scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0,
00269 callback, baseMaterial, userData);
00270 }
00271
00273
00306 virtual s32 addShaderMaterial(const c8* vertexShaderProgram = 0,
00307 const c8* pixelShaderProgram = 0,
00308 IShaderConstantSetCallBack* callback = 0,
00309 E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
00310 s32 userData = 0) = 0;
00311
00313
00330 virtual s32 addShaderMaterialFromFiles(io::IReadFile* vertexShaderProgram,
00331 io::IReadFile* pixelShaderProgram,
00332 IShaderConstantSetCallBack* callback = 0,
00333 E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
00334 s32 userData = 0) = 0;
00335
00337
00355 virtual s32 addShaderMaterialFromFiles(const io::path& vertexShaderProgramFileName,
00356 const io::path& pixelShaderProgramFileName,
00357 IShaderConstantSetCallBack* callback = 0,
00358 E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
00359 s32 userData = 0) = 0;
00360 };
00361
00362
00363 }
00364 }
00365
00366 #endif
00367