diff options
| author | hachem <im@hachem.wtf> | 2026-08-18 15:00:34 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2026-08-18 15:00:34 +0200 |
| commit | aabbeac3d9e2ac0f293ab43fec71e56091c823e8 (patch) | |
| tree | 4d986035f451e8511024076b2c94362dbf549712 /src/platform/opengl/opengl_shader.cpp | |
| parent | ecb6705c7fc4fb085184712567d0e936ea5d0d1f (diff) | |
fix: macOS compatibility
Diffstat (limited to 'src/platform/opengl/opengl_shader.cpp')
| -rw-r--r-- | src/platform/opengl/opengl_shader.cpp | 17 |
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); } }; |
