summaryrefslogtreecommitdiffstats
path: root/src/graphics/core/nulldevice.h
blob: c6065a6242b90c882bd7e171cb2bc605663b3f61 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/*
 * This file is part of the Colobot: Gold Edition source code
 * Copyright (C) 2001-2014, Daniel Roux, EPSITEC SA & TerranovaTeam
 * http://epsiteс.ch; http://colobot.info; http://github.com/colobot
 *
 * 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://gnu.org/licenses
 */

/**
 * \file graphics/core/device.h
 * \brief Abstract graphics device - CDevice class and related structs/enums
 */

#pragma once


#include "graphics/core/device.h"

// Graphics module namespace
namespace Gfx {

/**
 * \class CNullDevice
 * \brief Device implementation that doesn't render anything
 *
 */
class CNullDevice : public CDevice
{
public:
    CNullDevice();
    virtual ~CNullDevice();
    
    virtual void DebugHook();
    virtual void DebugLights();
    
    virtual bool Create();
    virtual void Destroy();
    
    virtual void BeginScene();
    virtual void EndScene();
    
    virtual void Clear();
    
    virtual void SetTransform(TransformType type, const Math::Matrix &matrix);
    virtual const Math::Matrix& GetTransform(TransformType type);
    virtual void MultiplyTransform(TransformType type, const Math::Matrix &matrix);
    
    virtual void SetMaterial(const Material &material);
    virtual const Material& GetMaterial();
    
    virtual int GetMaxLightCount();
    virtual void SetLight(int index, const Light &light);
    virtual const Light& GetLight(int index);
    virtual void SetLightEnabled(int index, bool enabled);
    virtual bool GetLightEnabled(int index);
    
    virtual Texture CreateTexture(CImage *image, const TextureCreateParams &params);
    virtual Texture CreateTexture(ImageData *data, const TextureCreateParams &params);
    virtual void DestroyTexture(const Texture &texture);
    virtual void DestroyAllTextures();
    
    virtual int GetMaxTextureStageCount();
    virtual void SetTexture(int index, const Texture &texture);
    virtual void SetTexture(int index, unsigned int textureId);
    virtual Texture GetTexture(int index);
    virtual void SetTextureEnabled(int index, bool enabled);
    virtual bool GetTextureEnabled(int index);
    
    virtual void SetTextureStageParams(int index, const TextureStageParams &params);
    virtual TextureStageParams GetTextureStageParams(int index);
    
    virtual void SetTextureStageWrap(int index, Gfx::TexWrapMode wrapS, Gfx::TexWrapMode wrapT);
    
    virtual void DrawPrimitive(PrimitiveType type, const Vertex *vertices    , int vertexCount,
                               Color color = Color(1.0f, 1.0f, 1.0f, 1.0f));
    virtual void DrawPrimitive(PrimitiveType type, const VertexTex2 *vertices, int vertexCount,
                               Color color = Color(1.0f, 1.0f, 1.0f, 1.0f));
    virtual void DrawPrimitive(PrimitiveType type, const VertexCol *vertices , int vertexCount);
    
    virtual unsigned int CreateStaticBuffer(PrimitiveType primitiveType, const Vertex* vertices, int vertexCount);
    virtual unsigned int CreateStaticBuffer(PrimitiveType primitiveType, const VertexTex2* vertices, int vertexCount);
    virtual unsigned int CreateStaticBuffer(PrimitiveType primitiveType, const VertexCol* vertices, int vertexCount);
    virtual void UpdateStaticBuffer(unsigned int bufferId, PrimitiveType primitiveType, const Vertex* vertices, int vertexCount);
    virtual void UpdateStaticBuffer(unsigned int bufferId, PrimitiveType primitiveType, const VertexTex2* vertices, int vertexCount);
    virtual void UpdateStaticBuffer(unsigned int bufferId, PrimitiveType primitiveType, const VertexCol* vertices, int vertexCount);
    virtual void DrawStaticBuffer(unsigned int bufferId);
    virtual void DestroyStaticBuffer(unsigned int bufferId);
    
    virtual int ComputeSphereVisibility(const Math::Vector &center, float radius);
    
    virtual void SetRenderState(RenderState state, bool enabled);
    virtual bool GetRenderState(RenderState state);
    
    virtual void SetDepthTestFunc(CompFunc func);
    virtual CompFunc GetDepthTestFunc();
    
    virtual void SetDepthBias(float factor);
    virtual float GetDepthBias();
    
    virtual void SetAlphaTestFunc(CompFunc func, float refValue);
    virtual void GetAlphaTestFunc(CompFunc &func, float &refValue);
    
    virtual void SetBlendFunc(BlendFunc srcBlend, BlendFunc dstBlend);
    virtual void GetBlendFunc(BlendFunc &srcBlend, BlendFunc &dstBlend);
    
    virtual void SetClearColor(const Color &color);
    virtual Color GetClearColor();
    
    virtual void SetGlobalAmbient(const Color &color);
    virtual Color GetGlobalAmbient();
    
    virtual void SetFogParams(FogMode mode, const Color &color, float start, float end, float density);
    virtual void GetFogParams(FogMode &mode, Color &color, float &start, float &end, float &density);
    
    virtual void SetCullMode(CullMode mode);
    virtual CullMode GetCullMode();
    
    virtual void SetShadeModel(ShadeModel model);
    virtual ShadeModel GetShadeModel();
    
    virtual void SetFillMode(FillMode mode) ;
    virtual FillMode GetFillMode();
    
    virtual void* GetFrameBufferPixels() const;
    
private:
    Math::Matrix m_matrix;
    Material     m_material;
    Light        m_light;
};


} // namespace Gfx