From 4f671873c1019f137aeed6f7d41b2dd29f0ef6a4 Mon Sep 17 00:00:00 2001 From: Lynix Date: Thu, 18 Jun 2020 20:05:22 +0200 Subject: [PATCH] Renderer: Add NazaraBinary shader "language" and handle it in OpenGLRenderer --- examples/VulkanTest/main.cpp | 4 +-- examples/bin/shader.shader | Bin 0 -> 510 bytes include/Nazara/Renderer/Enums.hpp | 1 + .../OpenGLRenderer/OpenGLShaderStage.cpp | 32 ++++++++++++++++++ 4 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 examples/bin/shader.shader diff --git a/examples/VulkanTest/main.cpp b/examples/VulkanTest/main.cpp index bfda1e2b2..e42aa41ac 100644 --- a/examples/VulkanTest/main.cpp +++ b/examples/VulkanTest/main.cpp @@ -3,7 +3,7 @@ #include #include -#define SPIRV 1 +#define SPIRV 0 int main() { @@ -44,7 +44,7 @@ int main() return __LINE__; } #else - auto fragmentShader = device->InstantiateShaderStage(Nz::ShaderStageType::Fragment, Nz::ShaderLanguage::GLSL, "resources/shaders/triangle.frag"); + auto fragmentShader = device->InstantiateShaderStage(Nz::ShaderStageType::Fragment, Nz::ShaderLanguage::NazaraBinary, "shader.shader"); if (!fragmentShader) { std::cout << "Failed to instantiate fragment shader" << std::endl; diff --git a/examples/bin/shader.shader b/examples/bin/shader.shader new file mode 100644 index 0000000000000000000000000000000000000000..7828e1b47f93c3a2edd5b8979ee976e5aac39742 GIT binary patch literal 510 zcmah_%L>9U5KJGo)%J6|_n;I{J@~o@ZEK)yptj)AKl7)&itdCgXcb%-Cd^J|lg&4) zwGhG~xP(Zxx$YWS)7gWF@>RRr6T1)?i5~i_lhs1kx`T<`;BZ@9`k^c681MzK-$>P> zPe3IEpAZnt_*zw`eyI@X*&bNj=8trp8P$ literal 0 HcmV?d00001 diff --git a/include/Nazara/Renderer/Enums.hpp b/include/Nazara/Renderer/Enums.hpp index a9b33ba5f..05daee7a5 100644 --- a/include/Nazara/Renderer/Enums.hpp +++ b/include/Nazara/Renderer/Enums.hpp @@ -49,6 +49,7 @@ namespace Nz GLSL, HLSL, MSL, + NazaraBinary, SpirV }; diff --git a/src/Nazara/OpenGLRenderer/OpenGLShaderStage.cpp b/src/Nazara/OpenGLRenderer/OpenGLShaderStage.cpp index 3364e4f11..561a1d196 100644 --- a/src/Nazara/OpenGLRenderer/OpenGLShaderStage.cpp +++ b/src/Nazara/OpenGLRenderer/OpenGLShaderStage.cpp @@ -4,7 +4,11 @@ #include #include +#include #include +#include +#include +#include #include #include @@ -22,6 +26,34 @@ namespace Nz m_shader.Compile(); break; + case ShaderLanguage::NazaraBinary: + { + ByteStream byteStream(source, sourceSize); + auto shader = Nz::UnserializeShader(byteStream); + + const auto& context = device.GetReferenceContext(); + const auto& contextParams = context.GetParams(); + + GlslWriter::Environment env; + env.glES = false; + //env.glES = (contextParams.type == GL::ContextType::OpenGL_ES); + env.glMajorVersion = contextParams.glMajorVersion; + env.glMinorVersion = contextParams.glMinorVersion; + env.extCallback = [&](const std::string_view& ext) + { + return context.IsExtensionSupported(std::string(ext)); + }; + + GlslWriter writer; + writer.SetEnv(env); + + std::string code = writer.Generate(shader); + + m_shader.SetSource(code.data(), code.size()); + m_shader.Compile(); + break; + } + case ShaderLanguage::SpirV: { if (!device.GetReferenceContext().IsExtensionSupported(GL::Extension::SpirV))