/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);
}