diff options
Diffstat (limited to 'src/libjin/graphics/shaders')
-rw-r--r-- | src/libjin/graphics/shaders/je_jsl_compiler.cpp | 10 | ||||
-rw-r--r-- | src/libjin/graphics/shaders/je_jsl_compiler.h | 1 | ||||
-rw-r--r-- | src/libjin/graphics/shaders/je_shader.cpp | 24 | ||||
-rw-r--r-- | src/libjin/graphics/shaders/je_shader.h | 15 |
4 files changed, 22 insertions, 28 deletions
diff --git a/src/libjin/graphics/shaders/je_jsl_compiler.cpp b/src/libjin/graphics/shaders/je_jsl_compiler.cpp index d081c51..8aacdd0 100644 --- a/src/libjin/graphics/shaders/je_jsl_compiler.cpp +++ b/src/libjin/graphics/shaders/je_jsl_compiler.cpp @@ -20,7 +20,8 @@ namespace JinEngine /// Built-in variables in vertex shader: /// jin_ProjectionMatrix --+ /// jin_ModelViewMatrix |- Uniforms - /// jin_MainTexture --+ + /// jin_MainTexture | + /// jin_Time --+ /// jin_VertexCoords --+ /// jin_TextureCoords |- Attributes /// jin_VertexColor --+ @@ -29,7 +30,8 @@ namespace JinEngine /// Built-in variables in fragment shader: /// jin_ProjectionMatrix --+ /// jin_ModelViewMatrix |- Uniforms - /// jin_MainTexture --+ + /// jin_MainTexture | + /// jin_Time --+ /// jin_Color --+ /// jin_XY |- Inputs /// jin_UV | @@ -42,6 +44,7 @@ namespace JinEngine JinEngine::String SHADER_VERTEX_COORDS = "jin_VertexCoords"; JinEngine::String SHADER_TEXTURE_COORDS = "jin_TextureCoords"; JinEngine::String SHADER_VERTEX_COLOR = "jin_VertexColor"; + JinEngine::String SHADER_TIME = "jin_Time"; JinEngine::String SHADER_VERSION = "#version 130 core \n"; JinEngine::String SHADER_DEFINITIONS = // Types @@ -65,7 +68,8 @@ namespace JinEngine JinEngine::String SHADER_UNIFORMS = "uniform Texture " + SHADER_MAIN_TEXTURE + "; \n" "uniform mat4 " + SHADER_PROJECTION_MATRIX + "; \n" - "uniform mat4 " + SHADER_MODELVIEW_MATRIX + "; \n"; + "uniform mat4 " + SHADER_MODELVIEW_MATRIX + "; \n" + "uniform vec2 " + SHADER_TIME + "; \n"; JinEngine::String JSLCompiler::formatVertexShader(const JinEngine::String& vert) { diff --git a/src/libjin/graphics/shaders/je_jsl_compiler.h b/src/libjin/graphics/shaders/je_jsl_compiler.h index c34f8ec..75c92cf 100644 --- a/src/libjin/graphics/shaders/je_jsl_compiler.h +++ b/src/libjin/graphics/shaders/je_jsl_compiler.h @@ -22,6 +22,7 @@ namespace JinEngine extern JinEngine::String SHADER_VERTEX_COORDS; extern JinEngine::String SHADER_TEXTURE_COORDS; extern JinEngine::String SHADER_VERTEX_COLOR; + extern JinEngine::String SHADER_TIME; /// /// Compile JSL into GLSL. diff --git a/src/libjin/graphics/shaders/je_shader.cpp b/src/libjin/graphics/shaders/je_shader.cpp index 0137978..5668168 100644 --- a/src/libjin/graphics/shaders/je_shader.cpp +++ b/src/libjin/graphics/shaders/je_shader.cpp @@ -3,6 +3,7 @@ #include <iostream> +#include "../../time/je_timer.h" #include "../../filesystem/je_buffer.h" #include "../../utils/je_macros.h" @@ -13,6 +14,7 @@ using namespace std; using namespace JinEngine::Filesystem; +using namespace JinEngine::Time; namespace JinEngine { @@ -71,9 +73,14 @@ namespace JinEngine glDeleteShader(mPID); } - void Shader::setDefaultUniform() + Shader& Shader::prepare() { + // Send uniforms. sendInt(SHADER_MAIN_TEXTURE, DEFAULT_TEXTURE_UNIT); + sendVec2(SHADER_TIME, Time::getSecond(), Time::getDeltaTime()); + // Reset attribute index. + mAttributeIndex = 0; + return *this; } bool Shader::compile(const string& program) @@ -86,7 +93,7 @@ namespace JinEngine return false; } - #define glsl(SHADER_MODE, SHADER, SRC) \ + #define glsl(SHADER_MODE, SHADER, SRC) \ do{ \ const GLchar* src = SRC.c_str(); \ glShaderSource(SHADER, 1, &src, NULL); \ @@ -103,6 +110,7 @@ namespace JinEngine // Compile fragment shader. GLuint fid = glCreateShader(GL_FRAGMENT_SHADER); glsl(GL_FRAGMENT_SHADER, fid, fragment_shader); + #undef glsl // Create OpenGL shader program. mPID = glCreateProgram(); @@ -269,18 +277,6 @@ namespace JinEngine return *this; } - Shader& Shader::beginUploadAttributes() - { - mAttributeIndex = 0; - return *this; - } - - Shader& Shader::endUploadAttributes() - { - mAttributeIndex = 0; - return *this; - } - Shader& Shader::uploadAttribute(const String& name, int n, GLenum type, GLsizei stride, const GLvoid * pointers, GLboolean normalized) { GLint loc = glGetAttribLocation(mPID, name); diff --git a/src/libjin/graphics/shaders/je_shader.h b/src/libjin/graphics/shaders/je_shader.h index 92e1c4c..a279a79 100644 --- a/src/libjin/graphics/shaders/je_shader.h +++ b/src/libjin/graphics/shaders/je_shader.h @@ -44,7 +44,10 @@ namespace JinEngine /// virtual ~Shader(); - void setDefaultUniform(); + /// + /// Prepare shader and set default uniforms. + /// + Shader& prepare(); /// /// Send float value to shader. @@ -155,16 +158,6 @@ namespace JinEngine Shader& uploadAttribute(const String& name, int n, GLenum type, GLsizei stride, const GLvoid * pointers, GLboolean normalized = GL_FALSE); /// - /// Reset attribute index. - /// - Shader& beginUploadAttributes(); - - /// - /// Reset attribute index. - /// - Shader& endUploadAttributes(); - - /// /// Program ID. /// inline GLuint getGLProgramID() { return mPID; }; |