22 #ifndef WINTERMUTE_BASE_RENDER_OPENGL3D_H 23 #define WINTERMUTE_BASE_RENDER_OPENGL3D_H 25 #include "engines/wintermute/base/gfx/base_renderer3d.h" 26 #include "engines/wintermute/dctypes.h" 27 #include "engines/wintermute/math/vector2.h" 29 #include "graphics/opengl/system_headers.h" 30 #include "graphics/transform_struct.h" 32 #if defined(USE_OPENGL_SHADERS) 34 #include "graphics/opengl/shader.h" 38 class BaseSurfaceOpenGL3D;
40 class BaseRenderOpenGL3DShader :
public BaseRenderer3D {
41 friend class BaseSurfaceOpenGL3DShader;
42 friend class Mesh3DSOpenGLShader;
43 friend class XMeshOpenGLShader;
44 friend class ShadowVolumeOpenGLShader;
58 struct RectangleVertex {
64 struct SimpleShadowVertex {
77 BaseRenderOpenGL3DShader(BaseGame *inGame =
nullptr);
78 ~BaseRenderOpenGL3DShader()
override;
80 bool invalidateTexture(BaseSurfaceOpenGL3D *texture)
override;
82 bool invalidateDeviceObjects()
override;
83 bool restoreDeviceObjects()
override;
85 bool resetDevice()
override;
87 void setSpriteBlendMode(Graphics::TSpriteBlendMode blendMode,
bool forceChange =
false)
override;
89 void setAmbientLightRenderState()
override;
91 int getMaxActiveLights()
override;
92 void lightEnable(
int index,
bool enable)
override;
93 void setLightParameters(
int index,
const DXVector3 &position,
const DXVector3 &direction,
const DXVector4 &diffuse,
bool spotlight)
override;
95 void enableCulling()
override;
96 void disableCulling()
override;
98 bool enableShadows()
override;
99 bool disableShadows()
override;
100 bool stencilSupported()
override;
102 BaseImage *takeScreenshot(
int newWidth = 0,
int newHeight = 0)
override;
103 void fadeToColor(byte r, byte g, byte b, byte a)
override;
104 bool flip()
override;
105 bool clear()
override;
107 bool setViewport(
int left,
int top,
int right,
int bottom)
override;
108 bool fillRect(
int x,
int y,
int w,
int h, uint32 color)
override;
110 DXMatrix *buildMatrix(DXMatrix* out,
const DXVector2 *centre,
const DXVector2 *scaling,
float angle);
111 void transformVertices(
struct SpriteVertex *vertices,
const DXVector2 *centre,
const DXVector2 *scaling,
float angle);
113 bool setProjection()
override;
115 bool setWorldTransform(
const DXMatrix &transform)
override;
116 bool setViewTransform(
const DXMatrix &transform)
override;
117 bool setProjectionTransform(
const DXMatrix &transform)
override;
119 bool initRenderer(
int width,
int height,
bool windowed)
override;
120 bool setup2D(
bool force =
false)
override;
121 bool setup3D(Camera3D *camera,
bool force =
false)
override;
124 return "OpenGL 3D renderer";
126 bool displayDebugInfo()
override {
127 return STATUS_FAILED;
129 bool drawShaderQuad()
override {
130 return STATUS_FAILED;
133 float getScaleRatioX()
const override {
136 float getScaleRatioY()
const override {
140 BaseSurface *createSurface()
override;
142 bool startSpriteBatch()
override;
143 bool endSpriteBatch()
override;
144 bool commitSpriteBatch()
override;
146 bool drawSpriteEx(BaseSurface *texture,
const Common::Rect32 &rect,
const Vector2 &pos,
const Vector2 &rot,
const Vector2 &
scale,
147 float angle, uint32 color,
bool alphaDisable, Graphics::TSpriteBlendMode blendMode,
bool mirrorX,
bool mirrorY)
override;
149 void renderSceneGeometry(
const BaseArray<AdWalkplane *> &planes,
const BaseArray<AdBlock *> &blocks,
150 const BaseArray<AdGeneric *> &generics,
const BaseArray<Light3D *> &lights, Camera3D *camera)
override;
151 void renderShadowGeometry(
const BaseArray<AdWalkplane *> &planes,
const BaseArray<AdBlock *> &blocks,
const BaseArray<AdGeneric *> &generics, Camera3D *camera)
override;
153 Mesh3DS *createMesh3DS()
override;
154 XMesh *createXMesh()
override;
155 ShadowVolume *createShadowVolume()
override;
157 bool setViewport3D(DXViewport *viewport)
override;
159 void postfilter()
override;
160 void setPostfilter(PostFilter postFilter)
override { _postFilterMode = postFilter; };
166 void displaySimpleShadow(BaseObject *
object)
override;
168 SimpleShadowVertex _simpleShadow[4];
170 Graphics::TSpriteBlendMode _blendMode;
172 DXMatrix _glProjectionMatrix;
177 Math::Vector4d _flatShadowColor;
181 GLuint _rectangleVBO{};
182 GLuint _simpleShadowVBO{};
183 GLuint _postfilterVBO{};
193 GLuint _postfilterTexture;
198 #endif // defined(USE_OPENGL_SHADERS)
Graphics::Surface * scale(const Graphics::Surface &srcImage, int xSize, int ySize)
Definition: achievements_tables.h:27