hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/src/platform/opengl/opengl_shader.cpp
diff options
context:
space:
mode:
authorhachem <im@hachem.wtf>2026-08-18 15:00:34 +0200
committerhachem <im@hachem.wtf>2026-08-18 15:00:34 +0200
commitaabbeac3d9e2ac0f293ab43fec71e56091c823e8 (patch)
tree4d986035f451e8511024076b2c94362dbf549712 /src/platform/opengl/opengl_shader.cpp
parentecb6705c7fc4fb085184712567d0e936ea5d0d1f (diff)
fix: macOS compatibility
Diffstat (limited to 'src/platform/opengl/opengl_shader.cpp')
-rw-r--r--src/platform/opengl/opengl_shader.cpp17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/platform/opengl/opengl_shader.cpp b/src/platform/opengl/opengl_shader.cpp
index 3b0108e..ddcd5e2 100644
--- a/src/platform/opengl/opengl_shader.cpp
+++ b/src/platform/opengl/opengl_shader.cpp
@@ -120,7 +120,12 @@ namespace Donut
std::vector<char> info_log(max_length);
glGetShaderInfoLog(shader, max_length, &max_length, &info_log[0]);
glDeleteShader(shader);
- std::cout << "Shader compilation failure!" << std::endl << info_log.data() << std::endl;
+ for (auto id : glShaderIDs)
+ glDeleteShader(id);
+ glDeleteProgram(program);
+ m_renderer_id = 0;
+ const char* log = info_log.empty() ? "" : info_log.data();
+ std::cout << "Shader compilation failure!" << std::endl << log << std::endl;
return;
}
glAttachShader(program, shader);
@@ -141,7 +146,9 @@ namespace Donut
glDeleteProgram(m_renderer_id);
for (auto id : glShaderIDs)
glDeleteShader(id);
- std::cout << "Shader link failure!" << std::endl << info_log.data() << std::endl;
+ m_renderer_id = 0;
+ const char* log = info_log.empty() ? "" : info_log.data();
+ std::cout << "Shader link failure!" << std::endl << log << std::endl;
return;
}
@@ -247,16 +254,22 @@ namespace Donut
void OpenGLShader::dispatch(uint32_t x, uint32_t y, uint32_t z)
{
+ if (m_renderer_id == 0 || glDispatchCompute == nullptr)
+ return;
glDispatchCompute(x, y, z);
}
void OpenGLShader::dispatch_indirect(uint32_t offset)
{
+ if (m_renderer_id == 0 || glDispatchComputeIndirect == nullptr)
+ return;
glDispatchComputeIndirect(offset);
}
void OpenGLShader::memory_barrier(uint32_t barriers)
{
+ if (glMemoryBarrier == nullptr)
+ return;
glMemoryBarrier(barriers);
}
};