6#include "../interpreter.h"
14#define FAST_GFX_OPENGL_USE_GLEW
19#define FAST_GFX_OPENGL_USE_GLEW
22#define GL_GLEXT_PROTOTYPES 1
23#include <SDL3/SDL_opengl.h>
25#define FAST_GFX_OPENGL_USE_GLEW
33#define GL_GLEXT_PROTOTYPES 1
34#include <SDL3/SDL_opengl.h>
84 std::shared_ptr<Ship::ResourceManager> resourceManager =
nullptr);
100 void UploadTexture(
const uint8_t* rgba32Buf, uint32_t width, uint32_t height)
override;
106 void SetScissor(
int x,
int y,
int width,
int height)
override;
108 void DrawTriangles(
float buf_vbo[],
size_t buf_vbo_len,
size_t buf_vbo_num_tris)
override;
116 bool opengl_invertY,
bool render_target,
bool has_depth_buffer,
117 bool can_extract_depth)
override;
119 void CopyFramebuffer(
int fbDstId,
int fbSrcId,
int srcX0,
int srcY0,
int srcX1,
int srcY1,
int dstX0,
int dstY0,
120 int dstX1,
int dstY1)
override;
125 std::unordered_map<std::pair<float, float>, uint16_t,
hash_pair_ff>
126 GetPixelDepth(
int fb_id,
const std::set<std::pair<float, float>>& coordinates)
override;
137 std::string BuildFsShader(
const CCFeatures& cc_features);
138 void SetPerDrawUniforms();
140 std::shared_ptr<Ship::ConsoleVariable> mConsoleVariable;
141 std::shared_ptr<Ship::ResourceManager> mResourceManager;
143 std::vector<TextureInfo> textures;
146 uint8_t mCurrentTile;
147 int8_t mLastActiveTexture = -1;
148 int8_t mLastBlendEnabled = -1;
149 int8_t mLastScissorEnabled = -1;
151 std::map<std::pair<uint64_t, uint32_t>, ShaderProgram> mShaderProgramPool;
152 ShaderProgram* mCurrentShaderProgram;
153 ShaderProgram* mLastLoadedShader =
nullptr;
155 GLuint mOpenglVbo = 0;
156#if defined(__APPLE__) || defined(USE_OPENGLES)
160 uint32_t mFrameCount = 0;
162 std::vector<FramebufferOGL> mFrameBuffers;
163 size_t mCurrentFrameBuffer = 0;
164 float mCurrentNoiseScale = 0.0f;
167 GLint mMaxMsaaLevel = 1;
168 GLuint mPixelDepthRb = 0;
169 GLuint mPixelDepthFb = 0;
170 size_t mPixelDepthRbSize = 0;
OpenGL/OpenGLES implementation of the Fast3D rendering API.
Definition gfx_opengl.h:80
uint32_t NewTexture() override
int GetMaxTextureSize() override
GfxClipParameters GetClipParameters() override
void ReadFramebufferToCPU(int fbId, uint32_t width, uint32_t height, uint16_t *rgba16Buf) override
void SetSamplerParameters(int sampler, bool linear_filter, uint32_t cms, uint32_t cmt) override
ImTextureID GetTextureById(int id) override
int CreateFramebuffer() override
void SetSrgbMode() override
void DrawTriangles(float buf_vbo[], size_t buf_vbo_len, size_t buf_vbo_num_tris) override
void ClearFramebuffer(bool color, bool depth) override
const char * GetName() override
void ClearDepthRegion(int x, int y, int w, int h) override
ShaderProgram * CreateAndLoadNewShader(uint64_t shaderId0, uint64_t shaderId1) override
void ShaderGetInfo(ShaderProgram *prg, uint8_t *numInputs, bool usedTextures[2]) override
void ResolveMSAAColorBuffer(int fbIdTarger, int fbIdSrc) override
void StartFrame() override
void UpdateFramebufferParameters(int fb_id, uint32_t width, uint32_t height, uint32_t msaa_level, bool opengl_invertY, bool render_target, bool has_depth_buffer, bool can_extract_depth) override
void UnloadShader(ShaderProgram *oldPrg) override
std::unordered_map< std::pair< float, float >, uint16_t, hash_pair_ff > GetPixelDepth(int fb_id, const std::set< std::pair< float, float > > &coordinates) override
FilteringMode GetTextureFilter() override
void * GetFramebufferTextureId(int fbId) override
void SetUseAlpha(bool useAlpha) override
void SetScissor(int x, int y, int width, int height) override
ShaderProgram * LookupShader(uint64_t shaderId0, uint64_t shaderId1) override
void CopyFramebuffer(int fbDstId, int fbSrcId, int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1) override
void SetCurrentPrimDepth(float depth) override
void SetTextureFilter(FilteringMode mode) override
void UploadTexture(const uint8_t *rgba32Buf, uint32_t width, uint32_t height) override
~GfxRenderingAPIOGL() override=default
void DeleteTexture(uint32_t texId) override
void ClearShaderCache() override
void StartDrawToFramebuffer(int fbId, float noiseScale) override
void SetViewport(int x, int y, int width, int height) override
GfxRenderingAPIOGL(std::shared_ptr< Ship::ConsoleVariable > consoleVariable=nullptr, std::shared_ptr< Ship::ResourceManager > resourceManager=nullptr)
Constructs the OpenGL renderer with optional shared dependencies.
void SetZmodeDecal(bool decal) override
void SelectTextureFb(int fbId) override
void LoadShader(ShaderProgram *newPrg) override
void SelectTexture(int tile, uint32_t textureId) override
void FinishRender() override
void SetDepthTestAndMask(bool depth_test, bool z_upd) override
Definition gfx_rendering_api.h:30
#define SHADER_MAX_TEXTURES
Definition interpreter.h:105
Definition gfx_direct3d_common.h:19
FilteringMode
Definition gfx_rendering_api.h:17
@ FILTER_THREE_POINT
Definition gfx_rendering_api.h:17
Core namespace for the libultraship engine framework.
Definition gfx_direct3d_common.h:14
OpenGL framebuffer object and associated attachments.
Definition gfx_opengl.h:59
GLuint clrbufMsaa
Definition gfx_opengl.h:65
uint32_t height
Definition gfx_opengl.h:60
uint32_t width
Definition gfx_opengl.h:60
uint32_t msaa_level
Definition gfx_opengl.h:62
GLuint fbo
Definition gfx_opengl.h:65
GLuint clrbuf
Definition gfx_opengl.h:65
bool invertY
Definition gfx_opengl.h:63
GLuint rbo
Definition gfx_opengl.h:65
bool has_depth_buffer
Definition gfx_opengl.h:61
Definition gfx_rendering_api.h:12
OpenGL shader program metadata cached by the Fast3D renderer.
Definition gfx_opengl.h:40
uint8_t numFloats
Definition gfx_opengl.h:44
GLint noiseScaleLocation
Definition gfx_opengl.h:49
GLint texture_width_location
Definition gfx_opengl.h:51
uint8_t numAttribs
Definition gfx_opengl.h:47
GLint texture_filtering_location
Definition gfx_opengl.h:53
bool usedTextures[SHADER_MAX_TEXTURES]
Definition gfx_opengl.h:43
GLint texture_height_location
Definition gfx_opengl.h:52
GLint attribLocations[16]
Definition gfx_opengl.h:45
GLint frameCountLocation
Definition gfx_opengl.h:48
uint8_t attribSizes[16]
Definition gfx_opengl.h:46
GLuint openglProgramId
Definition gfx_opengl.h:41
GLint prim_depth_location
Definition gfx_opengl.h:50
uint8_t numInputs
Definition gfx_opengl.h:42
Cached texture metadata tracked per texture id.
Definition gfx_opengl.h:71
uint16_t width
Definition gfx_opengl.h:72
uint16_t height
Definition gfx_opengl.h:73
uint16_t filtering
Definition gfx_opengl.h:74
Definition gfx_rendering_api.h:20