hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/src/platform
diff options
context:
space:
mode:
Diffstat (limited to 'src/platform')
-rw-r--r--src/platform/opengl/shader.cpp13
-rw-r--r--src/platform/opengl/texture.cpp13
2 files changed, 17 insertions, 9 deletions
diff --git a/src/platform/opengl/shader.cpp b/src/platform/opengl/shader.cpp
index b815021..21335dd 100644
--- a/src/platform/opengl/shader.cpp
+++ b/src/platform/opengl/shader.cpp
@@ -6,6 +6,8 @@
#include <fstream>
#include <iostream>
#include <vector>
+#include <filesystem>
+#include "core/log.h"
namespace Donut
{
@@ -89,6 +91,13 @@ namespace Donut
in.read(&result[0], size);
}
}
+ else
+ {
+ std::error_code ec;
+ const auto cwd = std::filesystem::current_path(ec).u8string();
+ DONUT_ERROR("shader file not found: {} (cwd {}; generated shaders live in assets/shaders/generated)",
+ filepath, std::string(cwd.begin(), cwd.end()));
+ }
return result;
}
@@ -136,7 +145,7 @@ namespace Donut
int max_length = 0;
glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &max_length);
std::vector<char> info_log(max_length);
- glGetShaderInfoLog(shader, max_length, &max_length, &info_log[0]);
+ if (max_length > 0) glGetShaderInfoLog(shader, max_length, &max_length, info_log.data());
glDeleteShader(shader);
for (auto id : glShaderIDs)
glDeleteShader(id);
@@ -160,7 +169,7 @@ namespace Donut
int max_length = 0;
glGetProgramiv(m_renderer_id, GL_INFO_LOG_LENGTH, &max_length);
std::vector<char> info_log(max_length);
- glGetProgramInfoLog(m_renderer_id, max_length, &max_length, &info_log[0]);
+ if (max_length > 0) glGetProgramInfoLog(m_renderer_id, max_length, &max_length, info_log.data());
glDeleteProgram(m_renderer_id);
for (auto id : glShaderIDs)
glDeleteShader(id);
diff --git a/src/platform/opengl/texture.cpp b/src/platform/opengl/texture.cpp
index 11ae1e3..5cd7e74 100644
--- a/src/platform/opengl/texture.cpp
+++ b/src/platform/opengl/texture.cpp
@@ -180,15 +180,14 @@ namespace Donut
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- auto equirect_shader = Shader::create("assets/shaders/equirect_to_cubemap.glsl");
- if (!equirect_shader)
+ auto equirect_shader = Shader::create("assets/shaders/generated/equirect_to_cubemap.glsl");
+ uint32_t shader_program = equirect_shader ? equirect_shader->get_renderer_id() : 0;
+ if (!shader_program)
{
- DONUT_ERROR("Failed to create equirectangular to cubemap shader");
+ DONUT_ERROR("equirect_to_cubemap shader missing or failed to compile; the sky stays dark");
return;
}
- uint32_t shader_program = equirect_shader->get_renderer_id();
-
float vertices[] =
{
-1.0f, 1.0f, -1.0f, -1.0f, -1.0f, -1.0f, 1.0f, -1.0f, -1.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, -1.0f, -1.0f, 1.0f, -1.0f,
@@ -221,7 +220,7 @@ namespace Donut
glUseProgram(shader_program);
glUniform1i(glGetUniformLocation(shader_program, "u_EquirectangularMap"), 0);
- glUniformMatrix4fv(glGetUniformLocation(shader_program, "u_Projection"), 1, GL_TRUE, &capture_projection[0][0]);
+ glUniformMatrix4fv(glGetUniformLocation(shader_program, "u_projection"), 1, GL_TRUE, &capture_projection[0][0]);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, hdr_texture);
@@ -229,7 +228,7 @@ namespace Donut
glBindFramebuffer(GL_FRAMEBUFFER, capture_fbo);
for (unsigned int i = 0; i < 6; ++i)
{
- glUniformMatrix4fv(glGetUniformLocation(shader_program, "u_View"), 1, GL_TRUE, &capture_views[i][0][0]);
+ glUniformMatrix4fv(glGetUniformLocation(shader_program, "u_view"), 1, GL_TRUE, &capture_views[i][0][0]);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, m_renderer_id, 0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBindVertexArray(cube_vao);