Renderer: Replace shaders files by runtime-generated GLSL
This commit is contained in:
parent
8fd152aec0
commit
bd8a3ba47d
|
|
@ -112,6 +112,7 @@ namespace Nz
|
||||||
private:
|
private:
|
||||||
static void EnableInstancing(bool instancing);
|
static void EnableInstancing(bool instancing);
|
||||||
static bool EnsureStateUpdate();
|
static bool EnsureStateUpdate();
|
||||||
|
static bool GenerateDebugShader();
|
||||||
static void OnContextRelease(const Context* context);
|
static void OnContextRelease(const Context* context);
|
||||||
static void OnIndexBufferRelease(const IndexBuffer* indexBuffer);
|
static void OnIndexBufferRelease(const IndexBuffer* indexBuffer);
|
||||||
static void OnShaderReleased(const Shader* shader);
|
static void OnShaderReleased(const Shader* shader);
|
||||||
|
|
|
||||||
|
|
@ -13,11 +13,13 @@
|
||||||
#include <Nazara/Renderer/Config.hpp>
|
#include <Nazara/Renderer/Config.hpp>
|
||||||
#include <Nazara/Renderer/Context.hpp>
|
#include <Nazara/Renderer/Context.hpp>
|
||||||
#include <Nazara/Renderer/DebugDrawer.hpp>
|
#include <Nazara/Renderer/DebugDrawer.hpp>
|
||||||
|
#include <Nazara/Renderer/GlslWriter.hpp>
|
||||||
#include <Nazara/Renderer/HardwareBuffer.hpp>
|
#include <Nazara/Renderer/HardwareBuffer.hpp>
|
||||||
#include <Nazara/Renderer/OpenGL.hpp>
|
#include <Nazara/Renderer/OpenGL.hpp>
|
||||||
#include <Nazara/Renderer/RenderBuffer.hpp>
|
#include <Nazara/Renderer/RenderBuffer.hpp>
|
||||||
#include <Nazara/Renderer/RenderTarget.hpp>
|
#include <Nazara/Renderer/RenderTarget.hpp>
|
||||||
#include <Nazara/Renderer/Shader.hpp>
|
#include <Nazara/Renderer/Shader.hpp>
|
||||||
|
#include <Nazara/Renderer/ShaderBuilder.hpp>
|
||||||
#include <Nazara/Renderer/Texture.hpp>
|
#include <Nazara/Renderer/Texture.hpp>
|
||||||
#include <Nazara/Renderer/UberShader.hpp>
|
#include <Nazara/Renderer/UberShader.hpp>
|
||||||
#include <Nazara/Utility/AbstractBuffer.hpp>
|
#include <Nazara/Utility/AbstractBuffer.hpp>
|
||||||
|
|
@ -41,14 +43,6 @@ namespace Nz
|
||||||
{
|
{
|
||||||
namespace
|
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
|
enum ObjectType
|
||||||
{
|
{
|
||||||
ObjectType_Context,
|
ObjectType_Context,
|
||||||
|
|
@ -720,34 +714,12 @@ namespace Nz
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Création du shader de Debug
|
if (!GenerateDebugShader())
|
||||||
ShaderRef debugShader = Shader::New();
|
|
||||||
if (!debugShader->Create())
|
|
||||||
{
|
{
|
||||||
NazaraError("Failed to create debug shader");
|
NazaraError("Failed to generate debug shader");
|
||||||
return false;
|
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();
|
onExit.Reset();
|
||||||
|
|
||||||
NazaraNotice("Initialized: Renderer module");
|
NazaraNotice("Initialized: Renderer module");
|
||||||
|
|
@ -1870,6 +1842,74 @@ namespace Nz
|
||||||
return true;
|
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)
|
void Renderer::OnContextRelease(const Context* context)
|
||||||
{
|
{
|
||||||
s_vaos.erase(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