/src/RShader.cpp
#include <GLES2/gl2.h>
#include "RShader.h"
RShader::RShader() {
vertexShader = compileShader(
"uniform mat4 Projection;\n"
"uniform mat4 Transform;\n"
"attribute vec2 Position;\n"
"void main() {\n"
" gl_Position = Projection * Transform * vec4(Position, 0.0, 1.0);\n"
"}",
GL_VERTEX_SHADER
);
fragmentShader = compileShader(
"uniform mediump vec4 Color;\n"
"uniform mediump vec4 FadeColor;\n"
"uniform mediump float Fade;\n"
"void main() {\n"
" gl_FragColor = (1.0 - Fade) * Color + Fade * FadeColor;\n"
"}",
GL_FRAGMENT_SHADER
);
linkProgram();
glUseProgram(shaderProgram);
basicInit();
uColor = glGetUniformLocation(shaderProgram, "Color");
uFadeColor = glGetUniformLocation(shaderProgram, "FadeColor");
uFade = glGetUniformLocation(shaderProgram, "Fade");
static Color defaultColor = {0.5, 0.5, 0.5, 1.0};
setColor(&defaultColor);
setFade(0.0);
}
RShader::~RShader() {
}
void RShader::setColor(Color* c) {
this->setColor(c->r, c->g, c->b, c->a);
}
void RShader::setColor(float r, float g, float b, float a) {
glUniform4f(uColor, r, g, b, a);
}
void RShader::setFadeColor(Color* c) {
this->setFadeColor(c->r, c->g, c->b, c->a);
}
void RShader::setFadeColor(float r, float g, float b, float a) {
glUniform4f(uFadeColor, r, g, b, a);
}
void RShader::setFade(GLfloat fade) {
glUniform1f(uFade, fade);
}