GlistEngine
Loading...
Searching...
No Matches
gGLRenderEngine.h
Go to the documentation of this file.
1//
2// Created by sadettin on 13.08.2025.
3//
4
5#pragma once
6
7#ifndef CORE_GGLENGINERENDERER_H
8#define CORE_GGLENGINERENDERER_H
9#include "gRenderer.h"
10#include "gUbo.h"
11
12class gGLRenderEngine : public gRenderer {
13public:
14 gGLRenderEngine() = default;
15 ~gGLRenderEngine() override;
16
17 void clear() override;
18 void clearColor(int r, int g, int b, int a = 255) override;
19 void clearColor(gColor color) override;
20
21 void takeScreenshot(gImage& img, int x, int y, int width, int height) override;
22 void takeScreenshot(gImage& img) override;
23
24 void enableDepthTest() override;
25 void enableDepthTest(int depthTestType) override;
26 void setDepthTestFunc(int depthTestType) override;
27 void disableDepthTest() override;
28 bool isDepthTestEnabled() override;
29 int getDepthTestType() override;
30
31 void enableAlphaBlending() override;
32 void disableAlphaBlending() override;
33 bool isAlphaBlendingEnabled() override;
34 void enableAlphaTest() override;
35 void disableAlphaTest() override;
36 bool isAlphaTestEnabled() override;
37
38 /* -------------- gUbo ------------- */
39 GLuint genBuffers() override;
40 void deleteBuffer(GLuint& buffer) override;
41
42 void bindBuffer(GLenum target, GLuint buffer) override;
43 void unbindBuffer(GLenum target) override;
44
45 void bufSubData(GLuint buffer, int offset, int size, const void* data) override;
46 void setBufferData(GLuint buffer, const void* data, size_t size, int usage) override;
47 void setBufferRange(int index, GLuint buffer, int offset, int size) override;
48
49 /* -------------- gVbo --------------- */
50 GLuint createVAO() override;
51 void deleteVAO(GLuint& vao) override;
52
53 void bindVAO(GLuint vao) override;
54 void unbindVAO() override;
55
56 void setVertexBufferData(GLuint vbo, size_t size, const void* data, int usage) override;
57 void setIndexBufferData(GLuint ebo, size_t size, const void* data, int usage) override;
58
59 void drawArrays(int drawMode, int count) override;
60 void drawElements(int drawMode, int count) override;
61
62 void enableVertexAttrib(int index) override;
63 void disableVertexAttrib(int index) override;
64 void setVertexAttribPointer(int index, int size, int type, bool normalized, int stride, const void* pointer) override;
65 void setViewport(int x, int y, int width, int height) override;
66
67 /* -------------- gFbo --------------- */
68 GLuint createFramebuffer() override;
69 void deleteFramebuffer(GLuint& fbo) override;
70 void bindFramebuffer(GLuint fbo) override;
71 void checkFramebufferStatus() override;
72
73 GLuint createRenderbuffer() override;
74 void deleteRenderbuffer(GLuint& rbo) override;
75 void bindRenderbuffer(GLuint rbo) override;
76 void setRenderbufferStorage(GLenum format, int width, int height) override;
77
78 void attachTextureToFramebuffer(GLenum attachment, GLenum textarget, GLuint texId, GLuint level = 0) override;
79 void attachRenderbufferToFramebuffer(GLenum attachment, GLuint rbo) override;
80
81 void setDrawBufferNone() override;
82 void setReadBufferNone() override;
83
84 void createFullscreenQuad(GLuint& vao, GLuint& vbo) override;
85 void deleteFullscreenQuad(GLuint& vao, GLuint* vbo) override;
86
87 /* -------------- gShader --------------- */
88 // This function loads shaders without preproccesing them. Geometry source can be nullptr.
89 GLuint loadProgram(const char* vertexSource, const char* fragmentSource, const char* geometrySource) override;
90 void checkCompileErrors(GLuint shader, const std::string& type) override;
91 void setBool(GLuint uniformloc, bool value) override;
92 void setInt(GLuint uniformloc, int value) override;
93 void setUnsignedInt(GLuint uniformloc, unsigned int value) override;
94 void setFloat(GLuint uniformloc, float value) override;
95 void setVec2(GLuint uniformloc, const glm::vec2& value) override;
96 void setVec2(GLuint uniformloc, float x, float y) override;
97 void setVec3(GLuint uniformloc, const glm::vec3& value) override;
98 void setVec3(GLuint uniformloc, float x, float y, float z) override;
99 void setVec4(GLuint uniformloc, const glm::vec4& value) override;
100 void setVec4(GLuint uniformloc, float x, float y, float z, float w) override;
101 void setMat2(GLuint uniformloc, const glm::mat2& mat) override;
102 void setMat3(GLuint uniformloc, const glm::mat3& mat) override;
103 void setMat4(GLuint uniformloc, const glm::mat4& mat) override;
104 GLuint getUniformLocation(GLuint id, const std::string& name) override;
105
106 void useShader(GLuint id) const override;
107 void resetShader(GLuint id, bool loaded) const override;
108
109 void attachUbo(GLuint id, int bindingpoint, const std::string& uboName) override {
110 unsigned int blockIndex;
111 G_CHECK_GL2(blockIndex, glGetUniformBlockIndex(id, uboName.c_str()));
112 G_CHECK_GL(glUniformBlockBinding(id, blockIndex, bindingpoint));
113 /*if (blockIndex != GL_INVALID_INDEX) {
114 GLint blockSize;
115 G_CHECK_GL(glGetActiveUniformBlockiv(id, blockIndex, GL_UNIFORM_BLOCK_DATA_SIZE, &blockSize));
116
117 GLint blockAlignment;
118 G_CHECK_GL(glGetIntegerv(GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, &blockAlignment));
119
120 std::cout << "Uniform block alignment: " << blockAlignment << " bytes" << std::endl;
121
122 // Now 'blockSize' contains the size of the uniform block in bytes
123 std::cout << "Uniform block size: " << blockSize << " bytes" << std::endl;
124 if (ubo->getSize() != blockSize) {
125 std::cout << "Error: Uniform block size mismatch. actual size: " << ubo->getSize() << ", block size: " << blockSize << std::endl;
126 }
127 } else {
128 std::cerr << "Error: Unable to find uniform block index." << std::endl;
129 }*/
130 }
131
132 /* ------------ gPostProcessManager ------------- */
133 void clearScreen(bool color = true, bool depth = true) override;
134 void bindQuadVAO() override;
135 void drawFullscreenQuad() override;
136 void bindDefaultFramebuffer() override;
137
138 /* -------------- gGrid --------------- */
139 void drawVbo(const gVbo& vbo) override;
140
141 /* ---------------- gTexture ---------------- */
142 GLuint createTextures() override;
143 void bindTexture(GLuint texId) override;
144 void bindTexture(GLuint texId, int textureSlotNo) override;
145 void unbindTexture() override;
146 void activateTexture(int textureSlotNo = 0) override;
147 void resetTexture() override;
148 void deleteTexture(GLuint& texId) override;
149
150 void texImage2D(GLenum target, GLint internalFormat, int width, int height, GLint format, GLint type, void* data) override;
151 void setWrapping(GLenum target, GLint wrapS, GLint wrapT) override;
152 void setWrapping(GLenum target, GLint wrapS, GLint wrapT, GLint wrapR) override;
153
154 void setFiltering(GLenum target, GLint minFilter, GLint magFilter) override;
155 void setWrappingAndFiltering(GLenum target, GLint wrapS, GLint wrapT, GLint minFilter, GLint magFilter) override;
156 void setWrappingAndFiltering(GLenum target, GLint wrapS, GLint wrapT, GLint wrapR, GLint minFilter, GLint magFilter) override;
157 void setSwizzleMask(GLint swizzleMask[4]) override;
158
159 void readTexturePixels(unsigned char* inPixels, GLuint textureId, int width, int height, GLenum format) override;
160 void readTexturePixelsHDR(float* inPixels, GLuint textureId, int width, int height, GLenum format) override;
161
162 void generateMipMap() override;
163
164 /* ---------------- gSkybox ---------------- */
165 void bindSkyTexture(GLuint texId) override;
166 void bindSkyTexture(GLuint texId, int textureSlot) override;
167 void unbindSkyTexture() override;
168 void unbindSkyTexture(int textureSlotNo) override;
169 void generateSkyMipMap() override;
170 void enableDepthTestEqual() override;
171 void createQuad(GLuint& inQuadVAO, GLuint& inQuadVBO) override;
172 void enableCubeMap() override;
173
174 /* ---------------- gRenderObject ---------------- */
175 void pushMatrix() override;
176 void popMatrix() override;
177
178protected:
179 void init() override;
180private:
181 mutable GLuint currentprogram = 0;
182 void updatePackUnpackAlignment(int i) override;
183};
184
185#endif
Definition gColor.h:17
Definition gGLRenderEngine.h:12
void disableVertexAttrib(int index) override
void resetTexture() override
void enableAlphaTest() override
void init() override
bool isAlphaBlendingEnabled() override
GLuint createFramebuffer() override
GLuint genBuffers() override
void setViewport(int x, int y, int width, int height) override
void takeScreenshot(gImage &img, int x, int y, int width, int height) override
GLuint getUniformLocation(GLuint id, const std::string &name) override
void setReadBufferNone() override
void setMat2(GLuint uniformloc, const glm::mat2 &mat) override
void unbindBuffer(GLenum target) override
void setVec2(GLuint uniformloc, float x, float y) override
void clear() override
void bindVAO(GLuint vao) override
void bindRenderbuffer(GLuint rbo) override
void unbindTexture() override
void pushMatrix() override
void setFiltering(GLenum target, GLint minFilter, GLint magFilter) override
void setBufferRange(int index, GLuint buffer, int offset, int size) override
void setVec3(GLuint uniformloc, float x, float y, float z) override
void disableDepthTest() override
void enableDepthTest() override
void setSwizzleMask(GLint swizzleMask[4]) override
void bindQuadVAO() override
GLuint createRenderbuffer() override
void createFullscreenQuad(GLuint &vao, GLuint &vbo) override
void enableDepthTest(int depthTestType) override
void setDrawBufferNone() override
void deleteBuffer(GLuint &buffer) override
void unbindVAO() override
void bindBuffer(GLenum target, GLuint buffer) override
void attachRenderbufferToFramebuffer(GLenum attachment, GLuint rbo) override
void resetShader(GLuint id, bool loaded) const override
void setUnsignedInt(GLuint uniformloc, unsigned int value) override
void setVec4(GLuint uniformloc, const glm::vec4 &value) override
void setIndexBufferData(GLuint ebo, size_t size, const void *data, int usage) override
gGLRenderEngine()=default
GLuint createVAO() override
int getDepthTestType() override
void setInt(GLuint uniformloc, int value) override
void deleteFullscreenQuad(GLuint &vao, GLuint *vbo) override
void setWrappingAndFiltering(GLenum target, GLint wrapS, GLint wrapT, GLint wrapR, GLint minFilter, GLint magFilter) override
void unbindSkyTexture(int textureSlotNo) override
void setVec4(GLuint uniformloc, float x, float y, float z, float w) override
void setDepthTestFunc(int depthTestType) override
void setRenderbufferStorage(GLenum format, int width, int height) override
void bindTexture(GLuint texId) override
void attachUbo(GLuint id, int bindingpoint, const std::string &uboName) override
Definition gGLRenderEngine.h:109
void disableAlphaTest() override
void setWrappingAndFiltering(GLenum target, GLint wrapS, GLint wrapT, GLint minFilter, GLint magFilter) override
void popMatrix() override
void drawVbo(const gVbo &vbo) override
void checkCompileErrors(GLuint shader, const std::string &type) override
void clearColor(int r, int g, int b, int a=255) override
void setFloat(GLuint uniformloc, float value) override
bool isDepthTestEnabled() override
void setVec2(GLuint uniformloc, const glm::vec2 &value) override
void bufSubData(GLuint buffer, int offset, int size, const void *data) override
void deleteTexture(GLuint &texId) override
void enableAlphaBlending() override
void bindFramebuffer(GLuint fbo) override
void enableDepthTestEqual() override
void setVertexBufferData(GLuint vbo, size_t size, const void *data, int usage) override
void bindTexture(GLuint texId, int textureSlotNo) override
GLuint createTextures() override
void bindSkyTexture(GLuint texId) override
void deleteVAO(GLuint &vao) override
void deleteRenderbuffer(GLuint &rbo) override
void generateMipMap() override
void useShader(GLuint id) const override
void drawFullscreenQuad() override
void drawElements(int drawMode, int count) override
void disableAlphaBlending() override
void unbindSkyTexture() override
void enableCubeMap() override
void readTexturePixels(unsigned char *inPixels, GLuint textureId, int width, int height, GLenum format) override
void bindSkyTexture(GLuint texId, int textureSlot) override
void clearColor(gColor color) override
void bindDefaultFramebuffer() override
void createQuad(GLuint &inQuadVAO, GLuint &inQuadVBO) override
void setMat4(GLuint uniformloc, const glm::mat4 &mat) override
void setMat3(GLuint uniformloc, const glm::mat3 &mat) override
void readTexturePixelsHDR(float *inPixels, GLuint textureId, int width, int height, GLenum format) override
void setWrapping(GLenum target, GLint wrapS, GLint wrapT) override
void generateSkyMipMap() override
void activateTexture(int textureSlotNo=0) override
void setBool(GLuint uniformloc, bool value) override
void setBufferData(GLuint buffer, const void *data, size_t size, int usage) override
GLuint loadProgram(const char *vertexSource, const char *fragmentSource, const char *geometrySource) override
void drawArrays(int drawMode, int count) override
void enableVertexAttrib(int index) override
void texImage2D(GLenum target, GLint internalFormat, int width, int height, GLint format, GLint type, void *data) override
void takeScreenshot(gImage &img) override
void setVec3(GLuint uniformloc, const glm::vec3 &value) override
void setVertexAttribPointer(int index, int size, int type, bool normalized, int stride, const void *pointer) override
void clearScreen(bool color=true, bool depth=true) override
void setWrapping(GLenum target, GLint wrapS, GLint wrapT, GLint wrapR) override
void attachTextureToFramebuffer(GLenum attachment, GLenum textarget, GLuint texId, GLuint level=0) override
void deleteFramebuffer(GLuint &fbo) override
bool isAlphaTestEnabled() override
~gGLRenderEngine() override
void checkFramebufferStatus() override
Definition gImage.h:34
Definition gRenderer.h:123
static int height
Definition gRenderer.h:523
static int width
Definition gRenderer.h:523
Definition gVbo.h:30
float r
Definition gColor.h:22
float a
Definition gColor.h:22
float b
Definition gColor.h:22
float g
Definition gColor.h:22
#define G_CHECK_GL(fn)
Definition gRenderer.h:65
#define G_CHECK_GL2(value, fn)
Definition gRenderer.h:66