#include
namespace td {
namespace shader {
// TODO: GLES Shaders
#ifdef __ANDROID__
static const char vertexSource[] =
R"(#version 300 es
precision mediump float;
layout(location = 0) in vec3 position;
layout(location = 1) in int color;
uniform mat4 viewMatrix;
uniform mat4 projectionMatrix;
flat out int pass_color;
void main(void){
pass_color = color;
gl_Position = projectionMatrix * viewMatrix * vec4(position, 1.0);
}
)";
static const char fragmentSource[] =
R"(#version 300 es
precision mediump float;
flat in int pass_color;
out vec4 out_color;
void main(void){
float r = float(pass_color >> 24 & 0xFF) / 255.0;
float g = float(pass_color >> 16 & 0xFF) / 255.0;
float b = float(pass_color >> 8 & 0xFF) / 255.0;
float a = float(pass_color & 0xFF) / 255.0;
out_color = vec4(r, g, b, a);
}
)";
#else
static const char vertexSource[] = R"(
#version 330
layout(location = 0) in vec3 position;
layout(location = 1) in int color;
uniform mat4 viewMatrix;
uniform mat4 projectionMatrix;
flat out int pass_color;
void main(void){
pass_color = color;
gl_Position = projectionMatrix * viewMatrix * vec4(position, 1.0);
}
)";
static const char fragmentSource[] = R"(
#version 330
flat in int pass_color;
out vec4 out_color;
void main(void){
float r = float(pass_color >> 24 & 0xFF) / 255.0;
float g = float(pass_color >> 16 & 0xFF) / 255.0;
float b = float(pass_color >> 8 & 0xFF) / 255.0;
float a = float(pass_color & 0xFF) / 255.0;
out_color = vec4(r, g, b, a);
}
)";
#endif
WorldShader::WorldShader() : CameraShaderProgram() {
ShaderProgram::LoadProgram(vertexSource, fragmentSource);
}
} // namespace shader
} // namespace td |