Home | Namespaces | Hierarchy | Alphabetical List | Class list | Files | Namespace Members | Class members | File members | Tutorials
IVideoDriver.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 __IRR_I_VIDEO_DRIVER_H_INCLUDED__
6 #define __IRR_I_VIDEO_DRIVER_H_INCLUDED__
7 
8 #include "rect.h"
9 #include "SColor.h"
10 #include "ITexture.h"
11 #include "irrArray.h"
12 #include "matrix4.h"
13 #include "plane3d.h"
14 #include "dimension2d.h"
15 #include "position2d.h"
16 #include "SMaterial.h"
17 #include "IMeshBuffer.h"
18 #include "triangle3d.h"
19 #include "EDriverTypes.h"
20 #include "EDriverFeatures.h"
21 #include "SExposedVideoData.h"
22 
23 namespace irr
24 {
25 namespace io
26 {
27  class IAttributes;
28  struct SAttributeReadWriteOptions;
29  class IReadFile;
30  class IWriteFile;
31 } // end namespace io
32 namespace scene
33 {
34  class IMeshBuffer;
35  class IMesh;
36  class IMeshManipulator;
37  class ISceneNode;
38 } // end namespace scene
39 
40 namespace video
41 {
42  struct S3DVertex;
43  struct S3DVertex2TCoords;
44  struct S3DVertexTangents;
45  struct SLight;
46  class IImageLoader;
47  class IImageWriter;
48  class IMaterialRenderer;
49  class IGPUProgrammingServices;
50 
53  {
55  ETS_VIEW = 0,
68 #if _IRR_MATERIAL_MAX_TEXTURES_>4
69 
70  ETS_TEXTURE_4,
71 #if _IRR_MATERIAL_MAX_TEXTURES_>5
72 
73  ETS_TEXTURE_5,
74 #if _IRR_MATERIAL_MAX_TEXTURES_>6
75 
76  ETS_TEXTURE_6,
77 #if _IRR_MATERIAL_MAX_TEXTURES_>7
78 
79  ETS_TEXTURE_7,
80 #endif
81 #endif
82 #endif
83 #endif
84 
86  };
87 
89 
93  {
99  ELR_RTTS = 4,
102  };
103 
105 
107  {
130  };
131 
134  {
138  };
139 
140  const c8* const FogTypeNames[] =
141  {
142  "FogExp",
143  "FogLinear",
144  "FogExp2",
145  0
146  };
147 
149  {
153 
156 
159 
161  bool Enabled;
162 
165 
167  void apply(SMaterial& material)
168  {
169  if (Enabled)
170  {
171  for (u32 i=0; i<32; ++i)
172  {
173  const u32 num=(1<<i);
174  if (EnableFlags & num)
175  {
176  switch (num)
177  {
178  case EMF_WIREFRAME: material.Wireframe = Material.Wireframe; break;
179  case EMF_POINTCLOUD: material.PointCloud = Material.PointCloud; break;
181  case EMF_LIGHTING: material.Lighting = Material.Lighting; break;
182  case EMF_ZBUFFER: material.ZBuffer = Material.ZBuffer; break;
183  case EMF_ZWRITE_ENABLE: material.ZWriteEnable = Material.ZWriteEnable; break;
189  case EMF_FOG_ENABLE: material.FogEnable = Material.FogEnable; break;
191  case EMF_TEXTURE_WRAP:
194  break;
195  case EMF_ANTI_ALIASING: material.AntiAliasing = Material.AntiAliasing; break;
196  case EMF_COLOR_MASK: material.ColorMask = Material.ColorMask; break;
197  case EMF_COLOR_MATERIAL: material.ColorMaterial = Material.ColorMaterial; break;
198  case EMF_USE_MIP_MAPS: material.UseMipMaps = Material.UseMipMaps; break;
200  case EMF_POLYGON_OFFSET:
203  }
204  }
205  }
206  }
207  }
208 
209  };
210 
212  {
214  E_COLOR_PLANE colorMask=ECP_ALL,
215  E_BLEND_FACTOR blendFuncSrc=EBF_ONE,
217  E_BLEND_OPERATION blendOp=EBO_NONE) :
218  RenderTexture(texture),
220  BlendFuncSrc(blendFuncSrc), BlendFuncDst(blendFuncDst),
221  BlendOp(blendOp) {}
223  E_COLOR_PLANE colorMask=ECP_ALL,
224  E_BLEND_FACTOR blendFuncSrc=EBF_ONE,
226  E_BLEND_OPERATION blendOp=EBO_NONE) :
227  RenderTexture(0),
228  TargetType(target), ColorMask(colorMask),
229  BlendFuncSrc(blendFuncSrc), BlendFuncDst(blendFuncDst),
230  BlendOp(blendOp) {}
231  bool operator!=(const IRenderTarget& other) const
232  {
233  return ((RenderTexture != other.RenderTexture) ||
234  (TargetType != other.TargetType) ||
235  (ColorMask != other.ColorMask) ||
236  (BlendFuncSrc != other.BlendFuncSrc) ||
237  (BlendFuncDst != other.BlendFuncDst) ||
238  (BlendOp != other.BlendOp));
239  }
246  };
247 
249 
256  class IVideoDriver : public virtual IReferenceCounted
257  {
258  public:
259 
261 
278  virtual bool beginScene(bool backBuffer=true, bool zBuffer=true,
279  SColor color=SColor(255,0,0,0),
280  const SExposedVideoData& videoData=SExposedVideoData(),
281  core::rect<s32>* sourceRect=0) =0;
282 
284 
287  virtual bool endScene() =0;
288 
290 
293  virtual bool queryFeature(E_VIDEO_DRIVER_FEATURE feature) const =0;
294 
296 
300  virtual void disableFeature(E_VIDEO_DRIVER_FEATURE feature, bool flag=true) =0;
301 
303 
319  virtual const io::IAttributes& getDriverAttributes() const=0;
320 
322 
325  virtual bool checkDriverReset() =0;
326 
328 
331  virtual void setTransform(E_TRANSFORMATION_STATE state, const core::matrix4& mat) =0;
332 
334 
336  virtual const core::matrix4& getTransform(E_TRANSFORMATION_STATE state) const =0;
337 
339 
340  virtual u32 getImageLoaderCount() const = 0;
341 
343 
346  virtual IImageLoader* getImageLoader(u32 n) = 0;
347 
349 
350  virtual u32 getImageWriterCount() const = 0;
351 
353 
356  virtual IImageWriter* getImageWriter(u32 n) = 0;
357 
359 
361  virtual void setMaterial(const SMaterial& material) =0;
362 
364 
373  virtual ITexture* getTexture(const io::path& filename) = 0;
374 
376 
385  virtual ITexture* getTexture(io::IReadFile* file) =0;
386 
388 
394  virtual ITexture* getTextureByIndex(u32 index) =0;
395 
397 
398  virtual u32 getTextureCount() const = 0;
399 
401 
403  virtual void renameTexture(ITexture* texture, const io::path& newName) = 0;
404 
406 
415  virtual ITexture* addTexture(const core::dimension2d<u32>& size,
416  const io::path& name, ECOLOR_FORMAT format = ECF_A8R8G8B8) = 0;
417 
419 
429  virtual ITexture* addTexture(const io::path& name, IImage* image, void* mipmapData=0) = 0;
430 
432 
442  const io::path& name = "rt", const ECOLOR_FORMAT format = ECF_UNKNOWN) =0;
443 
445 
452  virtual void removeTexture(ITexture* texture) =0;
453 
455 
461  virtual void removeAllTextures() =0;
462 
464  virtual void removeHardwareBuffer(const scene::IMeshBuffer* mb) =0;
465 
467  virtual void removeAllHardwareBuffers() =0;
468 
470 
471  virtual void addOcclusionQuery(scene::ISceneNode* node,
472  const scene::IMesh* mesh=0) =0;
473 
475  virtual void removeOcclusionQuery(scene::ISceneNode* node) =0;
476 
478  virtual void removeAllOcclusionQueries() =0;
479 
481 
483  virtual void runOcclusionQuery(scene::ISceneNode* node, bool visible=false) =0;
484 
486 
488  virtual void runAllOcclusionQueries(bool visible=false) =0;
489 
491 
493  virtual void updateOcclusionQuery(scene::ISceneNode* node, bool block=true) =0;
494 
496 
498  virtual void updateAllOcclusionQueries(bool block=true) =0;
499 
501 
504  virtual u32 getOcclusionQueryResult(scene::ISceneNode* node) const =0;
505 
507 
523  virtual void makeColorKeyTexture(video::ITexture* texture,
524  video::SColor color,
525  bool zeroTexels = false) const =0;
526 
528 
540  virtual void makeColorKeyTexture(video::ITexture* texture,
541  core::position2d<s32> colorKeyPixelPos,
542  bool zeroTexels = false) const =0;
543 
545 
552  virtual void makeNormalMapTexture(video::ITexture* texture, f32 amplitude=1.0f) const =0;
553 
555 
586  virtual bool setRenderTarget(video::ITexture* texture,
587  bool clearBackBuffer=true, bool clearZBuffer=true,
588  SColor color=video::SColor(0,0,0,0)) =0;
589 
591 
602  virtual bool setRenderTarget(E_RENDER_TARGET target, bool clearTarget=true,
603  bool clearZBuffer=true,
604  SColor color=video::SColor(0,0,0,0)) =0;
605 
607  virtual bool setRenderTarget(const core::array<video::IRenderTarget>& texture,
608  bool clearBackBuffer=true, bool clearZBuffer=true,
609  SColor color=video::SColor(0,0,0,0)) =0;
610 
612 
615  virtual void setViewPort(const core::rect<s32>& area) =0;
616 
618 
619  virtual const core::rect<s32>& getViewPort() const =0;
620 
622 
636  virtual void drawVertexPrimitiveList(const void* vertices, u32 vertexCount,
637  const void* indexList, u32 primCount,
640  E_INDEX_TYPE iType=EIT_16BIT) =0;
641 
643 
662  virtual void draw2DVertexPrimitiveList(const void* vertices, u32 vertexCount,
663  const void* indexList, u32 primCount,
666  E_INDEX_TYPE iType=EIT_16BIT) =0;
667 
669 
677  void drawIndexedTriangleList(const S3DVertex* vertices,
678  u32 vertexCount, const u16* indexList, u32 triangleCount)
679  {
680  drawVertexPrimitiveList(vertices, vertexCount, indexList, triangleCount, EVT_STANDARD, scene::EPT_TRIANGLES, EIT_16BIT);
681  }
682 
684 
693  u32 vertexCount, const u16* indexList, u32 triangleCount)
694  {
695  drawVertexPrimitiveList(vertices, vertexCount, indexList, triangleCount, EVT_2TCOORDS, scene::EPT_TRIANGLES, EIT_16BIT);
696  }
697 
699 
708  u32 vertexCount, const u16* indexList, u32 triangleCount)
709  {
710  drawVertexPrimitiveList(vertices, vertexCount, indexList, triangleCount, EVT_TANGENTS, scene::EPT_TRIANGLES, EIT_16BIT);
711  }
712 
714 
722  void drawIndexedTriangleFan(const S3DVertex* vertices,
723  u32 vertexCount, const u16* indexList, u32 triangleCount)
724  {
725  drawVertexPrimitiveList(vertices, vertexCount, indexList, triangleCount, EVT_STANDARD, scene::EPT_TRIANGLE_FAN, EIT_16BIT);
726  }
727 
729 
738  u32 vertexCount, const u16* indexList, u32 triangleCount)
739  {
740  drawVertexPrimitiveList(vertices, vertexCount, indexList, triangleCount, EVT_2TCOORDS, scene::EPT_TRIANGLE_FAN, EIT_16BIT);
741  }
742 
744 
753  u32 vertexCount, const u16* indexList, u32 triangleCount)
754  {
755  drawVertexPrimitiveList(vertices, vertexCount, indexList, triangleCount, EVT_TANGENTS, scene::EPT_TRIANGLE_FAN, EIT_16BIT);
756  }
757 
759 
773  virtual void draw3DLine(const core::vector3df& start,
774  const core::vector3df& end, SColor color = SColor(255,255,255,255)) =0;
775 
777 
790  virtual void draw3DTriangle(const core::triangle3df& triangle,
791  SColor color = SColor(255,255,255,255)) =0;
792 
794 
805  virtual void draw3DBox(const core::aabbox3d<f32>& box,
806  SColor color = SColor(255,255,255,255)) =0;
807 
809 
812  virtual void draw2DImage(const video::ITexture* texture,
813  const core::position2d<s32>& destPos) =0;
814 
816 
831  virtual void draw2DImage(const video::ITexture* texture, const core::position2d<s32>& destPos,
832  const core::rect<s32>& sourceRect, const core::rect<s32>* clipRect =0,
833  SColor color=SColor(255,255,255,255), bool useAlphaChannelOfTexture=false) =0;
834 
836 
855  virtual void draw2DImageBatch(const video::ITexture* texture,
856  const core::position2d<s32>& pos,
857  const core::array<core::rect<s32> >& sourceRects,
858  const core::array<s32>& indices,
859  s32 kerningWidth=0,
860  const core::rect<s32>* clipRect=0,
861  SColor color=SColor(255,255,255,255),
862  bool useAlphaChannelOfTexture=false) =0;
863 
865 
880  virtual void draw2DImageBatch(const video::ITexture* texture,
881  const core::array<core::position2d<s32> >& positions,
882  const core::array<core::rect<s32> >& sourceRects,
883  const core::rect<s32>* clipRect=0,
884  SColor color=SColor(255,255,255,255),
885  bool useAlphaChannelOfTexture=false) =0;
886 
888 
897  virtual void draw2DImage(const video::ITexture* texture, const core::rect<s32>& destRect,
898  const core::rect<s32>& sourceRect, const core::rect<s32>* clipRect =0,
899  const video::SColor * const colors=0, bool useAlphaChannelOfTexture=false) =0;
900 
902 
909  virtual void draw2DRectangle(SColor color, const core::rect<s32>& pos,
910  const core::rect<s32>* clip =0) =0;
911 
913 
929  virtual void draw2DRectangle(const core::rect<s32>& pos,
930  SColor colorLeftUp, SColor colorRightUp,
931  SColor colorLeftDown, SColor colorRightDown,
932  const core::rect<s32>* clip =0) =0;
933 
935 
938  virtual void draw2DRectangleOutline(const core::recti& pos,
939  SColor color=SColor(255,255,255,255)) =0;
940 
942 
947  virtual void draw2DLine(const core::position2d<s32>& start,
948  const core::position2d<s32>& end,
949  SColor color=SColor(255,255,255,255)) =0;
950 
952 
955  virtual void drawPixel(u32 x, u32 y, const SColor& color) =0;
956 
958 
970  virtual void draw2DPolygon(core::position2d<s32> center,
971  f32 radius,
972  video::SColor color=SColor(100,255,255,255),
973  s32 vertexCount=10) =0;
974 
976 
989  virtual void drawStencilShadowVolume(const core::array<core::vector3df>& triangles, bool zfail=true, u32 debugDataVisible=0) =0;
990 
992 
1011  virtual void drawStencilShadow(bool clearStencilBuffer=false,
1012  video::SColor leftUpEdge = video::SColor(255,0,0,0),
1013  video::SColor rightUpEdge = video::SColor(255,0,0,0),
1014  video::SColor leftDownEdge = video::SColor(255,0,0,0),
1015  video::SColor rightDownEdge = video::SColor(255,0,0,0)) =0;
1016 
1018 
1019  virtual void drawMeshBuffer(const scene::IMeshBuffer* mb) =0;
1020 
1022 
1026  virtual void drawMeshBufferNormals(const scene::IMeshBuffer* mb, f32 length=10.f, SColor color=0xffffffff) =0;
1027 
1029 
1045  virtual void setFog(SColor color=SColor(0,255,255,255),
1046  E_FOG_TYPE fogType=EFT_FOG_LINEAR,
1047  f32 start=50.0f, f32 end=100.0f, f32 density=0.01f,
1048  bool pixelFog=false, bool rangeFog=false) =0;
1049 
1051  virtual void getFog(SColor& color, E_FOG_TYPE& fogType,
1052  f32& start, f32& end, f32& density,
1053  bool& pixelFog, bool& rangeFog) = 0;
1054 
1056 
1057  virtual ECOLOR_FORMAT getColorFormat() const =0;
1058 
1060 
1061  virtual const core::dimension2d<u32>& getScreenSize() const =0;
1062 
1064 
1068  virtual const core::dimension2d<u32>& getCurrentRenderTargetSize() const =0;
1069 
1071 
1076  virtual s32 getFPS() const =0;
1077 
1079 
1083  virtual u32 getPrimitiveCountDrawn( u32 mode =0 ) const =0;
1084 
1086  virtual void deleteAllDynamicLights() =0;
1087 
1091  virtual s32 addDynamicLight(const SLight& light) =0;
1092 
1094 
1095  virtual u32 getMaximalDynamicLightAmount() const =0;
1096 
1098 
1099  virtual u32 getDynamicLightCount() const =0;
1100 
1102 
1105  virtual const SLight& getDynamicLight(u32 idx) const =0;
1106 
1110  virtual void turnLightOn(s32 lightIndex, bool turnOn) =0;
1111 
1113 
1115  virtual const wchar_t* getName() const =0;
1116 
1118 
1124  virtual void addExternalImageLoader(IImageLoader* loader) =0;
1125 
1127 
1133  virtual void addExternalImageWriter(IImageWriter* writer) =0;
1134 
1136 
1139  virtual u32 getMaximalPrimitiveCount() const =0;
1140 
1142 
1151  virtual void setTextureCreationFlag(E_TEXTURE_CREATION_FLAG flag, bool enabled=true) =0;
1152 
1154 
1157  virtual bool getTextureCreationFlag(E_TEXTURE_CREATION_FLAG flag) const =0;
1158 
1160 
1168  virtual IImage* createImageFromFile(const io::path& filename) = 0;
1169 
1171 
1178  virtual IImage* createImageFromFile(io::IReadFile* file) =0;
1179 
1181 
1188  virtual bool writeImageToFile(IImage* image, const io::path& filename, u32 param = 0) = 0;
1189 
1191 
1199  virtual bool writeImageToFile(IImage* image, io::IWriteFile* file, u32 param =0) =0;
1200 
1202 
1216  virtual IImage* createImageFromData(ECOLOR_FORMAT format,
1217  const core::dimension2d<u32>& size, void *data,
1218  bool ownForeignMemory=false,
1219  bool deleteMemory = true) =0;
1220 
1222 
1228  virtual IImage* createImage(ECOLOR_FORMAT format, const core::dimension2d<u32>& size) =0;
1229 
1231 
1237  _IRR_DEPRECATED_ virtual IImage* createImage(ECOLOR_FORMAT format, IImage *imageToCopy) =0;
1238 
1240 
1247  _IRR_DEPRECATED_ virtual IImage* createImage(IImage* imageToCopy,
1248  const core::position2d<s32>& pos,
1249  const core::dimension2d<u32>& size) =0;
1250 
1252 
1259  virtual IImage* createImage(ITexture* texture,
1260  const core::position2d<s32>& pos,
1261  const core::dimension2d<u32>& size) =0;
1262 
1264 
1266  virtual void OnResize(const core::dimension2d<u32>& size) =0;
1267 
1269 
1289  virtual s32 addMaterialRenderer(IMaterialRenderer* renderer, const c8* name =0) =0;
1290 
1292 
1296  virtual IMaterialRenderer* getMaterialRenderer(u32 idx) =0;
1297 
1299 
1300  virtual u32 getMaterialRendererCount() const =0;
1301 
1303 
1312  virtual const c8* getMaterialRendererName(u32 idx) const =0;
1313 
1315 
1320  virtual void setMaterialRendererName(s32 idx, const c8* name) =0;
1321 
1323 
1333  io::SAttributeReadWriteOptions* options=0) =0;
1334 
1336 
1342  virtual void fillMaterialStructureFromAttributes(video::SMaterial& outMaterial, io::IAttributes* attributes) =0;
1343 
1345 
1348  virtual const SExposedVideoData& getExposedVideoData() =0;
1349 
1351 
1352  virtual E_DRIVER_TYPE getDriverType() const =0;
1353 
1355 
1359 
1362 
1364 
1370  virtual void clearZBuffer() =0;
1371 
1373 
1375 
1377 
1381  virtual video::ITexture* findTexture(const io::path& filename) = 0;
1382 
1384 
1392  virtual bool setClipPlane(u32 index, const core::plane3df& plane, bool enable=false) =0;
1393 
1395 
1401  virtual void enableClipPlane(u32 index, bool enable) =0;
1402 
1404 
1405  virtual void setMinHardwareBufferVertexCount(u32 count) =0;
1406 
1408 
1412  virtual SOverrideMaterial& getOverrideMaterial() =0;
1413 
1415 
1428  virtual SMaterial& getMaterial2D() =0;
1429 
1431 
1433  virtual void enableMaterial2D(bool enable=true) =0;
1434 
1436  virtual core::stringc getVendorInfo() =0;
1437 
1439 
1442  virtual void setAmbientLight(const SColorf& color) =0;
1443 
1445 
1448  virtual void setAllowZWriteOnTransparent(bool flag) =0;
1449 
1451  virtual core::dimension2du getMaxTextureSize() const =0;
1452 
1454 
1463  virtual void convertColor(const void* sP, ECOLOR_FORMAT sF, s32 sN,
1464  void* dP, ECOLOR_FORMAT dF) const =0;
1465  };
1466 
1467 } // end namespace video
1468 } // end namespace irr
1469 
1470 
1471 #endif

The Irrlicht Engine
The Irrlicht Engine Documentation © 2003-2010 by Nikolaus Gebhardt. Generated on Mon May 6 2013 07:45:59 by Doxygen (1.8.1.2)