5 #ifndef __IRR_I_VIDEO_DRIVER_H_INCLUDED__
6 #define __IRR_I_VIDEO_DRIVER_H_INCLUDED__
28 struct SAttributeReadWriteOptions;
36 class IMeshManipulator;
43 struct S3DVertex2TCoords;
44 struct S3DVertexTangents;
48 class IMaterialRenderer;
49 class IGPUProgrammingServices;
68 #if _IRR_MATERIAL_MAX_TEXTURES_>4
71 #if _IRR_MATERIAL_MAX_TEXTURES_>5
74 #if _IRR_MATERIAL_MAX_TEXTURES_>6
77 #if _IRR_MATERIAL_MAX_TEXTURES_>7
171 for (
u32 i=0; i<32; ++i)
173 const u32 num=(1<<i);
174 if (EnableFlags & num)
278 virtual bool beginScene(
bool backBuffer=
true,
bool zBuffer=
true,
525 bool zeroTexels =
false)
const =0;
541 core::position2d<s32> colorKeyPixelPos,
542 bool zeroTexels =
false)
const =0;
637 const void* indexList,
u32 primCount,
663 const void* indexList,
u32 primCount,
678 u32 vertexCount,
const u16* indexList,
u32 triangleCount)
693 u32 vertexCount,
const u16* indexList,
u32 triangleCount)
708 u32 vertexCount,
const u16* indexList,
u32 triangleCount)
723 u32 vertexCount,
const u16* indexList,
u32 triangleCount)
738 u32 vertexCount,
const u16* indexList,
u32 triangleCount)
753 u32 vertexCount,
const u16* indexList,
u32 triangleCount)
813 const core::position2d<s32>& destPos) =0;
833 SColor color=
SColor(255,255,255,255),
bool useAlphaChannelOfTexture=
false) =0;
856 const core::position2d<s32>& pos,
862 bool useAlphaChannelOfTexture=
false) =0;
881 const core::array<core::position2d<s32> >& positions,
885 bool useAlphaChannelOfTexture=
false) =0;
899 const video::SColor *
const colors=0,
bool useAlphaChannelOfTexture=
false) =0;
947 virtual void draw2DLine(
const core::position2d<s32>& start,
948 const core::position2d<s32>& end,
973 s32 vertexCount=10) =0;
1047 f32 start=50.0f,
f32 end=100.0f,
f32 density=0.01f,
1048 bool pixelFog=
false,
bool rangeFog=
false) =0;
1053 bool& pixelFog,
bool& rangeFog) = 0;
1115 virtual const wchar_t*
getName()
const =0;
1218 bool ownForeignMemory=
false,
1219 bool deleteMemory =
true) =0;
1248 const core::position2d<s32>& pos,
1260 const core::position2d<s32>& pos,
E_RENDER_TARGET
Special render targets, which usually map to dedicated hardware.
SMaterial Material
The Material values.
virtual void addExternalImageWriter(IImageWriter *writer)=0
Adds an external image writer to the engine.
virtual void drawStencilShadow(bool clearStencilBuffer=false, video::SColor leftUpEdge=video::SColor(255, 0, 0, 0), video::SColor rightUpEdge=video::SColor(255, 0, 0, 0), video::SColor leftDownEdge=video::SColor(255, 0, 0, 0), video::SColor rightDownEdge=video::SColor(255, 0, 0, 0))=0
Fills the stencil shadow with color.
virtual void addOcclusionQuery(scene::ISceneNode *node, const scene::IMesh *mesh=0)=0
Create occlusion query.
virtual io::IAttributes * createAttributesFromMaterial(const video::SMaterial &material, io::SAttributeReadWriteOptions *options=0)=0
Creates material attributes list from a material.
u8 ZBuffer
Is the ZBuffer enabled? Default: ECFN_LESSEQUAL.
Is backface culling enabled? Default: true.
virtual void addExternalImageLoader(IImageLoader *loader)=0
Adds an external image loader to the engine.
virtual void setViewPort(const core::rect< s32 > &area)=0
Sets a new viewport.
E_BLEND_FACTOR
Flag for EMT_ONETEXTURE_BLEND, ( BlendFactor ) BlendFunc = source * sourceFactor + dest * destFactor...
virtual void drawVertexPrimitiveList(const void *vertices, u32 vertexCount, const void *indexList, u32 primCount, E_VERTEX_TYPE vType=EVT_STANDARD, scene::E_PRIMITIVE_TYPE pType=scene::EPT_TRIANGLES, E_INDEX_TYPE iType=EIT_16BIT)=0
Draws a vertex primitive list.
virtual void renameTexture(ITexture *texture, const io::path &newName)=0
Renames a texture.
u32 EnableFlags
Which values are taken for override.
virtual void draw2DPolygon(core::position2d< s32 > center, f32 radius, video::SColor color=SColor(100, 255, 255, 255), s32 vertexCount=10)=0
Draws a non filled concyclic regular 2d polyon.
Provides a generic interface for attributes and their values and the possiblity to serialize them...
#define _IRR_DEPRECATED_
Defines a deprecated macro which generates a warning at compile time.
virtual void deleteAllDynamicLights()=0
Deletes all dynamic lights which were previously added with addDynamicLight().
bool FrontfaceCulling
Is frontface culling enabled? Default: false.
Is fog enabled? Default: false.
virtual u32 getMaterialRendererCount() const =0
Get amount of currently available material renderers.
Interface providing read acess to a file.
E_PRIMITIVE_TYPE
Enumeration for all primitive types there are.
E_BLEND_FACTOR BlendFuncSrc
u8 ColorMaterial
Defines the interpretation of vertex color in the lighting equation.
virtual void turnLightOn(s32 lightIndex, bool turnOn)=0
virtual void setTextureCreationFlag(E_TEXTURE_CREATION_FLAG flag, bool enabled=true)=0
Enables or disables a texture creation flag.
virtual const SLight & getDynamicLight(u32 idx) const =0
Returns light data which was previously set by IVideoDriver::addDynamicLight().
virtual bool setRenderTarget(video::ITexture *texture, bool clearBackBuffer=true, bool clearZBuffer=true, SColor color=video::SColor(0, 0, 0, 0))=0
Sets a new render target.
virtual void draw2DLine(const core::position2d< s32 > &start, const core::position2d< s32 > &end, SColor color=SColor(255, 255, 255, 255))=0
Draws a 2d line. Both start and end will be included in coloring.
virtual void removeAllOcclusionQueries()=0
Remove all occlusion queries.
virtual void removeAllHardwareBuffers()=0
Remove all hardware buffers.
float f32
32 bit floating point variable.
virtual bool setClipPlane(u32 index, const core::plane3df &plane, bool enable=false)=0
Set or unset a clipping plane.
virtual void removeOcclusionQuery(scene::ISceneNode *node)=0
Remove occlusion query.
const c8 *const FogTypeNames[]
bool PointCloud
Draw as point cloud or filled triangles? Default: false.
virtual IImage * createImageFromData(ECOLOR_FORMAT format, const core::dimension2d< u32 > &size, void *data, bool ownForeignMemory=false, bool deleteMemory=true)=0
Creates a software image from a byte array.
Is the ZBuffer enabled? Default: true.
bool UseMipMaps
Shall mipmaps be used if available.
bool TrilinearFilter
Is trilinear filtering enabled? Default: false.
virtual void setAmbientLight(const SColorf &color)=0
Only used by the engine internally.
virtual void setMaterial(const SMaterial &material)=0
Sets a material.
u8 ColorMask
Defines the enabled color planes.
char c8
8 bit character variable.
void drawIndexedTriangleList(const S3DVertex *vertices, u32 vertexCount, const u16 *indexList, u32 triangleCount)
Draws an indexed triangle list.
virtual void draw3DBox(const core::aabbox3d< f32 > &box, SColor color=SColor(255, 255, 255, 255))=0
Draws a 3d axis aligned box.
virtual const c8 * getMaterialRendererName(u32 idx) const =0
Get name of a material renderer.
Flag for blend operation.
bool GouraudShading
Flat or Gouraud shading? Default: true.
3d triangle template class for doing collision detection and other things.
IRenderTarget(E_RENDER_TARGET target, E_COLOR_PLANE colorMask=ECP_ALL, E_BLEND_FACTOR blendFuncSrc=EBF_ONE, E_BLEND_FACTOR blendFuncDst=EBF_ONE_MINUS_SRC_ALPHA, E_BLEND_OPERATION blendOp=EBO_NONE)
virtual void setTransform(E_TRANSFORMATION_STATE state, const core::matrix4 &mat)=0
Sets transformation matrices.
struct holding data describing options
virtual scene::IMeshManipulator * getMeshManipulator()=0
Returns a pointer to the mesh manipulator.
virtual void removeTexture(ITexture *texture)=0
Removes a texture from the texture cache and deletes it.
virtual u32 getMaximalPrimitiveCount() const =0
Returns the maximum amount of primitives.
u8 TextureWrapU
Texture Clamp Mode.
virtual void makeColorKeyTexture(video::ITexture *texture, video::SColor color, bool zeroTexels=false) const =0
Sets a boolean alpha channel on the texture based on a color key.
E_BLEND_OPERATION
Values defining the blend operation used when blend is enabled.
virtual IImage * createImageFromFile(const io::path &filename)=0
Creates a software image from a file.
E_LOST_RESOURCE
enumeration for signaling resources which were lost after the last render cycle
ECOLOR_FORMAT
An enum for the color format of textures used by the Irrlicht Engine.
virtual void draw2DImage(const video::ITexture *texture, const core::position2d< s32 > &destPos)=0
Draws a 2d image without any special effects.
virtual const core::dimension2d< u32 > & getScreenSize() const =0
Get the size of the screen or render window.
virtual void removeHardwareBuffer(const scene::IMeshBuffer *mb)=0
Remove hardware buffer.
virtual void drawMeshBuffer(const scene::IMeshBuffer *mb)=0
Draws a mesh buffer.
virtual const core::dimension2d< u32 > & getCurrentRenderTargetSize() const =0
Get the size of the current render target.
Everything in the Irrlicht Engine can be found in this namespace.
bool Enabled
Global enable flag, overwritten by the SceneManager in each pass.
virtual void draw3DTriangle(const core::triangle3df &triangle, SColor color=SColor(255, 255, 255, 255))=0
Draws a 3d triangle.
void drawIndexedTriangleFan(const S3DVertex *vertices, u32 vertexCount, const u16 *indexList, u32 triangleCount)
Draws an indexed triangle fan.
virtual u32 getPrimitiveCountDrawn(u32 mode=0) const =0
Returns amount of primitives (mostly triangles) which were drawn in the last frame.
ColorMaterial enum for vertex color interpretation.
virtual SOverrideMaterial & getOverrideMaterial()=0
Get the global Material, which might override local materials.
virtual void updateAllOcclusionQueries(bool block=true)=0
Update all occlusion queries. Retrieves results from GPU.
virtual u32 getDynamicLightCount() const =0
Returns amount of dynamic lights currently set.
E_BLEND_OPERATION BlendOperation
Store the blend operation of choice.
virtual void OnResize(const core::dimension2d< u32 > &size)=0
Event handler for resize events. Only used by the engine internally.
Render target is the main color frame buffer.
virtual core::stringc getVendorInfo()=0
Get the graphics card vendor name.
Interface providing write access to a file.
virtual core::dimension2du getMaxTextureSize() const =0
Get the maximum texture size supported.
virtual void disableFeature(E_VIDEO_DRIVER_FEATURE feature, bool flag=true)=0
Disable a feature of the driver.
ColorMask bits, for enabling the color planes.
Vertex with two texture coordinates, video::S3DVertex2TCoords.
Interface for software image data.
virtual void convertColor(const void *sP, ECOLOR_FORMAT sF, s32 sN, void *dP, ECOLOR_FORMAT dF) const =0
Color conversion convenience function.
virtual E_DRIVER_TYPE getDriverType() const =0
Get type of video driver.
Projection transformation.
Class which holds the geometry of an object.
virtual s32 getFPS() const =0
Returns current frames per second value.
virtual void draw3DLine(const core::vector3df &start, const core::vector3df &end, SColor color=SColor(255, 255, 255, 255))=0
Draws a 3d line.
SOverrideMaterial()
Default constructor.
Is bilinear filtering enabled? Default: true.
void drawIndexedTriangleList(const S3DVertexTangents *vertices, u32 vertexCount, const u16 *indexList, u32 triangleCount)
Draws an indexed triangle list.
Render target is a render texture.
virtual void drawPixel(u32 x, u32 y, const SColor &color)=0
Draws a pixel.
unsigned short u16
16 bit unsigned variable.
virtual bool writeImageToFile(IImage *image, const io::path &filename, u32 param=0)=0
Writes the provided image to a file.
Vertex with two texture coordinates.
E_COLOR_PLANE
Enum values for enabling/disabling color planes for rendering.
All texture are lost, rare problem.
virtual void setMinHardwareBufferVertexCount(u32 count)=0
Set the minimum number of vertices for which a hw buffer will be created.
virtual const SExposedVideoData & getExposedVideoData()=0
Returns driver and operating system specific data about the IVideoDriver.
E_TRANSFORMATION_STATE
enumeration for geometry transformation states
Class which is able to create a image from a file.
signed int s32
32 bit signed variable.
Struct for holding a mesh with a single material.
E_DRIVER_TYPE
An enum for all types of drivers the Irrlicht Engine supports.
Vertex with a tangent and binormal vector, video::S3DVertexTangents.
Interface for material rendering.
bool BackfaceCulling
Is backface culling enabled? Default: true.
virtual const core::matrix4 & getTransform(E_TRANSFORMATION_STATE state) const =0
Returns the transformation set by setTransform.
virtual void setAllowZWriteOnTransparent(bool flag)=0
Only used by the engine internally.
u8 AntiAliasing
Sets the antialiasing mode.
virtual IImageLoader * getImageLoader(u32 n)=0
Retrieve the given image loader.
virtual void runAllOcclusionQueries(bool visible=false)=0
Run all occlusion queries. Draws all meshes stored in queries.
E_BLEND_FACTOR BlendFuncDst
IRenderTarget(ITexture *texture, E_COLOR_PLANE colorMask=ECP_ALL, E_BLEND_FACTOR blendFuncSrc=EBF_ONE, E_BLEND_FACTOR blendFuncDst=EBF_ONE_MINUS_SRC_ALPHA, E_BLEND_OPERATION blendOp=EBO_NONE)
Render target is the main color frame buffer.
The whole device/driver is lost.
Render target is the right color buffer (left is the main buffer)
Normalizes normals. Default: false.
unsigned int u32
32 bit unsigned variable.
Standard vertex type used by the Irrlicht engine, video::S3DVertex.
Explicitly set all vertices for each triangle.
void drawIndexedTriangleFan(const S3DVertex2TCoords *vertices, u32 vertexCount, const u16 *indexList, u32 triangleCount)
Draws an indexed triangle fan.
virtual ITexture * addRenderTargetTexture(const core::dimension2d< u32 > &size, const io::path &name="rt", const ECOLOR_FORMAT format=ECF_UNKNOWN)=0
Adds a new render target texture to the texture cache.
virtual void fillMaterialStructureFromAttributes(video::SMaterial &outMaterial, io::IAttributes *attributes)=0
Fills an SMaterial structure from attributes.
virtual const core::rect< s32 > & getViewPort() const =0
Gets the area of the current viewport.
standard vertex used by the Irrlicht engine.
u8 PolygonOffsetFactor
Factor specifying how far the polygon offset should be made.
src & dest (1-srcA, 1-srcA, 1-srcA, 1-srcA)
E_FOG_TYPE
Enum for the types of fog distributions to choose from.
virtual u32 getOcclusionQueryResult(scene::ISceneNode *node) const =0
Return query result.
structure for holding data describing a dynamic point light.
virtual bool endScene()=0
Presents the rendered image to the screen.
virtual u32 getTextureCount() const =0
Returns amount of textures currently loaded.
Interface to driver which is able to perform 2d and 3d graphics functions.
bool operator!=(const IRenderTarget &other) const
virtual IImage * createImage(ECOLOR_FORMAT format, const core::dimension2d< u32 > &size)=0
Creates an empty software image.
bool NormalizeNormals
Should normals be normalized?
virtual void draw2DVertexPrimitiveList(const void *vertices, u32 vertexCount, const void *indexList, u32 primCount, E_VERTEX_TYPE vType=EVT_STANDARD, scene::E_PRIMITIVE_TYPE pType=scene::EPT_TRIANGLES, E_INDEX_TYPE iType=EIT_16BIT)=0
Draws a vertex primitive list in 2d.
Is anisotropic filtering? Default: false.
Flag for enabling/disabling mipmap usage.
bool FogEnable
Is fog enabled? Default: false.
Class representing a 32 bit ARGB color.
virtual ITexture * getTextureByIndex(u32 index)=0
Returns a texture by index.
u8 AnisotropicFilter
Is anisotropic filtering enabled? Default: 0, disabled.
bool BilinearFilter
Is bilinear filtering enabled? Default: true.
4x4 matrix. Mostly used as transformation matrix for 3d calculations.
virtual void setFog(SColor color=SColor(0, 255, 255, 255), E_FOG_TYPE fogType=EFT_FOG_LINEAR, f32 start=50.0f, f32 end=100.0f, f32 density=0.01f, bool pixelFog=false, bool rangeFog=false)=0
Sets the fog mode.
virtual ITexture * addTexture(const core::dimension2d< u32 > &size, const io::path &name, ECOLOR_FORMAT format=ECF_A8R8G8B8)=0
Creates an empty texture of specified size.
May be written to the zbuffer or is it readonly. Default: true.
virtual IImage * createScreenShot(video::ECOLOR_FORMAT format=video::ECF_UNKNOWN, video::E_RENDER_TARGET target=video::ERT_FRAME_BUFFER)=0
Make a screenshot of the last rendered frame.
Will this material be lighted? Default: true.
virtual void removeAllTextures()=0
Removes all textures from the texture cache and deletes them.
Render to both stereo buffers at once.
virtual u32 getImageWriterCount() const =0
Retrieve the number of image writers.
virtual s32 addMaterialRenderer(IMaterialRenderer *renderer, const c8 *name=0)=0
Adds a new material renderer to the video device.
Self reallocating template array (like stl vector) with additional features.
virtual IMaterialRenderer * getMaterialRenderer(u32 idx)=0
Get access to a material renderer by index.
virtual const wchar_t * getName() const =0
Gets name of this video driver.
E_VIDEO_DRIVER_FEATURE
enumeration for querying features of the video driver.
u16 EnablePasses
Set in which render passes the material override is active.
virtual ITexture * getTexture(const io::path &filename)=0
Get access to a named texture.
bool Lighting
Will this material be lighted? Default: true.
bool ZWriteEnable
Is the zbuffer writeable or is it read-only. Default: true.
E_TEXTURE_CREATION_FLAG
Enumeration flags telling the video driver in which format textures should be created.
virtual void draw2DRectangleOutline(const core::recti &pos, SColor color=SColor(255, 255, 255, 255))=0
Draws the outline of a 2D rectangle.
SMaterialLayer TextureLayer[MATERIAL_MAX_TEXTURES]
Texture layer array.
E_POLYGON_OFFSET PolygonOffsetDirection
Flag defining the direction the polygon offset is applied to.
void drawIndexedTriangleFan(const S3DVertexTangents *vertices, u32 vertexCount, const u16 *indexList, u32 triangleCount)
Draws an indexed triangle fan.
virtual void draw2DImageBatch(const video::ITexture *texture, const core::position2d< s32 > &pos, const core::array< core::rect< s32 > > &sourceRects, const core::array< s32 > &indices, s32 kerningWidth=0, const core::rect< s32 > *clipRect=0, SColor color=SColor(255, 255, 255, 255), bool useAlphaChannelOfTexture=false)=0
Draws a set of 2d images, using a color and the alpha channel of the texture.
virtual bool beginScene(bool backBuffer=true, bool zBuffer=true, SColor color=SColor(255, 0, 0, 0), const SExposedVideoData &videoData=SExposedVideoData(), core::rect< s32 > *sourceRect=0)=0
Applications must call this method before performing any rendering.
Interface of a Video Driver dependent Texture.
Base class of most objects of the Irrlicht Engine.
structure for holding data describing a driver and operating system specific data.
Multi-Render target textures.
E_VERTEX_TYPE
Enumeration for all vertex types there are.
void drawIndexedTriangleList(const S3DVertex2TCoords *vertices, u32 vertexCount, const u16 *indexList, u32 triangleCount)
Draws an indexed triangle list.
bool Wireframe
Draw as wireframe or filled triangles? Default: false.
The HW buffers are lost, will be recreated automatically, but might require some more time this frame...
virtual u32 getMaximalDynamicLightAmount() const =0
Returns the maximal amount of dynamic lights the device can handle.
virtual void setMaterialRendererName(s32 idx, const c8 *name)=0
Sets the name of a material renderer.
virtual video::ITexture * findTexture(const io::path &filename)=0
Check if the image is already loaded.
virtual bool queryFeature(E_VIDEO_DRIVER_FEATURE feature) const =0
Queries the features of the driver.
Default 32 bit color format. 8 bits are used for every component: red, green, blue and alpha...
virtual void makeNormalMapTexture(video::ITexture *texture, f32 amplitude=1.0f) const =0
Creates a normal map from a height map texture.
virtual IImageWriter * getImageWriter(u32 n)=0
Retrieve the given image writer.
An interface for easy manipulation of meshes.
Interface for writing software image data.
virtual u32 getImageLoaderCount() const =0
Retrieve the number of image loaders.
virtual const io::IAttributes & getDriverAttributes() const =0
Get attributes of the actual video driver.
virtual bool checkDriverReset()=0
Check if the driver was recently reset.
Flat or Gouraud shading? Default: true.
void apply(SMaterial &material)
Apply the enabled overrides.
Access to all layers texture wrap settings. Overwrites separate layer settings.
virtual void runOcclusionQuery(scene::ISceneNode *node, bool visible=false)=0
Run occlusion query. Draws mesh stored in query.
Vertex with a tangent and binormal vector.
Is trilinear filtering enabled? Default: false.
virtual void enableClipPlane(u32 index, bool enable)=0
Enable or disable a clipping plane.
Class representing a color with four floats.
Struct for holding parameters for a material renderer.
virtual void updateOcclusionQuery(scene::ISceneNode *node, bool block=true)=0
Update occlusion query. Retrieves results from GPU.
virtual void clearZBuffer()=0
Clears the ZBuffer.
virtual IGPUProgrammingServices * getGPUProgrammingServices()=0
Gets the IGPUProgrammingServices interface.
Draw as wireframe or filled triangles? Default: false.
virtual void drawStencilShadowVolume(const core::array< core::vector3df > &triangles, bool zfail=true, u32 debugDataVisible=0)=0
Draws a shadow volume into the stencil buffer.
virtual void getFog(SColor &color, E_FOG_TYPE &fogType, f32 &start, f32 &end, f32 &density, bool &pixelFog, bool &rangeFog)=0
Gets the fog mode.
Is frontface culling enabled? Default: false.
virtual bool getTextureCreationFlag(E_TEXTURE_CREATION_FLAG flag) const =0
Returns if a texture creation flag is enabled or disabled.
virtual SMaterial & getMaterial2D()=0
Get the 2d override material for altering its values.
virtual void drawMeshBufferNormals(const scene::IMeshBuffer *mb, f32 length=10.f, SColor color=0xffffffff)=0
Draws normals of a mesh buffer.
Draw as point cloud or filled triangles? Default: false.
virtual s32 addDynamicLight(const SLight &light)=0
The Render Target Textures are lost, typical problem for D3D.
virtual void enableMaterial2D(bool enable=true)=0
Enable the 2d override material.
E_BLEND_OPERATION BlendOp
virtual void draw2DRectangle(SColor color, const core::rect< s32 > &pos, const core::rect< s32 > *clip=0)=0
Draws a 2d rectangle.
virtual ECOLOR_FORMAT getColorFormat() const =0
Get the current color format of the color buffer.
E_RENDER_TARGET TargetType
Interface making it possible to create and use programs running on the GPU.