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);
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 polygon.
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.
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.