diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index 360a49adedb7409ebb86e5cd6a83f31ca4845581..207d2fb90d7461302cbd68bf6241a0c9653c08f0 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -6,7 +6,8 @@ "${workspaceFolder}/include", "~/.conan/data/", "/home/tim/.conan/data/gl3w/0.2/tuebel/testing/package/1a651c5b4129ad794b88522bece2281a7453aee4/include", - "/home/tim/.conan/data/glfw/3.2.1/bincrafters/stable/package/db2ca884c9793e0b0fb54ec3f846326d1addacc8/include" + "/home/tim/.conan/data/glfw/3.2.1/bincrafters/stable/package/db2ca884c9793e0b0fb54ec3f846326d1addacc8/include", + "/home/tim/.conan/data/glm/0.9.9.1/g-truc/stable/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include" ], "defines": [], "cStandard": "c11", diff --git a/include/scigl_render/check_gl_error.hpp b/include/scigl_render/check_gl_error.hpp index 0a0e4a761389d6b6bc57e2bcf965008c15b3ebf2..95b11bc0a1692f78899a3f7e19805f38d4c536dd 100644 --- a/include/scigl_render/check_gl_error.hpp +++ b/include/scigl_render/check_gl_error.hpp @@ -1,18 +1,15 @@ #pragma once #include <GL/gl3w.h> -#include <sstream> -#include <stdexcept> +#include <iostream> namespace scigl_render { inline void check_gl_error(const std::string& msg) { GLenum err; - if ((err = glGetError()) != GL_NO_ERROR) + while ((err = glGetError()) != GL_NO_ERROR) { - std::stringstream stream; - stream << msg << std::hex << err; - throw std::runtime_error(stream.str()); + std::cerr << "OpenGL error: " << msg << std::hex << err << "\n"; } } } // namespace scigl_render \ No newline at end of file diff --git a/include/scigl_render/render/rasterizer.hpp b/include/scigl_render/render/rasterizer.hpp index 5b3715135290dfbf07e76ff55cec5585ee3a6b8b..4072fd61c8185853b400ff6bbd74c29d22f4d60d 100644 --- a/include/scigl_render/render/rasterizer.hpp +++ b/include/scigl_render/render/rasterizer.hpp @@ -102,6 +102,8 @@ public: size_t get_views_per_column() const; size_t get_view_width() const; size_t get_view_height() const; + size_t get_texture_width() const; + size_t get_texture_height() const; void set_views_per_row(size_t views_per_row); void set_views_per_column(size_t views_per_column); void set_view_width(size_t width); diff --git a/include/scigl_render/shader/shader.hpp b/include/scigl_render/shader/shader.hpp index f5f901b7790a1349c36b3e4adcfeb4db6577a696..cd9025928ddb4187bb58ed7b3a6f0fcefd7981bd 100644 --- a/include/scigl_render/shader/shader.hpp +++ b/include/scigl_render/shader/shader.hpp @@ -32,6 +32,9 @@ public: /*! Set the uniform variable value in the shader program. */ void setInt(const std::string &name, int value) const; + /*! Set the uniform variable value in the shader program. */ + void setUInt(const std::string &name, uint32_t value) const; + /*! Set the uniform variable value in the shader program. */ void setFloat(const std::string &name, float value) const; @@ -64,7 +67,27 @@ public: void setMat4(const std::string &name, const glm::mat4 &mat) const; /*! Set the uniform variable value in the shader program. */ - void setArray(const std::string &name, const float array[], int count) const; + void setUVec2(const std::string &name, const glm::uvec2 &value) const; + + /*! Set the uniform variable value in the shader program. */ + void setUVec3(const std::string &name, const glm::uvec3 &value) const; + + /*! Set the uniform variable value in the shader program. */ + void setUVec4(const std::string &name, const glm::uvec4 &value) const; + + /*! Set the uniform variable value in the shader program. */ + void setUVec2(const std::string &name, uint32_t x, uint32_t y) const; + + /*! Set the uniform variable value in the shader program. */ + void setUVec3(const std::string &name, + uint32_t x, uint32_t y, uint32_t z) const; + + /*! Set the uniform variable value in the shader program. */ + void setUVec4(const std::string &name, + uint32_t x, uint32_t y, uint32_t z, uint32_t w) const; + + /*! Set the uniform variable value in the shader program. */ + void setFloatArray(const std::string &name, const float array[], int count) const; private: /*! diff --git a/src/render/rasterizer.cpp b/src/render/rasterizer.cpp index 18156a5f627462575bad73b4c297c26b35cacd87..0caaaca66c865ec319834d358226a508f83a2d24 100644 --- a/src/render/rasterizer.cpp +++ b/src/render/rasterizer.cpp @@ -71,6 +71,14 @@ size_t Rasterizer::get_view_height() const { return height; } +size_t Rasterizer::get_texture_width() const +{ + return texture_width; +} +size_t Rasterizer::get_texture_height() const +{ + return texture_height; +} void Rasterizer::set_views_per_row(size_t views_per_row) { this->views_per_row = views_per_row; diff --git a/src/scene/cv_camera.cpp b/src/scene/cv_camera.cpp index 31b46a218ceef656b5813a47ba5611444013dba2..b223bf548f1794127ba653eaf1b9fdd735fc3cee 100644 --- a/src/scene/cv_camera.cpp +++ b/src/scene/cv_camera.cpp @@ -79,7 +79,7 @@ void CvCamera::set_in_shader(const Shader &shader) const { shader.activate(); shader.setVec3("camera_position", this->pose.position); - shader.setArray("dist_coeffs", this->intrinsics.dist_coeffs, + shader.setFloatArray("dist_coeffs", this->intrinsics.dist_coeffs, sizeof(this->intrinsics.dist_coeffs)); shader.setMat4("projection_matrix", get_projection_matrix()); shader.setMat4("view_matrix", get_view_matrix()); diff --git a/src/shader/shader.cpp b/src/shader/shader.cpp index 049fbd9b805b7fdc86708634f08b9c1d4804fe66..22c6fcf4beffd5c34e9cdcb0540e33f330f4dae8 100644 --- a/src/shader/shader.cpp +++ b/src/shader/shader.cpp @@ -38,6 +38,11 @@ void Shader::setInt(const std::string &name, int value) const glUniform1i(glGetUniformLocation(program_id, name.c_str()), value); } +void Shader::setUInt(const std::string &name, uint32_t value) const +{ + glUniform1ui(glGetUniformLocation(program_id, name.c_str()), value); +} + void Shader::setFloat(const std::string &name, float value) const { glUniform1f(glGetUniformLocation(program_id, name.c_str()), value); @@ -92,7 +97,39 @@ void Shader::setMat4(const std::string &name, const glm::mat4 &mat) const GL_FALSE, &mat[0][0]); } -void Shader::setArray( +void Shader::setUVec2(const std::string &name, const glm::uvec2 &value) const +{ + glUniform2uiv(glGetUniformLocation(program_id, name.c_str()), 1, &value[0]); +} + +void Shader::setUVec3(const std::string &name, const glm::uvec3 &value) const +{ + glUniform3uiv(glGetUniformLocation(program_id, name.c_str()), 1, &value[0]); +} + +void Shader::setUVec4(const std::string &name, const glm::uvec4 &value) const +{ + glUniform4uiv(glGetUniformLocation(program_id, name.c_str()), 1, &value[0]); +} + +void Shader::setUVec2(const std::string &name, uint32_t x, uint32_t y) const +{ + glUniform2ui(glGetUniformLocation(program_id, name.c_str()), x, y); +} + +void Shader::setUVec3(const std::string &name, + uint32_t x, uint32_t y, uint32_t z) const +{ + glUniform3ui(glGetUniformLocation(program_id, name.c_str()), x, y, z); +} + +void Shader::setUVec4(const std::string &name, + uint32_t x, uint32_t y, uint32_t z, uint32_t w) const +{ + glUniform4ui(glGetUniformLocation(program_id, name.c_str()), x, y, z, w); +} + +void Shader::setFloatArray( const std::string &name, const float array[], int count) const { glUniform1fv(glGetUniformLocation(program_id, name.c_str()), count, array);