diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/libjin/graphics/shaders/je_base.shader.h | 77 | ||||
-rw-r--r-- | src/libjin/graphics/shaders/je_jsl_compiler.cpp | 68 | ||||
-rw-r--r-- | src/libjin/graphics/shaders/je_jsl_compiler.h | 12 | ||||
-rw-r--r-- | src/libjin/graphics/shaders/je_shader.h | 2 |
4 files changed, 80 insertions, 79 deletions
diff --git a/src/libjin/graphics/shaders/je_base.shader.h b/src/libjin/graphics/shaders/je_base.shader.h deleted file mode 100644 index 9fed6a1..0000000 --- a/src/libjin/graphics/shaders/je_base.shader.h +++ /dev/null @@ -1,77 +0,0 @@ -#ifndef __JE_BASE_SHADER_H__ -#define __JE_BASE_SHADER_H__ - -#include "../../common/je_string.h" - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -static const JinEngine::String SHADER_PROJECTION_MATRIX = "jin_ProjectionMatrix"; -static const JinEngine::String SHADER_MODELVIEW_MATRIX = "jin_ModelViewMatrix"; -static const JinEngine::String SHADER_MAIN_TEXTURE = "jin_MainTexture"; -static const JinEngine::String SHADER_VERTEX_COORDS = "jin_VertexCoords"; -static const JinEngine::String SHADER_TEXTURE_COORDS = "jin_TextureCoords"; -static const JinEngine::String SHADER_VERSION = "#version 130 core \n"; -static const JinEngine::String SHADER_COMMON = R"( -#define Number float -#define Texture sampler2D -#define Canvas sampler2D -#define Color vec4 -#define Vec2 vec2 -#define Vec3 vec3 -#define Vec4 vec4 - -#define texel texture2D - -struct Vertex -{ - vec2 xy; - vec2 uv; -}; -)"; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -static JinEngine::String formatVertexShader(const JinEngine::String& vert) -{ - static JinEngine::String vert_part1 = - SHADER_VERSION + - SHADER_COMMON + - "uniform mat4 " + SHADER_PROJECTION_MATRIX + ";\n" - "uniform mat4 " + SHADER_MODELVIEW_MATRIX + ";\n" - "in vec2 " + SHADER_VERTEX_COORDS + ";\n" - "in vec2 " + SHADER_TEXTURE_COORDS + ";\n" - "out vec4 jin_Color; \n" - "out vec2 jin_XY; \n" - "out vec2 jin_UV; \n"; - static JinEngine::String vert_part2 = - "void main()\n" - "{\n" - " vec4 v = " + SHADER_MODELVIEW_MATRIX + " * vec4(" + SHADER_VERTEX_COORDS + ", 0, 1.0);\n" - " Vertex _v = vert(Vertex(v.xy, " + SHADER_TEXTURE_COORDS + "));\n" - " gl_Position = " + SHADER_PROJECTION_MATRIX + " * vec4(_v.xy, 0, 1.0f);\n" - " jin_Color = gl_Color; \n" - " jin_XY = _v.xy; \n" - " jin_UV = _v.uv; \n" - "}"; - return vert_part1 + vert + vert_part2; -} - -static JinEngine::String formatFragmentShader(const JinEngine::String& frag) -{ - static JinEngine::String frag_part1 = - SHADER_VERSION + - SHADER_COMMON + - "uniform Texture " + SHADER_MAIN_TEXTURE + "; \n" - "in vec4 jin_Color; \n" - "in vec2 jin_XY; \n" - "in vec2 jin_UV; \n" - "out vec4 jin_OutColor; \n"; - static JinEngine::String frag_part2 = - "void main() \n" - "{\n" - " jin_OutColor = frag(jin_Color, " + SHADER_MAIN_TEXTURE + ", Vertex(jin_XY, jin_UV));\n" - "}\n"; - return frag_part1 + frag + frag_part2; -} - -#endif // __JE_BASE_SHADER_H__
\ No newline at end of file diff --git a/src/libjin/graphics/shaders/je_jsl_compiler.cpp b/src/libjin/graphics/shaders/je_jsl_compiler.cpp index 437cacd..3cd8299 100644 --- a/src/libjin/graphics/shaders/je_jsl_compiler.cpp +++ b/src/libjin/graphics/shaders/je_jsl_compiler.cpp @@ -1,6 +1,7 @@ #include "../../core/je_configuration.h" #if defined(jin_graphics) && (jin_graphics & jin_graphics_shader) +#include "../../common/je_string.h" #include "../../Filesystem/je_buffer.h" #include "je_jsl_compiler.h" @@ -15,7 +16,72 @@ namespace JinEngine namespace Shaders { - #include "je_base.shader.h" + JinEngine::String SHADER_PROJECTION_MATRIX = "jin_ProjectionMatrix"; + JinEngine::String SHADER_MODELVIEW_MATRIX = "jin_ModelViewMatrix"; + JinEngine::String SHADER_MAIN_TEXTURE = "jin_MainTexture"; + JinEngine::String SHADER_VERTEX_COORDS = "jin_VertexCoords"; + JinEngine::String SHADER_TEXTURE_COORDS = "jin_TextureCoords"; + JinEngine::String SHADER_VERSION = "#version 130 core \n"; + JinEngine::String SHADER_COMMON = R"( + #define Number float + #define Texture sampler2D + #define Canvas sampler2D + #define Color vec4 + #define Vec2 vec2 + #define Vec3 vec3 + #define Vec4 vec4 + + #define texel texture2D + + struct Vertex + { + vec2 xy; + vec2 uv; + }; + )"; + + JinEngine::String JSLCompiler::formatVertexShader(const JinEngine::String& vert) + { + static JinEngine::String vert_part1 = + SHADER_VERSION + + SHADER_COMMON + + "uniform mat4 " + SHADER_PROJECTION_MATRIX + ";\n" + "uniform mat4 " + SHADER_MODELVIEW_MATRIX + ";\n" + "in vec2 " + SHADER_VERTEX_COORDS + ";\n" + "in vec2 " + SHADER_TEXTURE_COORDS + ";\n" + "out vec4 jin_Color; \n" + "out vec2 jin_XY; \n" + "out vec2 jin_UV; \n"; + static JinEngine::String vert_part2 = + "void main()\n" + "{\n" + " vec4 v = " + SHADER_MODELVIEW_MATRIX + " * vec4(" + SHADER_VERTEX_COORDS + ", 0, 1.0);\n" + " Vertex _v = vert(Vertex(v.xy, " + SHADER_TEXTURE_COORDS + "));\n" + " gl_Position = " + SHADER_PROJECTION_MATRIX + " * vec4(_v.xy, 0, 1.0f);\n" + " jin_Color = gl_Color; \n" + " jin_XY = _v.xy; \n" + " jin_UV = _v.uv; \n" + "}"; + return vert_part1 + vert + vert_part2; + } + + JinEngine::String JSLCompiler::formatFragmentShader(const JinEngine::String& frag) + { + static JinEngine::String frag_part1 = + SHADER_VERSION + + SHADER_COMMON + + "uniform Texture " + SHADER_MAIN_TEXTURE + "; \n" + "in vec4 jin_Color; \n" + "in vec2 jin_XY; \n" + "in vec2 jin_UV; \n" + "out vec4 jin_OutColor; \n"; + static JinEngine::String frag_part2 = + "void main() \n" + "{\n" + " jin_OutColor = frag(jin_Color, " + SHADER_MAIN_TEXTURE + ", Vertex(jin_XY, jin_UV));\n" + "}\n"; + return frag_part1 + frag + frag_part2; + } bool JSLCompiler::compile(const string& jsl, string* vertex_shader, string* fragment_shader) { diff --git a/src/libjin/graphics/shaders/je_jsl_compiler.h b/src/libjin/graphics/shaders/je_jsl_compiler.h index 337d389..bca55bc 100644 --- a/src/libjin/graphics/shaders/je_jsl_compiler.h +++ b/src/libjin/graphics/shaders/je_jsl_compiler.h @@ -6,6 +6,7 @@ #include <string> +#include "../../common/je_string.h" #include "../../common/je_singleton.hpp" namespace JinEngine @@ -15,6 +16,14 @@ namespace JinEngine namespace Shaders { + extern JinEngine::String SHADER_PROJECTION_MATRIX; + extern JinEngine::String SHADER_MODELVIEW_MATRIX; + extern JinEngine::String SHADER_MAIN_TEXTURE; + extern JinEngine::String SHADER_VERTEX_COORDS; + extern JinEngine::String SHADER_TEXTURE_COORDS; + extern JinEngine::String SHADER_VERSION; + extern JinEngine::String SHADER_COMMON; + /// /// Compile JSL into GLSL. /// @@ -32,6 +41,9 @@ namespace JinEngine bool compile(const std::string& jsl, std::string* glsl_vertex, std::string* glsl_fragment); private: + JinEngine::String formatVertexShader(const JinEngine::String& vert); + + JinEngine::String formatFragmentShader(const JinEngine::String& frag); }; diff --git a/src/libjin/graphics/shaders/je_shader.h b/src/libjin/graphics/shaders/je_shader.h index 2ccc537..d17531f 100644 --- a/src/libjin/graphics/shaders/je_shader.h +++ b/src/libjin/graphics/shaders/je_shader.h @@ -13,7 +13,7 @@ #include "../je_texture.h" #include "../je_canvas.h" -#include "je_base.shader.h" +#include "je_jsl_compiler.h" namespace JinEngine { |