Renderer: Replace shaders files by runtime-generated GLSL

This commit is contained in:
Lynix 2017-01-06 16:21:38 +01:00
parent 8fd152aec0
commit bd8a3ba47d
6 changed files with 73 additions and 60 deletions

View File

@ -112,6 +112,7 @@ namespace Nz
private:
static void EnableInstancing(bool instancing);
static bool EnsureStateUpdate();
static bool GenerateDebugShader();
static void OnContextRelease(const Context* context);
static void OnIndexBufferRelease(const IndexBuffer* indexBuffer);
static void OnShaderReleased(const Shader* shader);

View File

@ -13,11 +13,13 @@
#include <Nazara/Renderer/Config.hpp>
#include <Nazara/Renderer/Context.hpp>
#include <Nazara/Renderer/DebugDrawer.hpp>
#include <Nazara/Renderer/GlslWriter.hpp>
#include <Nazara/Renderer/HardwareBuffer.hpp>
#include <Nazara/Renderer/OpenGL.hpp>
#include <Nazara/Renderer/RenderBuffer.hpp>
#include <Nazara/Renderer/RenderTarget.hpp>
#include <Nazara/Renderer/Shader.hpp>
#include <Nazara/Renderer/ShaderBuilder.hpp>
#include <Nazara/Renderer/Texture.hpp>
#include <Nazara/Renderer/UberShader.hpp>
#include <Nazara/Utility/AbstractBuffer.hpp>
@ -41,14 +43,6 @@ namespace Nz
{
namespace
{
const UInt8 r_coreFragmentShader[] = {
#include <Nazara/Renderer/Resources/Shaders/Debug/core.frag.h>
};
const UInt8 r_coreVertexShader[] = {
#include <Nazara/Renderer/Resources/Shaders/Debug/core.vert.h>
};
enum ObjectType
{
ObjectType_Context,
@ -720,34 +714,12 @@ namespace Nz
return false;
}
// Création du shader de Debug
ShaderRef debugShader = Shader::New();
if (!debugShader->Create())
if (!GenerateDebugShader())
{
NazaraError("Failed to create debug shader");
NazaraError("Failed to generate debug shader");
return false;
}
if (!debugShader->AttachStageFromSource(ShaderStageType_Fragment, reinterpret_cast<const char*>(r_coreFragmentShader), sizeof(r_coreFragmentShader)))
{
NazaraError("Failed to attach fragment stage");
return false;
}
if (!debugShader->AttachStageFromSource(ShaderStageType_Vertex, reinterpret_cast<const char*>(r_coreVertexShader), sizeof(r_coreVertexShader)))
{
NazaraError("Failed to attach vertex stage");
return false;
}
if (!debugShader->Link())
{
NazaraError("Failed to link shader");
return false;
}
ShaderLibrary::Register("DebugSimple", debugShader);
onExit.Reset();
NazaraNotice("Initialized: Renderer module");
@ -1870,6 +1842,74 @@ namespace Nz
return true;
}
bool Renderer::GenerateDebugShader()
{
Nz::GlslWriter writer;
writer.SetGlslVersion(140);
Nz::String fragmentShader;
Nz::String vertexShader;
try
{
using namespace ShaderBuilder;
using ShaderAst::BuiltinEntry;
using ShaderAst::ExpressionType;
// Fragment shader
{
auto rt0 = Output("RenderTarget0", ExpressionType::Float4);
auto color = Uniform("Color", ExpressionType::Float4);
fragmentShader = writer.Generate(ExprStatement(Assign(rt0, color)));
}
// Vertex shader
{
auto vertexPosition = Input("VertexPosition", ExpressionType::Float3);
auto wvpMatrix = Uniform("WorldViewProjMatrix", ExpressionType::Mat4x4);
auto builtinPos = Builtin(BuiltinEntry::VertexPosition);
vertexShader = writer.Generate(ExprStatement(Assign(builtinPos, Multiply(wvpMatrix, Cast<ExpressionType::Float4>(vertexPosition, Constant(1.f))))));
}
}
catch (const std::exception& e)
{
NazaraError("Failed to generate shader code: " + String(e.what()));
return false;
}
ShaderRef debugShader = Shader::New();
if (!debugShader->Create())
{
NazaraError("Failed to create debug shader");
return false;
}
if (!debugShader->AttachStageFromSource(ShaderStageType_Fragment, fragmentShader))
{
NazaraError("Failed to attach fragment stage");
return false;
}
if (!debugShader->AttachStageFromSource(ShaderStageType_Vertex, vertexShader))
{
NazaraError("Failed to attach vertex stage");
return false;
}
if (!debugShader->Link())
{
NazaraError("Failed to link shader");
return false;
}
ShaderLibrary::Register("DebugSimple", debugShader);
return true;
}
void Renderer::OnContextRelease(const Context* context)
{
s_vaos.erase(context);

View File

@ -1,13 +0,0 @@
#version 140
/********************Sortant********************/
out vec4 RenderTarget0;
/********************Uniformes********************/
uniform vec4 Color;
/********************Fonctions********************/
void main()
{
RenderTarget0 = Color;
}

View File

@ -1 +0,0 @@
35,118,101,114,115,105,111,110,32,49,52,48,13,10,13,10,47,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,83,111,114,116,97,110,116,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,47,13,10,111,117,116,32,118,101,99,52,32,82,101,110,100,101,114,84,97,114,103,101,116,48,59,13,10,13,10,47,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,85,110,105,102,111,114,109,101,115,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,47,13,10,117,110,105,102,111,114,109,32,118,101,99,52,32,67,111,108,111,114,59,13,10,13,10,47,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,70,111,110,99,116,105,111,110,115,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,47,13,10,118,111,105,100,32,109,97,105,110,40,41,13,10,123,13,10,9,82,101,110,100,101,114,84,97,114,103,101,116,48,32,61,32,67,111,108,111,114,59,13,10,125,

View File

@ -1,13 +0,0 @@
#version 140
/********************Entrant********************/
in vec3 VertexPosition;
/********************Uniformes********************/
uniform mat4 WorldViewProjMatrix;
/********************Fonctions********************/
void main()
{
gl_Position = WorldViewProjMatrix * vec4(VertexPosition, 1.0);
}

View File

@ -1 +0,0 @@
35,118,101,114,115,105,111,110,32,49,52,48,13,10,13,10,47,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,69,110,116,114,97,110,116,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,47,13,10,105,110,32,118,101,99,51,32,86,101,114,116,101,120,80,111,115,105,116,105,111,110,59,13,10,13,10,47,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,85,110,105,102,111,114,109,101,115,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,47,13,10,117,110,105,102,111,114,109,32,109,97,116,52,32,87,111,114,108,100,86,105,101,119,80,114,111,106,77,97,116,114,105,120,59,13,10,13,10,47,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,70,111,110,99,116,105,111,110,115,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,47,13,10,118,111,105,100,32,109,97,105,110,40,41,13,10,123,13,10,9,103,108,95,80,111,115,105,116,105,111,110,32,61,32,87,111,114,108,100,86,105,101,119,80,114,111,106,77,97,116,114,105,120,32,42,32,118,101,99,52,40,86,101,114,116,101,120,80,111,115,105,116,105,111,110,44,32,49,46,48,41,59,13,10,125,13,10,