summaryrefslogtreecommitdiff
path: root/util/ogl_renderer/c++/program.hpp
diff options
context:
space:
mode:
authorClaudius "keldu" Holeksa <mail@keldu.de>2026-01-10 23:20:05 +0100
committerClaudius "keldu" Holeksa <mail@keldu.de>2026-01-10 23:20:05 +0100
commit1563ca95b44ea3e0f7384bc3109f366ed761668f (patch)
treea721eafa2955737a467b6bff7df78569d7f29a4c /util/ogl_renderer/c++/program.hpp
parent393e58b20ece6c9d24af432299dfab6be2402ba8 (diff)
downloadlibs-lbm-1563ca95b44ea3e0f7384bc3109f366ed761668f.tar.gz
Minor renderer for particles
Diffstat (limited to 'util/ogl_renderer/c++/program.hpp')
-rw-r--r--util/ogl_renderer/c++/program.hpp65
1 files changed, 65 insertions, 0 deletions
diff --git a/util/ogl_renderer/c++/program.hpp b/util/ogl_renderer/c++/program.hpp
new file mode 100644
index 0000000..acf3016
--- /dev/null
+++ b/util/ogl_renderer/c++/program.hpp
@@ -0,0 +1,65 @@
+#pragma once
+
+#include "common.hpp"
+
+namespace kel {
+namespace lbm {
+GLuint create_ogl_program(const char * vertex_data,const char * fragment_data){
+ // Create the shaders
+ GLuint VertexShaderID = glCreateShader(GL_VERTEX_SHADER);
+ GLuint FragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER);
+
+ GLint Result = GL_FALSE;
+ int InfoLogLength;
+
+ // Compile Vertex Shader
+ glShaderSource(VertexShaderID, 1, &vertex_data, NULL);
+ glCompileShader(VertexShaderID);
+
+ // Check Vertex Shader
+ glGetShaderiv(VertexShaderID, GL_COMPILE_STATUS, &Result);
+ glGetShaderiv(VertexShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength);
+ if ( InfoLogLength > 0 ){
+ std::vector<char> VertexShaderErrorMessage(InfoLogLength+1);
+ glGetShaderInfoLog(VertexShaderID, InfoLogLength, NULL, &VertexShaderErrorMessage[0]);
+ printf("%s\n", &VertexShaderErrorMessage[0]);
+ }
+
+ // Compile Fragment Shader
+ glShaderSource(FragmentShaderID, 1, &fragment_data , NULL);
+ glCompileShader(FragmentShaderID);
+
+ // Check Fragment Shader
+ glGetShaderiv(FragmentShaderID, GL_COMPILE_STATUS, &Result);
+ glGetShaderiv(FragmentShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength);
+ if ( InfoLogLength > 0 ){
+ std::vector<char> FragmentShaderErrorMessage(InfoLogLength+1);
+ glGetShaderInfoLog(FragmentShaderID, InfoLogLength, NULL, &FragmentShaderErrorMessage[0]);
+ printf("%s\n", &FragmentShaderErrorMessage[0]);
+ }
+
+ // Link the program
+ GLuint ProgramID = glCreateProgram();
+ glAttachShader(ProgramID, VertexShaderID);
+ glAttachShader(ProgramID, FragmentShaderID);
+ glLinkProgram(ProgramID);
+
+ // Check the program
+ glGetProgramiv(ProgramID, GL_LINK_STATUS, &Result);
+ glGetProgramiv(ProgramID, GL_INFO_LOG_LENGTH, &InfoLogLength);
+ if ( InfoLogLength > 0 ){
+ std::vector<char> ProgramErrorMessage(InfoLogLength+1);
+ glGetProgramInfoLog(ProgramID, InfoLogLength, NULL, &ProgramErrorMessage[0]);
+ printf("%s\n", &ProgramErrorMessage[0]);
+ }
+
+ glDetachShader(ProgramID, VertexShaderID);
+ glDetachShader(ProgramID, FragmentShaderID);
+
+ glDeleteShader(VertexShaderID);
+ glDeleteShader(FragmentShaderID);
+
+ return ProgramID;
+}
+}
+}