Etterna 0.75.1
Loading...
Searching...
No Matches
Display.h
1/* Display - RageDisplay wrapper for renderer implementations */
2#ifndef DISPLAY_H
3#define DISPLAY_H
4
5#include "RageUtil/Graphics/Display/CommandBatcher.h"
6#include "RageUtil/Graphics/RageDisplay.h"
7#include "Renderer.h"
8#include "RenderState.h"
9#include <functional>
10#include "arch/LowLevelWindowVK/LowLevelWindowVK.h"
11
12namespace DisplayAdapter {
13class Display : public RageDisplay
14{
15 public:
16 static constexpr size_t TexturePixelSize = 4;
17 static constexpr size_t MaxTextureSize = 8192;
18
19 Display(std::unique_ptr<Renderer> renderer);
20 ~Display() override {}
21
22 std::string Init(VideoModeParams&& p,
23 bool bAllowUnacceleratedRenderer) override;
24 [[nodiscard]] std::string GetApiDescription() const override
25 {
26 return m_Renderer->GetApiDescription();
27 }
28 void GetDisplaySpecs(DisplaySpecs& out) const override;
29 void ResolutionChanged() override;
30 [[nodiscard]] const RagePixelFormatDesc* GetPixelFormatDesc(
31 RagePixelFormat pf) const override;
32
33 bool BeginFrame() override;
34 void EndFrame() override;
35 [[nodiscard]] const ActualVideoModeParams* GetActualVideoModeParams()
36 const override;
37 void SetBlendMode(BlendMode mode) override;
38 bool SupportsTextureFormat(RagePixelFormat pixfmt,
39 bool realtime = false) override;
40 bool SupportsThreadedRendering() override;
41 bool SupportsPerVertexMatrixScale() override;
42
43 intptr_t CreateTexture(RagePixelFormat pixfmt,
44 RageSurface* img,
45 bool bGenerateMipMaps) override;
46 void UpdateTexture(intptr_t uTexHandle,
47 RageSurface* img,
48 int xoffset,
49 int yoffset,
50 int width,
51 int height) override;
52 void DeleteTexture(intptr_t iTexHandle) override;
53 void ClearAllTextures() override;
54 [[nodiscard]] int GetMaxTextureSize() const override;
55
56 int GetNumTextureUnits() override;
57 void SetTexture(TextureUnit tu, intptr_t iTexture) override;
58 void SetTextureMode(TextureUnit tu, TextureMode tm) override;
59 void SetTextureWrapping(TextureUnit tu, bool b) override;
60 void SetTextureFiltering(TextureUnit tu, bool b) override;
61 [[nodiscard]] bool IsZWriteEnabled() const override;
62 [[nodiscard]] bool IsZTestEnabled() const override;
63 void SetZWrite(bool b) override;
64 void SetZBias(float f) override;
65 void SetZTestMode(ZTestMode mode) override;
66 void ClearZBuffer() override;
67 void SetCullMode(CullMode mode) override;
68 void SetAlphaTest(bool b) override;
69 void SetMaterial(const RageColor& emissive,
70 const RageColor& ambient,
71 const RageColor& diffuse,
72 const RageColor& specular,
73 float shininess) override;
74 void SetLighting(bool b) override;
75 void SetLightOff(int index) override;
76 void SetLightDirectional(int index,
77 const RageColor& ambient,
78 const RageColor& diffuse,
79 const RageColor& specular,
80 const RageVector3& dir) override;
81 PipelineHandle CreateGraphicsPipeline(
82 const std::string& vertexShaderPath,
83 const std::string& fragmentShaderPath) override;
84 void SetGraphicsPipeline(PipelineHandle pipeline,
85 const std::vector<uint8_t>& vertexShaderArgs,
86 const std::vector<uint8_t>& fragShaderArgs,
87 bool persist) override;
88 void ReloadPipelines() override;
89 intptr_t CreateRenderTarget(const RenderTargetParam& param,
90 int& iTextureWidthOut,
91 int& iTextureHeightOut) override;
92 intptr_t GetRenderTarget() override;
93 void SetRenderTarget(intptr_t uTexHandle, bool bPreserveTexture) override;
94
95 void SetSphereEnvironmentMapping(TextureUnit tu, bool b) override;
96 void SetCelShaded(int stage) override;
97
98 bool IsD3DInternal() override { return m_Renderer->IsD3DInternal(); }
99 [[nodiscard]] bool SupportsFullscreenBorderlessWindow() const override
100 {
101 return true;
102 }
103
104 RageCompiledGeometry* CreateCompiledGeometry() override;
105 void DeleteCompiledGeometry(RageCompiledGeometry* p) override;
106
107 protected:
108 void DrawQuadsInternal(const RageSpriteVertex v[], int iNumVerts) override;
109 void DrawQuadStripInternal(const RageSpriteVertex v[],
110 int iNumVerts) override;
111 void DrawFanInternal(const RageSpriteVertex v[], int iNumVerts) override;
112 void DrawStripInternal(const RageSpriteVertex v[], int iNumVerts) override;
113 void DrawTrianglesInternal(const RageSpriteVertex v[],
114 int iNumVerts) override;
115 void DrawSymmetricQuadStripInternal(const RageSpriteVertex v[],
116 int iNumVerts) override;
117 void DrawCompiledGeometryInternal(const RageCompiledGeometry* p,
118 int iMeshIndex) override;
119
120 std::string TryVideoMode(const VideoModeParams& p,
121 bool& bNewDeviceOut) override;
122 RageSurface* CreateScreenshot() override;
123 MatrixState GetCurrentMatrixState();
124
125 private:
126 std::unique_ptr<Renderer> m_Renderer;
127 bool m_IsInitDone = false;
128 CommandBatcher m_Batcher;
129 RenderState m_RenderState;
130 intptr_t m_CurrentRenderTarget = 0;
131 size_t CurrentBufferScale = 1;
132
133 LowLevelWindowVK* m_Window = nullptr;
134};
135} // namespace DisplayAdapter
136
137#endif
The actual VideoModeParams determined by the LowLevelWindow implementation. Contains all the attribut...
Definition RageDisplay.h:208
Definition CommandBatcher.h:18
Definition Display.h:14
Definition LowLevelWindowVK.h:14
Definition RageDisplay.h:35
Definition RageDisplay.h:270
The parameters used for the present Video Mode.
Definition RageDisplay.h:102
Definition MatrixState.h:9
Definition PipelineHandle.h:7
Definition RenderState.h:10
Definition RageTypes.h:332
Definition RageDisplay.h:278
Definition RageTypes.h:557
Definition RageSurface.h:90
Definition RageTypes.h:172
Definition RageDisplay.h:245