+ | Fixing texture limit on old gpu

This commit is contained in:
TheRedShip
2025-02-17 11:50:53 +01:00
parent 6fd4f70bf0
commit fa967b1de7
5 changed files with 16 additions and 6 deletions

View File

@ -40,7 +40,7 @@ class ShaderProgram
void set_textures(std::map<std::string, std::vector<GLuint>> 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;

View File

@ -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)
{

View File

@ -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();

View File

@ -129,7 +129,7 @@ void ShaderProgram::set_textures(std::map<std::string, std::vector<GLuint>> 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);

View File

@ -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;
}