diff options
Diffstat (limited to 'src/graphics/common/device.h')
-rw-r--r-- | src/graphics/common/device.h | 414 |
1 files changed, 0 insertions, 414 deletions
diff --git a/src/graphics/common/device.h b/src/graphics/common/device.h deleted file mode 100644 index 7aa4ce3..0000000 --- a/src/graphics/common/device.h +++ /dev/null @@ -1,414 +0,0 @@ -// * This file is part of the COLOBOT source code -// * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch -// * Copyright (C) 2012, Polish Portal of Colobot (PPC) -// * -// * This program is free software: you can redistribute it and/or modify -// * it under the terms of the GNU General Public License as published by -// * the Free Software Foundation, either version 3 of the License, or -// * (at your option) any later version. -// * -// * This program is distributed in the hope that it will be useful, -// * but WITHOUT ANY WARRANTY; without even the implied warranty of -// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// * GNU General Public License for more details. -// * -// * You should have received a copy of the GNU General Public License -// * along with this program. If not, see http://www.gnu.org/licenses/. - -// device.h - -#pragma once - - -#include "graphics/common/color.h" -#include "graphics/common/light.h" -#include "graphics/common/material.h" -#include "graphics/common/texture.h" -#include "graphics/common/vertex.h" -#include "math/matrix.h" - -#include <string> - - -class CImage; - - -namespace Gfx { - -/** - \struct DeviceConfig - \brief General config for graphics device - - These settings are common window options set by SDL. -*/ -struct DeviceConfig -{ - //! Screen width - int width; - //! Screen height - int height; - //! Bits per pixel - int bpp; - //! Full screen - bool fullScreen; - //! Resizeable window - bool resizeable; - //! Double buffering - bool doubleBuf; - //! No window frame (also set with full screen) - bool noFrame; - - //! Constructor calls LoadDefault() - DeviceConfig() { LoadDefault(); } - - //! Loads the default values - inline void LoadDefault() - { - width = 800; - height = 600; - bpp = 32; - fullScreen = false; - resizeable = false; - doubleBuf = true; - noFrame = false; - } -}; - - -/** - \enum TransformType - \brief Type of transformation in rendering pipeline - - These correspond to DirectX's three transformation matrices. */ -enum TransformType -{ - TRANSFORM_WORLD, - TRANSFORM_VIEW, - TRANSFORM_PROJECTION -}; - -/** - \enum RenderState - \brief Render states that can be enabled/disabled */ -enum RenderState -{ - RENDER_STATE_LIGHTING, - RENDER_STATE_TEXTURING, - RENDER_STATE_BLENDING, - RENDER_STATE_FOG, - RENDER_STATE_DEPTH_TEST, - RENDER_STATE_DEPTH_WRITE, - RENDER_STATE_ALPHA_TEST, - RENDER_STATE_CULLING, - RENDER_STATE_DITHERING -}; - -/** - \enum CompFunc - \brief Type of function used to compare values */ -enum CompFunc -{ - COMP_FUNC_NEVER, - COMP_FUNC_LESS, - COMP_FUNC_EQUAL, - COMP_FUNC_NOTEQUAL, - COMP_FUNC_LEQUAL, - COMP_FUNC_GREATER, - COMP_FUNC_GEQUAL, - COMP_FUNC_ALWAYS -}; - -/** - \enum BlendFunc - \brief Type of blending function */ -enum BlendFunc -{ - BLEND_ZERO, - BLEND_ONE, - BLEND_SRC_COLOR, - BLEND_INV_SRC_COLOR, - BLEND_DST_COLOR, - BLEND_INV_DST_COLOR, - BLEND_SRC_ALPHA, - BLEND_INV_SRC_ALPHA, - BLEND_DST_ALPHA, - BLEND_INV_DST_ALPHA, - BLEND_SRC_ALPHA_SATURATE -}; - -/** - \enum FogMode - \brief Type of fog calculation function */ -enum FogMode -{ - FOG_LINEAR, - FOG_EXP, - FOG_EXP2 -}; - -/** - \enum CullMode - \brief Culling mode for polygons */ -enum CullMode -{ - //! Cull clockwise side - CULL_CW, - //! Cull counter-clockwise side - CULL_CCW -}; - -/** - \enum ShadeModel - \brief Shade model used in rendering */ -enum ShadeModel -{ - SHADE_FLAT, - SHADE_SMOOTH -}; - -/** - \enum FillMode - \brief Polygon fill mode */ -enum FillMode -{ - //! Draw only points - FILL_POINT, - //! Draw only lines - FILL_LINES, - //! Draw full polygons - FILL_FILL -}; - -/** - \enum PrimitiveType - \brief Type of primitive to render - - Only these two types are used. */ -enum PrimitiveType -{ - PRIMITIVE_LINES, - PRIMITIVE_TRIANGLES, - PRIMITIVE_TRIANGLE_STRIP -}; - -/** - \enum IntersectPlane - \brief Intersection plane of projection volume - - These flags can be OR'd together. */ -enum IntersectPlane -{ - INTERSECT_PLANE_LEFT = 0x01, - INTERSECT_PLANE_RIGHT = 0x02, - INTERSECT_PLANE_TOP = 0x04, - INTERSECT_PLANE_BOTTOM = 0x08, - INTERSECT_PLANE_FRONT = 0x10, - INTERSECT_PLANE_BACK = 0x20, - INTERSECT_PLANE_ALL = INTERSECT_PLANE_LEFT | INTERSECT_PLANE_RIGHT | - INTERSECT_PLANE_TOP | INTERSECT_PLANE_BOTTOM | - INTERSECT_PLANE_FRONT | INTERSECT_PLANE_BACK -}; - -/* - -Notes for rewriting DirectX code: - ->> SetRenderState() translates to many functions depending on param - -D3DRENDERSTATE_ALPHABLENDENABLE -> SetRenderState() with RENDER_STATE_BLENDING -D3DRENDERSTATE_ALPHAFUNC -> SetAlphaTestFunc() func -D3DRENDERSTATE_ALPHAREF -> SetAlphaTestFunc() ref -D3DRENDERSTATE_ALPHATESTENABLE -> SetRenderState() with RENDER_STATE_ALPHA_TEST -D3DRENDERSTATE_AMBIENT -> SetGlobalAmbient() -D3DRENDERSTATE_CULLMODE -> SetCullMode() -D3DRENDERSTATE_DESTBLEND -> SetBlendFunc() dest blending func -D3DRENDERSTATE_DITHERENABLE -> SetRenderState() with RENDER_STATE_DITHERING -D3DRENDERSTATE_FILLMODE -> SetFillMode() -D3DRENDERSTATE_FOGCOLOR -> SetFogParams() -D3DRENDERSTATE_FOGENABLE -> SetRenderState() with RENDER_STATE_FOG -D3DRENDERSTATE_FOGEND -> SetFogParams() -D3DRENDERSTATE_FOGSTART -> SetFogParams() -D3DRENDERSTATE_FOGVERTEXMODE -> SetFogParams() fog model -D3DRENDERSTATE_LIGHTING -> SetRenderState() with RENDER_STATE_LIGHTING -D3DRENDERSTATE_SHADEMODE -> SetShadeModel() -D3DRENDERSTATE_SPECULARENABLE -> doesn't matter (always enabled) -D3DRENDERSTATE_SRCBLEND -> SetBlendFunc() src blending func -D3DRENDERSTATE_TEXTUREFACTOR -> SetTextureFactor() -D3DRENDERSTATE_ZBIAS -> SetDepthBias() -D3DRENDERSTATE_ZENABLE -> SetRenderState() with RENDER_STATE_DEPTH_TEST -D3DRENDERSTATE_ZFUNC -> SetDepthTestFunc() -D3DRENDERSTATE_ZWRITEENABLE -> SetRenderState() with RENDER_STATE_DEPTH_WRITE - - ->> SetTextureStageState() translates to SetTextureParams() or CreateTexture() for some params - -Params from enum in struct TextureCreateParams or TextureParams - D3DTSS_ADDRESS -> Gfx::TexWrapMode wrapS, wrapT - D3DTSS_ALPHAARG1 -> Gfx::TexMixArgument alphaArg1 - D3DTSS_ALPHAARG2 -> Gfx::TexMixArgument alphaArg2 - D3DTSS_ALPHAOP -> Gfx::TexMixOperation alphaOperation - D3DTSS_COLORARG1 -> Gfx::TexMixArgument colorArg1 - D3DTSS_COLORARG2 -> Gfx::TexMixArgument colorArg2 - D3DTSS_COLOROP -> Gfx::TexMixOperation colorOperation - D3DTSS_MAGFILTER -> Gfx::TexMagFilter magFilter - D3DTSS_MINFILTER -> Gfx::TexMinFilter minFilter - D3DTSS_TEXCOORDINDEX -> doesn't matter (texture coords are set explicitly by glMultiTexCoordARB*) - -Note that D3DTSS_ALPHAOP or D3DTSS_COLOROP set to D3DTOP_DISABLE must translate to disabling the whole texture stage. -In DirectX, you shouldn't mix enabling one and disabling the other. -Also, if previous stage is disabled in DirectX, the later ones are disabled, too. In OpenGL, that is not the case. - -*/ - -/** - \class CDevice - \brief Abstract interface of graphics device - - It is based on DIRECT3DDEVICE class from DirectX to make it easier to port existing code. - It encapsulates the general graphics device state and provides a common interface - to graphics-specific functions which will be used throughout the program, - both in CEngine class and in UI classes. Note that it doesn't contain all functions from DirectX, - only those that were used in old code. - - */ -class CDevice -{ -public: - virtual ~CDevice() {} - - //! Initializes the device, setting the initial state - virtual bool Create() = 0; - //! Destroys the device, releasing every acquired resource - virtual void Destroy() = 0; - - //! Returns whether the device has been initialized - virtual bool GetWasInit() = 0; - //! Returns the last encountered error - virtual std::string GetError() = 0; - - //! Begins drawing the 3D scene - virtual void BeginScene() = 0; - //! Ends drawing the 3D scene - virtual void EndScene() = 0; - - //! Clears the screen to blank - virtual void Clear() = 0; - - //! Sets the transform matrix of given type - virtual void SetTransform(TransformType type, const Math::Matrix &matrix) = 0; - //! Returns the current transform matrix of given type - virtual const Math::Matrix& GetTransform(TransformType type) = 0; - //! Multiplies the current transform matrix of given type by given matrix - virtual void MultiplyTransform(TransformType type, const Math::Matrix &matrix) = 0; - - //! Sets the current material - virtual void SetMaterial(const Gfx::Material &material) = 0; - //! Returns the current material - virtual const Gfx::Material& GetMaterial() = 0; - - //! Returns the maximum number of lights available - virtual int GetMaxLightCount() = 0; - //! Sets the light at given index - virtual void SetLight(int index, const Gfx::Light &light) = 0; - //! Returns the current light at given index - virtual const Gfx::Light& GetLight(int index) = 0; - //! Enables/disables the light at given index - virtual void SetLightEnabled(int index, bool enabled) = 0; - //! Returns the current enable state of light at given index - virtual bool GetLightEnabled(int index) = 0; - - //! Creates a texture from image; the image can be safely removed after that - virtual Gfx::Texture CreateTexture(CImage *image, const Gfx::TextureCreateParams ¶ms) = 0; - //! Deletes a given texture, freeing it from video memory - virtual void DestroyTexture(const Gfx::Texture &texture) = 0; - //! Deletes all textures created so far - virtual void DestroyAllTextures() = 0; - - //! Returns the maximum number of multitexture stages - virtual int GetMaxTextureCount() = 0; - //! Sets the (multi)texture at given index - virtual void SetTexture(int index, const Gfx::Texture &texture) = 0; - //! Returns the (multi)texture at given index - virtual Gfx::Texture GetTexture(int index) = 0; - //! Enables/disables the given texture stage - virtual void SetTextureEnabled(int index, bool enabled) = 0; - //! Returns the current enable state of given texture stage - virtual bool GetTextureEnabled(int index) = 0; - - //! Sets the params for texture stage with given index - virtual void SetTextureStageParams(int index, const Gfx::TextureStageParams ¶ms) = 0; - //! Returns the current params of texture stage with given index - virtual Gfx::TextureStageParams GetTextureStageParams(int index) = 0; - - //! Sets the texture factor to the given color value - virtual void SetTextureFactor(const Gfx::Color &color) = 0; - //! Returns the current texture factor - virtual Gfx::Color GetTextureFactor() = 0; - - //! Renders primitive composed of vertices with single texture - virtual void DrawPrimitive(Gfx::PrimitiveType type, const Gfx::Vertex *vertices , int vertexCount) = 0; - //! Renders primitive composed of vertices with color information and single texture - virtual void DrawPrimitive(Gfx::PrimitiveType type, const Gfx::VertexCol *vertices , int vertexCount) = 0; - //! Renders primitive composed of vertices with multitexturing (2 textures) - virtual void DrawPrimitive(Gfx::PrimitiveType type, const Gfx::VertexTex2 *vertices, int vertexCount) = 0; - - //! Tests whether a sphere intersects the 6 clipping planes of projection volume - virtual int ComputeSphereVisibility(const Math::Vector ¢er, float radius) = 0; - - //! Enables/disables the given render state - virtual void SetRenderState(Gfx::RenderState state, bool enabled) = 0; - //! Returns the current setting of given render state - virtual bool GetRenderState(Gfx::RenderState state) = 0; - - //! Sets the function of depth test - virtual void SetDepthTestFunc(Gfx::CompFunc func) = 0; - //! Returns the current function of depth test - virtual Gfx::CompFunc GetDepthTestFunc() = 0; - - //! Sets the depth bias (constant value added to Z-coords) - virtual void SetDepthBias(float factor) = 0; - //! Returns the current depth bias - virtual float GetDepthBias() = 0; - - //! Sets the alpha test function and reference value - virtual void SetAlphaTestFunc(Gfx::CompFunc func, float refValue) = 0; - //! Returns the current alpha test function and reference value - virtual void GetAlphaTestFunc(Gfx::CompFunc &func, float &refValue) = 0; - - //! Sets the blending functions for source and destination operations - virtual void SetBlendFunc(Gfx::BlendFunc srcBlend, Gfx::BlendFunc dstBlend) = 0; - //! Returns the current blending functions for source and destination operations - virtual void GetBlendFunc(Gfx::BlendFunc &srcBlend, Gfx::BlendFunc &dstBlend) = 0; - - //! Sets the clear color - virtual void SetClearColor(const Gfx::Color &color) = 0; - //! Returns the current clear color - virtual Gfx::Color GetClearColor() = 0; - - //! Sets the global ambient color - virtual void SetGlobalAmbient(const Gfx::Color &color) = 0; - //! Returns the global ambient color - virtual Gfx::Color GetGlobalAmbient() = 0; - - //! Sets the fog parameters: mode, color, start distance, end distance and density (for exp models) - virtual void SetFogParams(Gfx::FogMode mode, const Gfx::Color &color, float start, float end, float density) = 0; - //! Returns the current fog parameters: mode, color, start distance, end distance and density (for exp models) - virtual void GetFogParams(Gfx::FogMode &mode, Gfx::Color &color, float &start, float &end, float &density) = 0; - - //! Sets the current cull mode - virtual void SetCullMode(Gfx::CullMode mode) = 0; - //! Returns the current cull mode - virtual Gfx::CullMode GetCullMode() = 0; - - //! Sets the shade model - virtual void SetShadeModel(Gfx::ShadeModel model) = 0; - //! Returns the current shade model - virtual Gfx::ShadeModel GetShadeModel() = 0; - - //! Sets the current fill mode - virtual void SetFillMode(Gfx::FillMode mode) = 0; - //! Returns the current fill mode - virtual Gfx::FillMode GetFillMode() = 0; -}; - -}; // namespace Gfx |