Sparkle 0.0.1
Loading...
Searching...
No Matches
spk_opengl_utils.hpp
1#pragma once
2
3#include <cstdint>
4#include <string>
5#include <vector>
6
7#include "structure/math/spk_vector2.hpp"
8#include "structure/opengl/spk_opengl_includes.hpp"
9#include "type/spk_activation_status.hpp"
10
11namespace spk
12{
13 namespace OpenGLUtils
14 {
19 GLuint generateVertexArrayObjectID();
24 void releaseVertexArrayObjectID(GLuint p_idToRelease);
29 void activateVertexArrayObject(GLuint p_idToRelease);
33 void deactivateVertexArrayObject();
34
41 GLuint compileShader(const std::string &p_shaderCode, GLenum p_shaderType);
48 GLuint linkProgram(GLuint p_vertexShader, GLuint p_fragmentShader);
55 GLuint loadProgram(const std::string &p_vertexShaderCode, const std::string &p_fragmentShaderCode);
60 void releaseProgram(GLuint p_programID);
65 void activateProgram(GLuint p_programID);
69 void deactivateProgram();
70
76 void launchProgramRenderInstanciatedMode(GLsizei p_nbIndexes, GLsizei p_nbInstance);
83 void launchProgramRenderIndirectInstanciatedMode(GLintptr p_commandOffset, GLsizei p_drawCount, GLsizei p_stride);
84
89 GLuint generateBufferObjectID();
94 void releaseBufferObjectID(GLuint p_bufferID);
100 void activateBufferObject(GLenum p_target, GLuint p_bufferID);
105 void deactivateBufferObject(GLenum p_target);
111 void updateBufferObject(GLenum p_type, const std::vector<uint8_t> &p_bufferData);
118 void updateBufferObject(GLenum p_type, GLenum p_usage, const std::vector<uint8_t> &p_bufferData);
124 std::size_t getBufferSize(GLenum p_target);
132 void readBufferObject(GLenum p_target, void *p_destination, std::size_t p_size, std::size_t p_offset = 0);
139 std::vector<uint8_t> readBuffer(GLenum p_target, GLuint p_id);
140
145 GLuint generateTextureObjectID();
150 void releaseTextureObjectID(GLuint p_textureID);
156 void activateTexture(GLenum p_target, GLuint p_textureID);
161 void deactivateTexture(GLenum p_target);
168 void setTextureParameter(GLenum p_target, GLenum p_parameter, GLint p_value);
178 void uploadTexture2D(GLenum p_target, GLenum p_internalFormat, const spk::Vector2UInt &p_size, GLenum p_format, GLenum p_type, const void *p_data);
184 void applyTextureMipmapState(GLenum p_target, spk::ActivationStatus p_state);
189 void activateTextureUnitIndex(GLuint p_textureUnitIndex);
190
195 GLuint generateFrameBufferObjectID();
200 void releaseFrameBufferObjectID(GLuint p_framebufferID);
205 void activateFrameBufferObject(GLuint p_framebufferID);
209 void deactivateFrameBufferObject();
210
211 GLuint currentFrameBufferObject();
212
218 std::string frameBufferStatusToString(GLenum p_status);
222 void ensureFrameBufferCompleteness();
223
228 enum class BindableBufferType
229 {
230 Uniform = GL_UNIFORM_BUFFER,
231 ShaderStorage = GL_SHADER_STORAGE_BUFFER
232 };
233
240 void bindBufferBase(BindableBufferType p_target, GLuint p_bindingPoint, GLuint p_id);
247 GLint getUniformBlockIndex(GLint p_prog, std::string p_uniformBlockName);
254 GLint getShaderStorageBlockIndex(GLint p_prog, std::string p_shaderStorageBlockName);
261 void linkUniformBlockIndexToBindingPoint(GLint p_prog, GLint p_blockIndex, GLuint p_bindingPoint);
268 void linkShaderStorageBlockIndexToBindingPoint(GLint p_prog, GLint p_blockIndex, GLuint p_bindingPoint);
269
277 void setViewport(GLint p_x, GLint p_y, GLsizei p_width, GLsizei p_height);
282 void setScissorTestState(spk::ActivationStatus p_state);
290 void setScissor(GLint p_x, GLint p_y, GLsizei p_width, GLsizei p_height);
298 void setClearColor(GLfloat p_r, GLfloat p_g, GLfloat p_b, GLfloat p_a);
303 void clearFrame(GLbitfield p_mask);
304 }
305}