Renderer: Replace shaders files by runtime-generated GLSL
This commit is contained in:
parent
8fd152aec0
commit
bd8a3ba47d
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -1,13 +0,0 @@
|
|||
#version 140
|
||||
|
||||
/********************Sortant********************/
|
||||
out vec4 RenderTarget0;
|
||||
|
||||
/********************Uniformes********************/
|
||||
uniform vec4 Color;
|
||||
|
||||
/********************Fonctions********************/
|
||||
void main()
|
||||
{
|
||||
RenderTarget0 = Color;
|
||||
}
|
||||
|
|
@ -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,
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
#version 140
|
||||
|
||||
/********************Entrant********************/
|
||||
in vec3 VertexPosition;
|
||||
|
||||
/********************Uniformes********************/
|
||||
uniform mat4 WorldViewProjMatrix;
|
||||
|
||||
/********************Fonctions********************/
|
||||
void main()
|
||||
{
|
||||
gl_Position = WorldViewProjMatrix * vec4(VertexPosition, 1.0);
|
||||
}
|
||||
|
|
@ -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,
|
||||
Loading…
Reference in New Issue