aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/graphics/shaders
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjin/graphics/shaders')
-rw-r--r--src/libjin/graphics/shaders/je_jsl_compiler.cpp10
-rw-r--r--src/libjin/graphics/shaders/je_jsl_compiler.h1
-rw-r--r--src/libjin/graphics/shaders/je_shader.cpp24
-rw-r--r--src/libjin/graphics/shaders/je_shader.h15
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; };