diff options
| author | Loic Guegan <manzerbredes@mailbox.org> | 2020-07-06 07:17:09 +0200 |
|---|---|---|
| committer | Loic Guegan <manzerbredes@mailbox.org> | 2020-07-06 07:17:09 +0200 |
| commit | 29339928d7a05ca11786885643631206a978655e (patch) | |
| tree | b8c9f69f807a2002e2ac7649e48734b1c38bea8c /src/opengl/renderer.cpp | |
| parent | e29a9115d185d0b752868a36c8d56f6020bc4134 (diff) | |
Cleaning code
Diffstat (limited to 'src/opengl/renderer.cpp')
| -rw-r--r-- | src/opengl/renderer.cpp | 41 |
1 files changed, 25 insertions, 16 deletions
diff --git a/src/opengl/renderer.cpp b/src/opengl/renderer.cpp index 1898753..1a7166d 100644 --- a/src/opengl/renderer.cpp +++ b/src/opengl/renderer.cpp @@ -18,7 +18,9 @@ void GLAPIENTRY MessageCallback( GLenum source, } -Renderer::Renderer(short width,short height): Width(width),Height(height), ClockStart(steady_clock::now()){ +Renderer::Renderer(short width,short height, std::string shader_name): + Width(width),Height(height), ClockStart(steady_clock::now()), + CurrentShader(shader_name){ // Init OpenGl glewInit(); glEnable(GL_DEPTH_TEST); @@ -33,24 +35,25 @@ Renderer::Renderer(short width,short height): Width(width),Height(height), Clock glGenBuffers(1, &vertexbuffer); glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer); float square[]{ - -1,1,0, - 1,1,0, - -1,-1,0, - - -1,-1,0, - 1,1,0, - 1,-1,0 - + -1,1,0,1,1,0,-1,-1,0, + -1,-1,0,1,1,0,1,-1,0 }; glBufferData(GL_ARRAY_BUFFER, 6*3*sizeof(float), square, GL_STATIC_DRAW); glEnableVertexAttribArray(0); glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,3*sizeof(float),(void*)0); glBindVertexArray(0); - LoadShader("square.glsl"); + LoadShader(); +} + +Renderer::~Renderer(){ + glDeleteProgram(RayMarchingShader); + glDeleteVertexArrays(1,&VAO); } void Renderer::Render(){ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + // Setup shader glUseProgram(RayMarchingShader); MProjection=glm::ortho(-10.0f,10.0f,-10.0f,10.0f,0.f,100.0f); MModel=glm::scale(glm::mat4(1.0f),glm::vec3(10,10,1)); @@ -59,22 +62,28 @@ void Renderer::Render(){ ClockCurrent = std::chrono::steady_clock::now(); duration<double> time_span = duration_cast<duration<double>>(ClockCurrent - ClockStart); glUniform1f(UTime, time_span.count()); - glUniform2f(UResolution,Width,Height); + + // Draw the actual shader onto the quad glBindVertexArray(VAO); glDrawArrays(GL_TRIANGLES,0,6); glBindVertexArray(0); glUseProgram(0); } -void Renderer::UpdateShader(std::string name){ +void Renderer::ChangeShader(std::string name){ + this->CurrentShader=name; + glDeleteProgram(RayMarchingShader); + LoadShader(); +} + +void Renderer::RefreshShader(){ glDeleteProgram(RayMarchingShader); - LoadShader(name); + LoadShader(); } -void Renderer::LoadShader(std::string name){ - RayMarchingShader = CompileShader("square.glsl"); - RayMarchingShader = CompileShader("square.glsl"); +void Renderer::LoadShader(){ + RayMarchingShader = CompileShader(CurrentShader); UProjection = glGetUniformLocation(RayMarchingShader, "projection"); UModel = glGetUniformLocation(RayMarchingShader, "model"); UResolution = glGetUniformLocation(RayMarchingShader, "resolution"); |
