diff --git a/includes/RT/ShaderProgram.hpp b/includes/RT/ShaderProgram.hpp index 9d1314d..107d568 100644 --- a/includes/RT/ShaderProgram.hpp +++ b/includes/RT/ShaderProgram.hpp @@ -40,7 +40,7 @@ class ShaderProgram void set_textures(std::map> texture_ids); - void set_define(const std::string &name, const std::string &value); + void setDefine(const std::string &name, const std::string &value); GLuint getProgram(void) const; diff --git a/shaders/light.glsl b/shaders/light.glsl index de5402d..06d9613 100644 --- a/shaders/light.glsl +++ b/shaders/light.glsl @@ -93,8 +93,13 @@ vec2 getSphereUV(vec3 surfacePoint) return vec2(u, v); } -uniform sampler2D textures[64]; -uniform sampler2D emissive_textures[64]; +#if SHADER_TEXTURE_MAX + uniform sampler2D textures[SHADER_TEXTURE_MAX]; + uniform sampler2D emissive_textures[SHADER_TEXTURE_MAX]; +#else + uniform sampler2D textures[64]; + uniform sampler2D emissive_textures[64]; +#endif vec2 getTextureColor(hitInfo hit) { diff --git a/srcs/RT.cpp b/srcs/RT.cpp index d5d4ed9..0c27ff7 100644 --- a/srcs/RT.cpp +++ b/srcs/RT.cpp @@ -47,8 +47,13 @@ int main(int argc, char **argv) //6 light_accum //7 color + + ShaderProgram raytracing_program; Shader compute = Shader(GL_COMPUTE_SHADER, "shaders/compute.glsl"); + int maxTextureUnits; glGetIntegerv(GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS, &maxTextureUnits); + compute.setDefine("TEXTURE_MAX", std::to_string(maxTextureUnits / 2)); + compute.reload(); raytracing_program.attachShader(&compute); raytracing_program.link(); diff --git a/srcs/class/ShaderProgram.cpp b/srcs/class/ShaderProgram.cpp index 91dbca1..da56a19 100644 --- a/srcs/class/ShaderProgram.cpp +++ b/srcs/class/ShaderProgram.cpp @@ -129,7 +129,7 @@ void ShaderProgram::set_textures(std::map> text } } -void ShaderProgram::set_define(const std::string &name, const std::string &value) +void ShaderProgram::setDefine(const std::string &name, const std::string &value) { for (Shader *shader : _shaders) shader->setDefine(name, value); diff --git a/srcs/class/Window.cpp b/srcs/class/Window.cpp index 2cbdaa3..1e7a784 100644 --- a/srcs/class/Window.cpp +++ b/srcs/class/Window.cpp @@ -262,7 +262,7 @@ void Window::imGuiRender(ShaderProgram &raytracing_program) { if (ImGui::Checkbox("Enable##0", (bool *)(&_scene->getVolume().enabled))) { - raytracing_program.set_define("FOG", std::to_string(_scene->getVolume().enabled)); + raytracing_program.setDefine("FOG", std::to_string(_scene->getVolume().enabled)); raytracing_program.reloadShaders(); has_changed = true; } @@ -300,7 +300,7 @@ void Window::imGuiRender(ShaderProgram &raytracing_program) { if (ImGui::Checkbox("Enable##2", (bool *)(&_scene->getDebug().enabled))) { - raytracing_program.set_define("DEBUG", std::to_string(_scene->getDebug().enabled)); + raytracing_program.setDefine("DEBUG", std::to_string(_scene->getDebug().enabled)); raytracing_program.reloadShaders(); has_changed = true; }