Irrlicht 3D Engine
IGPUProgrammingServices.h
Go to the documentation of this file.
1 // Copyright (C) 2002-2012 Nikolaus Gebhardt
2 // This file is part of the "Irrlicht Engine".
3 // For conditions of distribution and use, see copyright notice in irrlicht.h
4 
5 #ifndef __I_GPU_PROGRAMMING_SERVICES_H_INCLUDED__
6 #define __I_GPU_PROGRAMMING_SERVICES_H_INCLUDED__
7 
8 #include "EShaderTypes.h"
9 #include "EMaterialTypes.h"
10 #include "EPrimitiveTypes.h"
11 #include "path.h"
12 
13 namespace irr
14 {
15 
16 namespace io
17 {
18  class IReadFile;
19 } // end namespace io
20 
21 namespace video
22 {
23 
24 class IVideoDriver;
25 class IShaderConstantSetCallBack;
26 
29 {
32 
35 };
36 
39 {
40 public:
41 
44 
46 
87  virtual s32 addHighLevelShaderMaterial(
88  const c8* vertexShaderProgram,
89  const c8* vertexShaderEntryPointName,
90  E_VERTEX_SHADER_TYPE vsCompileTarget,
91  const c8* pixelShaderProgram,
92  const c8* pixelShaderEntryPointName,
93  E_PIXEL_SHADER_TYPE psCompileTarget,
94  const c8* geometryShaderProgram,
95  const c8* geometryShaderEntryPointName = "main",
96  E_GEOMETRY_SHADER_TYPE gsCompileTarget = EGST_GS_4_0,
99  u32 verticesOut = 0,
100  IShaderConstantSetCallBack* callback = 0,
101  E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
102  s32 userData = 0,
103  E_GPU_SHADING_LANGUAGE shadingLang = EGSL_DEFAULT) = 0;
104 
107  const c8* vertexShaderProgram,
108  const c8* vertexShaderEntryPointName="main",
109  E_VERTEX_SHADER_TYPE vsCompileTarget=EVST_VS_1_1,
110  const c8* pixelShaderProgram=0,
111  const c8* pixelShaderEntryPointName="main",
112  E_PIXEL_SHADER_TYPE psCompileTarget=EPST_PS_1_1,
113  IShaderConstantSetCallBack* callback=0,
114  E_MATERIAL_TYPE baseMaterial=video::EMT_SOLID,
115  s32 userData=0,
117  {
118  return addHighLevelShaderMaterial(
119  vertexShaderProgram, vertexShaderEntryPointName,
120  vsCompileTarget, pixelShaderProgram,
121  pixelShaderEntryPointName, psCompileTarget,
122  0, "main", EGST_GS_4_0,
124  callback, baseMaterial, userData, shadingLang);
125  }
126 
128 
132  const c8* vertexShaderProgram,
133  const c8* pixelShaderProgram=0,
134  IShaderConstantSetCallBack* callback=0,
135  E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
136  s32 userData=0)
137  {
138  return addHighLevelShaderMaterial(
139  vertexShaderProgram, "main",
140  EVST_VS_1_1, pixelShaderProgram,
141  "main", EPST_PS_1_1,
142  0, "main", EGST_GS_4_0,
144  callback, baseMaterial, userData);
145  }
146 
148 
152  const c8* vertexShaderProgram,
153  const c8* pixelShaderProgram = 0,
154  const c8* geometryShaderProgram = 0,
157  u32 verticesOut = 0,
158  IShaderConstantSetCallBack* callback = 0,
159  E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
160  s32 userData = 0 )
161  {
162  return addHighLevelShaderMaterial(
163  vertexShaderProgram, "main",
164  EVST_VS_1_1, pixelShaderProgram,
165  "main", EPST_PS_1_1,
166  geometryShaderProgram, "main", EGST_GS_4_0,
167  inType, outType, verticesOut,
168  callback, baseMaterial, userData);
169  }
170 
172 
214  virtual s32 addHighLevelShaderMaterialFromFiles(
215  const io::path& vertexShaderProgramFileName,
216  const c8* vertexShaderEntryPointName,
217  E_VERTEX_SHADER_TYPE vsCompileTarget,
218  const io::path& pixelShaderProgramFileName,
219  const c8* pixelShaderEntryPointName,
220  E_PIXEL_SHADER_TYPE psCompileTarget,
221  const io::path& geometryShaderProgramFileName,
222  const c8* geometryShaderEntryPointName = "main",
223  E_GEOMETRY_SHADER_TYPE gsCompileTarget = EGST_GS_4_0,
226  u32 verticesOut = 0,
227  IShaderConstantSetCallBack* callback = 0,
228  E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
229  s32 userData = 0,
230  E_GPU_SHADING_LANGUAGE shadingLang = EGSL_DEFAULT) = 0;
231 
234  const io::path& vertexShaderProgramFileName,
235  const c8* vertexShaderEntryPointName = "main",
236  E_VERTEX_SHADER_TYPE vsCompileTarget = EVST_VS_1_1,
237  const io::path& pixelShaderProgramFileName = "",
238  const c8* pixelShaderEntryPointName = "main",
239  E_PIXEL_SHADER_TYPE psCompileTarget = EPST_PS_1_1,
240  IShaderConstantSetCallBack* callback = 0,
241  E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
242  s32 userData = 0,
243  E_GPU_SHADING_LANGUAGE shadingLang = EGSL_DEFAULT)
244  {
245  return addHighLevelShaderMaterialFromFiles(
246  vertexShaderProgramFileName, vertexShaderEntryPointName,
247  vsCompileTarget, pixelShaderProgramFileName,
248  pixelShaderEntryPointName, psCompileTarget,
249  "", "main", EGST_GS_4_0,
251  callback, baseMaterial, userData, shadingLang);
252  }
253 
255 
259  const io::path& vertexShaderProgramFileName,
260  const io::path& pixelShaderProgramFileName = "",
261  IShaderConstantSetCallBack* callback = 0,
262  E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
263  s32 userData = 0 )
264  {
265  return addHighLevelShaderMaterialFromFiles(
266  vertexShaderProgramFileName, "main",
267  EVST_VS_1_1, pixelShaderProgramFileName,
268  "main", EPST_PS_1_1,
269  "", "main", EGST_GS_4_0,
271  callback, baseMaterial, userData);
272  }
273 
275 
279  const io::path& vertexShaderProgramFileName,
280  const io::path& pixelShaderProgramFileName = "",
281  const io::path& geometryShaderProgramFileName = "",
284  u32 verticesOut = 0,
285  IShaderConstantSetCallBack* callback = 0,
286  E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
287  s32 userData = 0 )
288  {
289  return addHighLevelShaderMaterialFromFiles(
290  vertexShaderProgramFileName, "main",
291  EVST_VS_1_1, pixelShaderProgramFileName,
292  "main", EPST_PS_1_1,
293  geometryShaderProgramFileName, "main", EGST_GS_4_0,
294  inType, outType, verticesOut,
295  callback, baseMaterial, userData);
296  }
297 
299 
339  virtual s32 addHighLevelShaderMaterialFromFiles(
340  io::IReadFile* vertexShaderProgram,
341  const c8* vertexShaderEntryPointName,
342  E_VERTEX_SHADER_TYPE vsCompileTarget,
343  io::IReadFile* pixelShaderProgram,
344  const c8* pixelShaderEntryPointName,
345  E_PIXEL_SHADER_TYPE psCompileTarget,
346  io::IReadFile* geometryShaderProgram,
347  const c8* geometryShaderEntryPointName = "main",
348  E_GEOMETRY_SHADER_TYPE gsCompileTarget = EGST_GS_4_0,
351  u32 verticesOut = 0,
352  IShaderConstantSetCallBack* callback = 0,
353  E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
354  s32 userData = 0,
355  E_GPU_SHADING_LANGUAGE shadingLang = EGSL_DEFAULT) = 0;
356 
359  io::IReadFile* vertexShaderProgram,
360  const c8* vertexShaderEntryPointName = "main",
361  E_VERTEX_SHADER_TYPE vsCompileTarget = EVST_VS_1_1,
362  io::IReadFile* pixelShaderProgram = 0,
363  const c8* pixelShaderEntryPointName = "main",
364  E_PIXEL_SHADER_TYPE psCompileTarget = EPST_PS_1_1,
365  IShaderConstantSetCallBack* callback = 0,
366  E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
367  s32 userData = 0,
368  E_GPU_SHADING_LANGUAGE shadingLang = EGSL_DEFAULT)
369  {
370  return addHighLevelShaderMaterialFromFiles(
371  vertexShaderProgram, vertexShaderEntryPointName,
372  vsCompileTarget, pixelShaderProgram,
373  pixelShaderEntryPointName, psCompileTarget,
374  0, "main", EGST_GS_4_0,
376  callback, baseMaterial, userData, shadingLang);
377  }
378 
380 
413  virtual s32 addShaderMaterial(const c8* vertexShaderProgram = 0,
414  const c8* pixelShaderProgram = 0,
415  IShaderConstantSetCallBack* callback = 0,
416  E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
417  s32 userData = 0) = 0;
418 
420 
437  virtual s32 addShaderMaterialFromFiles(io::IReadFile* vertexShaderProgram,
438  io::IReadFile* pixelShaderProgram,
439  IShaderConstantSetCallBack* callback = 0,
440  E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
441  s32 userData = 0) = 0;
442 
444 
462  virtual s32 addShaderMaterialFromFiles(const io::path& vertexShaderProgramFileName,
463  const io::path& pixelShaderProgramFileName,
464  IShaderConstantSetCallBack* callback = 0,
465  E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,
466  s32 userData = 0) = 0;
467 };
468 
469 
470 } // end namespace video
471 } // end namespace irr
472 
473 #endif
474 
E_GPU_SHADING_LANGUAGE
Enumeration for different types of shading languages.
s32 addHighLevelShaderMaterial(const c8 *vertexShaderProgram, const c8 *pixelShaderProgram=0, const c8 *geometryShaderProgram=0, scene::E_PRIMITIVE_TYPE inType=scene::EPT_TRIANGLES, scene::E_PRIMITIVE_TYPE outType=scene::EPT_TRIANGLE_STRIP, u32 verticesOut=0, IShaderConstantSetCallBack *callback=0, E_MATERIAL_TYPE baseMaterial=video::EMT_SOLID, s32 userData=0)
convenience function for use with many defaults, with geometry shader
Interface providing read acess to a file.
Definition: IReadFile.h:17
s32 addHighLevelShaderMaterialFromFiles(io::IReadFile *vertexShaderProgram, const c8 *vertexShaderEntryPointName="main", E_VERTEX_SHADER_TYPE vsCompileTarget=EVST_VS_1_1, io::IReadFile *pixelShaderProgram=0, const c8 *pixelShaderEntryPointName="main", E_PIXEL_SHADER_TYPE psCompileTarget=EPST_PS_1_1, IShaderConstantSetCallBack *callback=0, E_MATERIAL_TYPE baseMaterial=video::EMT_SOLID, s32 userData=0, E_GPU_SHADING_LANGUAGE shadingLang=EGSL_DEFAULT)
convenience function for use without geometry shaders
E_PRIMITIVE_TYPE
Enumeration for all primitive types there are.
E_MATERIAL_TYPE
Abstracted and easy to use fixed function/programmable pipeline material modes.
char c8
8 bit character variable.
Definition: irrTypes.h:31
E_PIXEL_SHADER_TYPE
Compile target enumeration for the addHighLevelShaderMaterial() method.
Definition: EShaderTypes.h:38
Everything in the Irrlicht Engine can be found in this namespace.
Definition: aabbox3d.h:12
signed int s32
32 bit signed variable.
Definition: irrTypes.h:66
Interface making it possible to set constants for gpu programs every frame.
E_GEOMETRY_SHADER_TYPE
Enum for supported geometry shader types.
Definition: EShaderTypes.h:72
unsigned int u32
32 bit unsigned variable.
Definition: irrTypes.h:58
Explicitly set all vertices for each triangle.
E_VERTEX_SHADER_TYPE
Compile target enumeration for the addHighLevelShaderMaterial() method.
Definition: EShaderTypes.h:12
s32 addHighLevelShaderMaterial(const c8 *vertexShaderProgram, const c8 *vertexShaderEntryPointName="main", E_VERTEX_SHADER_TYPE vsCompileTarget=EVST_VS_1_1, const c8 *pixelShaderProgram=0, const c8 *pixelShaderEntryPointName="main", E_PIXEL_SHADER_TYPE psCompileTarget=EPST_PS_1_1, IShaderConstantSetCallBack *callback=0, E_MATERIAL_TYPE baseMaterial=video::EMT_SOLID, s32 userData=0, E_GPU_SHADING_LANGUAGE shadingLang=EGSL_DEFAULT)
convenience function for use without geometry shaders
s32 addHighLevelShaderMaterial(const c8 *vertexShaderProgram, const c8 *pixelShaderProgram=0, IShaderConstantSetCallBack *callback=0, E_MATERIAL_TYPE baseMaterial=video::EMT_SOLID, s32 userData=0)
convenience function for use with many defaults, without geometry shader
Standard solid material.
s32 addHighLevelShaderMaterialFromFiles(const io::path &vertexShaderProgramFileName, const io::path &pixelShaderProgramFileName="", IShaderConstantSetCallBack *callback=0, E_MATERIAL_TYPE baseMaterial=video::EMT_SOLID, s32 userData=0)
convenience function for use with many defaults, without geometry shader
The default language, so HLSL for Direct3D and GLSL for OpenGL.
s32 addHighLevelShaderMaterialFromFiles(const io::path &vertexShaderProgramFileName, const io::path &pixelShaderProgramFileName="", const io::path &geometryShaderProgramFileName="", scene::E_PRIMITIVE_TYPE inType=scene::EPT_TRIANGLES, scene::E_PRIMITIVE_TYPE outType=scene::EPT_TRIANGLE_STRIP, u32 verticesOut=0, IShaderConstantSetCallBack *callback=0, E_MATERIAL_TYPE baseMaterial=video::EMT_SOLID, s32 userData=0)
convenience function for use with many defaults, with geometry shader
Cg shading language.*/.
s32 addHighLevelShaderMaterialFromFiles(const io::path &vertexShaderProgramFileName, const c8 *vertexShaderEntryPointName="main", E_VERTEX_SHADER_TYPE vsCompileTarget=EVST_VS_1_1, const io::path &pixelShaderProgramFileName="", const c8 *pixelShaderEntryPointName="main", E_PIXEL_SHADER_TYPE psCompileTarget=EPST_PS_1_1, IShaderConstantSetCallBack *callback=0, E_MATERIAL_TYPE baseMaterial=video::EMT_SOLID, s32 userData=0, E_GPU_SHADING_LANGUAGE shadingLang=EGSL_DEFAULT)
convenience function for use without geometry shaders
Interface making it possible to create and use programs running on the GPU.