diff options
author | rtk0c <[email protected]> | 2022-04-08 22:30:12 -0700 |
---|---|---|
committer | rtk0c <[email protected]> | 2022-04-08 22:30:12 -0700 |
commit | e7ef3f208c109357538b1f68af10bcd78db95c95 (patch) | |
tree | 066d614ae0f079e53602d7c0fd972998c546c8c1 /source/Shader.cpp | |
parent | f163e8f37123e651ea80b690793845b31ddb8639 (diff) |
Changeset: 3 More work
Diffstat (limited to 'source/Shader.cpp')
-rw-r--r-- | source/Shader.cpp | 52 |
1 files changed, 29 insertions, 23 deletions
diff --git a/source/Shader.cpp b/source/Shader.cpp index 458491a..72b679e 100644 --- a/source/Shader.cpp +++ b/source/Shader.cpp @@ -83,6 +83,8 @@ Shader::ErrorCode LinkShaderProgram(GLuint program) { #define CATCH_ERROR(x) CATCH_ERROR_IMPL(x, UNIQUE_NAME(result)) Shader::ErrorCode Shader::InitFromSources(const ShaderSources& sources) { + using namespace ProjectBrussel_UNITY_ID; + if (IsValid()) { return ShaderAlreadyCreated; } @@ -93,39 +95,39 @@ Shader::ErrorCode Shader::InitFromSources(const ShaderSources& sources) { GLuint vertex = 0; DEFER { glDeleteShader(vertex); }; if (!sources.vertex.empty()) { - CATCH_ERROR(ProjectBrussel_UNITY_ID::CreateShader(vertex, sources.vertex, GL_VERTEX_SHADER)); + CATCH_ERROR(CreateShader(vertex, sources.vertex, GL_VERTEX_SHADER)); glAttachShader(program, vertex); } GLuint geometry = 0; DEFER { glDeleteShader(geometry); }; if (!sources.geometry.empty()) { - CATCH_ERROR(ProjectBrussel_UNITY_ID::CreateShader(geometry, sources.geometry, GL_GEOMETRY_SHADER)); + CATCH_ERROR(CreateShader(geometry, sources.geometry, GL_GEOMETRY_SHADER)); glAttachShader(program, geometry); } GLuint tessControl = 0; DEFER { glDeleteShader(tessControl); }; if (!sources.tessControl.empty()) { - CATCH_ERROR(ProjectBrussel_UNITY_ID::CreateShader(tessControl, sources.tessControl, GL_TESS_CONTROL_SHADER)); + CATCH_ERROR(CreateShader(tessControl, sources.tessControl, GL_TESS_CONTROL_SHADER)); glAttachShader(program, tessControl); } GLuint tessEval = 0; DEFER { glDeleteShader(tessEval); }; if (!sources.tessEval.empty()) { - CATCH_ERROR(ProjectBrussel_UNITY_ID::CreateShader(tessEval, sources.tessEval, GL_TESS_EVALUATION_SHADER)); + CATCH_ERROR(CreateShader(tessEval, sources.tessEval, GL_TESS_EVALUATION_SHADER)); glAttachShader(program, tessEval); } GLuint fragment = 0; DEFER { glDeleteShader(fragment); }; if (!sources.fragment.empty()) { - CATCH_ERROR(ProjectBrussel_UNITY_ID::CreateShader(fragment, sources.fragment, GL_FRAGMENT_SHADER)); + CATCH_ERROR(CreateShader(fragment, sources.fragment, GL_FRAGMENT_SHADER)); glAttachShader(program, fragment); } - CATCH_ERROR(ProjectBrussel_UNITY_ID::LinkShaderProgram(program)); + CATCH_ERROR(LinkShaderProgram(program)); sg.Dismiss(); mHandle = program; @@ -134,6 +136,8 @@ Shader::ErrorCode Shader::InitFromSources(const ShaderSources& sources) { } Shader::ErrorCode Shader::InitFromFiles(const ShaderFilePaths& files) { + using namespace ProjectBrussel_UNITY_ID; + if (IsValid()) { return ShaderAlreadyCreated; } @@ -145,8 +149,8 @@ Shader::ErrorCode Shader::InitFromFiles(const ShaderFilePaths& files) { DEFER { glDeleteShader(vertex); }; if (files.vertex) { std::string src; - CATCH_ERROR(ProjectBrussel_UNITY_ID::LoadFile(src, files.vertex)); - CATCH_ERROR(ProjectBrussel_UNITY_ID::CreateShader(vertex, src, GL_VERTEX_SHADER)); + CATCH_ERROR(LoadFile(src, files.vertex)); + CATCH_ERROR(CreateShader(vertex, src, GL_VERTEX_SHADER)); glAttachShader(program, vertex); } @@ -154,8 +158,8 @@ Shader::ErrorCode Shader::InitFromFiles(const ShaderFilePaths& files) { DEFER { glDeleteShader(geometry); }; if (files.geometry) { std::string src; - CATCH_ERROR(ProjectBrussel_UNITY_ID::LoadFile(src, files.geometry)); - CATCH_ERROR(ProjectBrussel_UNITY_ID::CreateShader(geometry, src, GL_GEOMETRY_SHADER)); + CATCH_ERROR(LoadFile(src, files.geometry)); + CATCH_ERROR(CreateShader(geometry, src, GL_GEOMETRY_SHADER)); glAttachShader(program, geometry); } @@ -163,8 +167,8 @@ Shader::ErrorCode Shader::InitFromFiles(const ShaderFilePaths& files) { DEFER { glDeleteShader(tessControl); }; if (files.tessControl) { std::string src; - CATCH_ERROR(ProjectBrussel_UNITY_ID::LoadFile(src, files.tessControl)); - CATCH_ERROR(ProjectBrussel_UNITY_ID::CreateShader(tessControl, src, GL_TESS_CONTROL_SHADER)); + CATCH_ERROR(LoadFile(src, files.tessControl)); + CATCH_ERROR(CreateShader(tessControl, src, GL_TESS_CONTROL_SHADER)); glAttachShader(program, tessControl); } @@ -172,8 +176,8 @@ Shader::ErrorCode Shader::InitFromFiles(const ShaderFilePaths& files) { DEFER { glDeleteShader(tessEval); }; if (files.tessEval) { std::string src; - CATCH_ERROR(ProjectBrussel_UNITY_ID::LoadFile(src, files.tessEval)); - CATCH_ERROR(ProjectBrussel_UNITY_ID::CreateShader(tessEval, src, GL_TESS_EVALUATION_SHADER)); + CATCH_ERROR(LoadFile(src, files.tessEval)); + CATCH_ERROR(CreateShader(tessEval, src, GL_TESS_EVALUATION_SHADER)); glAttachShader(program, tessEval); } @@ -181,12 +185,12 @@ Shader::ErrorCode Shader::InitFromFiles(const ShaderFilePaths& files) { DEFER { glDeleteShader(fragment); }; if (files.fragment) { std::string src; - CATCH_ERROR(ProjectBrussel_UNITY_ID::LoadFile(src, files.fragment)); - CATCH_ERROR(ProjectBrussel_UNITY_ID::CreateShader(fragment, src, GL_FRAGMENT_SHADER)); + CATCH_ERROR(LoadFile(src, files.fragment)); + CATCH_ERROR(CreateShader(fragment, src, GL_FRAGMENT_SHADER)); glAttachShader(program, fragment); } - CATCH_ERROR(ProjectBrussel_UNITY_ID::LinkShaderProgram(program)); + CATCH_ERROR(LinkShaderProgram(program)); sg.Dismiss(); mHandle = program; @@ -195,6 +199,8 @@ Shader::ErrorCode Shader::InitFromFiles(const ShaderFilePaths& files) { } Shader::ErrorCode Shader::InitFromSource(std::string_view source) { + using namespace ProjectBrussel_UNITY_ID; + GLuint vertex = 0; DEFER { glDeleteShader(vertex); }; @@ -221,15 +227,15 @@ Shader::ErrorCode Shader::InitFromSource(std::string_view source) { } if (prevShaderVariant == "vertex" && !vertex) { - CATCH_ERROR(ProjectBrussel_UNITY_ID::CreateShader(vertex, source.data(), prevBegin, prevEnd, GL_VERTEX_SHADER)); + CATCH_ERROR(CreateShader(vertex, source.data(), prevBegin, prevEnd, GL_VERTEX_SHADER)); } else if (prevShaderVariant == "geometry" && !geometry) { - CATCH_ERROR(ProjectBrussel_UNITY_ID::CreateShader(geometry, source.data(), prevBegin, prevEnd, GL_GEOMETRY_SHADER)); + CATCH_ERROR(CreateShader(geometry, source.data(), prevBegin, prevEnd, GL_GEOMETRY_SHADER)); } else if (prevShaderVariant == "tessellation_control" && !tessControl) { - CATCH_ERROR(ProjectBrussel_UNITY_ID::CreateShader(tessControl, source.data(), prevBegin, prevEnd, GL_TESS_CONTROL_SHADER)); + CATCH_ERROR(CreateShader(tessControl, source.data(), prevBegin, prevEnd, GL_TESS_CONTROL_SHADER)); } else if (prevShaderVariant == "tessellation_evaluation" && !tessEval) { - CATCH_ERROR(ProjectBrussel_UNITY_ID::CreateShader(tessEval, source.data(), prevBegin, prevEnd, GL_TESS_EVALUATION_SHADER)); + CATCH_ERROR(CreateShader(tessEval, source.data(), prevBegin, prevEnd, GL_TESS_EVALUATION_SHADER)); } else if (prevShaderVariant == "fragment" && !fragment) { - CATCH_ERROR(ProjectBrussel_UNITY_ID::CreateShader(fragment, source.data(), prevBegin, prevEnd, GL_FRAGMENT_SHADER)); + CATCH_ERROR(CreateShader(fragment, source.data(), prevBegin, prevEnd, GL_FRAGMENT_SHADER)); } else { return InvalidShaderVariant; } @@ -301,7 +307,7 @@ Shader::ErrorCode Shader::InitFromSource(std::string_view source) { if (tessEval) glAttachShader(program, tessEval); if (fragment) glAttachShader(program, fragment); - CATCH_ERROR(ProjectBrussel_UNITY_ID::LinkShaderProgram(program)); + CATCH_ERROR(LinkShaderProgram(program)); sg.Dismiss(); mHandle = program; |