Etterna 0.74.4
Loading...
Searching...
No Matches
RageDisplay_OGL.h
1/* RageDisplay_Legacy: OpenGL renderer. */
2
3#ifndef RAGE_DISPLAY_OGL_H
4#define RAGE_DISPLAY_OGL_H
5
6#include "Etterna/Models/Misc/DisplaySpec.h"
7#include "RageDisplay.h"
8#include "Etterna/Actor/Base/Sprite.h"
9#include "RageUtil/Graphics/RageTextureRenderTarget.h"
10
11/* Making an OpenGL call doesn't also flush the error state; if we happen
12 * to have an error from a previous call, then the assert below will fail.
13 * Flush it. */
14#define FlushGLErrors() \
15 do { \
16 } while (glGetError() != GL_NO_ERROR)
17#define AssertNoGLError() \
18 \
19 { \
20 GLenum error = glGetError(); \
21 ASSERT_M(error == GL_NO_ERROR, \
22 RageDisplay_Legacy_Helpers::GLToString(error)); \
23 }
24
25#if defined(DEBUG) || !defined(GL_GET_ERROR_IS_SLOW)
26#define DebugFlushGLErrors() FlushGLErrors()
27#define DebugAssertNoGLError() AssertNoGLError()
28#else
29#define DebugFlushGLErrors()
30#define DebugAssertNoGLError()
31#endif
32
34{
35 public:
37 ~RageDisplay_Legacy() override;
38 std::string Init(VideoModeParams&& p,
39 bool bAllowUnacceleratedRenderer) override;
40
41 std::string GetApiDescription() const override { return "OpenGL"; }
42 void GetDisplaySpecs(DisplaySpecs& out) const override;
43 void ResolutionChanged() override;
44 const RagePixelFormatDesc* GetPixelFormatDesc(
45 RagePixelFormat pf) const override;
46
47 bool SupportsThreadedRendering() override;
48 void BeginConcurrentRenderingMainThread() override;
49 void EndConcurrentRenderingMainThread() override;
50 void BeginConcurrentRendering() override;
51 void EndConcurrentRendering() override;
52
53 bool BeginFrame() override;
54 void EndFrame() override;
55 const ActualVideoModeParams* GetActualVideoModeParams() const override;
56 void SetBlendMode(BlendMode mode) override;
57 bool SupportsTextureFormat(RagePixelFormat pixfmt,
58 bool realtime = false) override;
59 bool SupportsPerVertexMatrixScale() override;
60 intptr_t CreateTexture(RagePixelFormat pixfmt,
61 RageSurface* img,
62 bool bGenerateMipMaps) override;
63 void UpdateTexture(intptr_t iTexHandle,
64 RageSurface* img,
65 int xoffset,
66 int yoffset,
67 int width,
68 int height) override;
69 void DeleteTexture(intptr_t iTexHandle) override;
70 bool UseOffscreenRenderTarget();
71 RageSurface* GetTexture(intptr_t iTexture) override;
72 RageTextureLock* CreateTextureLock() override;
73
74 void ClearAllTextures() override;
75 int GetNumTextureUnits() override;
76 void SetTexture(TextureUnit tu, intptr_t iTexture) override;
77 void SetTextureMode(TextureUnit tu, TextureMode tm) override;
78 void SetTextureWrapping(TextureUnit tu, bool b) override;
79 int GetMaxTextureSize() const override;
80 void SetTextureFiltering(TextureUnit tu, bool b) override;
81 void SetEffectMode(EffectMode effect) override;
82 bool IsEffectModeSupported(EffectMode effect) override;
83 bool SupportsRenderToTexture() const override;
84 bool SupportsFullscreenBorderlessWindow() const override;
85 intptr_t CreateRenderTarget(const RenderTargetParam& param,
86 int& iTextureWidthOut,
87 int& iTextureHeightOut) override;
88 intptr_t GetRenderTarget() override;
89 void SetRenderTarget(intptr_t iHandle, bool bPreserveTexture) override;
90 bool IsZWriteEnabled() const override;
91 bool IsZTestEnabled() const override;
92 void SetZWrite(bool b) override;
93 void SetZBias(float f) override;
94 void SetZTestMode(ZTestMode mode) override;
95 void ClearZBuffer() override;
96 void SetCullMode(CullMode mode) override;
97 void SetAlphaTest(bool b) override;
98 void SetMaterial(const RageColor& emissive,
99 const RageColor& ambient,
100 const RageColor& diffuse,
101 const RageColor& specular,
102 float shininess) override;
103 void SetLighting(bool b) override;
104 void SetLightOff(int index) override;
105 void SetLightDirectional(int index,
106 const RageColor& ambient,
107 const RageColor& diffuse,
108 const RageColor& specular,
109 const RageVector3& dir) override;
110
111 void SetSphereEnvironmentMapping(TextureUnit tu, bool b) override;
112 void SetCelShaded(int stage) override;
113
114 bool IsD3DInternal() override;
115
116 RageCompiledGeometry* CreateCompiledGeometry() override;
117 void DeleteCompiledGeometry(RageCompiledGeometry* p) override;
118
119 // hacks for cell-shaded models
120 void SetPolygonMode(PolygonMode pm) override;
121 void SetLineWidth(float fWidth) override;
122
123 std::string GetTextureDiagnostics(unsigned id) const override;
124
125 protected:
126 void DrawQuadsInternal(const RageSpriteVertex v[], int iNumVerts) override;
127 void DrawQuadStripInternal(const RageSpriteVertex v[],
128 int iNumVerts) override;
129 void DrawFanInternal(const RageSpriteVertex v[], int iNumVerts) override;
130 void DrawStripInternal(const RageSpriteVertex v[], int iNumVerts) override;
131 void DrawTrianglesInternal(const RageSpriteVertex v[],
132 int iNumVerts) override;
133 void DrawCompiledGeometryInternal(const RageCompiledGeometry* p,
134 int iMeshIndex) override;
135 void DrawLineStripInternal(const RageSpriteVertex v[],
136 int iNumVerts,
137 float LineWidth) override;
138 void DrawSymmetricQuadStripInternal(const RageSpriteVertex v[],
139 int iNumVerts) override;
140
141 std::string TryVideoMode(const VideoModeParams& p,
142 bool& bNewDeviceOut) override;
143 RageSurface* CreateScreenshot() override;
144 RagePixelFormat GetImgPixelFormat(RageSurface*& img,
145 bool& FreeImg,
146 int width,
147 int height,
148 bool bPalettedTexture);
149 bool SupportsSurfaceFormat(RagePixelFormat pixfmt);
150
151 void SendCurrentMatrices();
152
153 private:
154 RageTextureRenderTarget* offscreenRenderTarget = nullptr;
155};
156
157#endif
The actual VideoModeParams determined by the LowLevelWindow implementation. Contains all the attribut...
Definition RageDisplay.h:207
Definition RageDisplay.h:34
Definition RageDisplay_OGL.h:34
Definition RageDisplay.h:269
Definition RageTextureRenderTarget.h:12
The parameters used for the present Video Mode.
Definition RageDisplay.h:101
Definition RageTypes.h:332
Definition RageDisplay.h:274
Definition RageTypes.h:557
Definition RageSurface.h:90
Definition RageDisplay.h:256
Definition RageTypes.h:172
Definition RageDisplay.h:244