48 lines
1.2 KiB
C++
48 lines
1.2 KiB
C++
#include <llmr/shader/raster_shader.hpp>
|
|
#include <llmr/shader/shaders.hpp>
|
|
#include <llmr/platform/gl.hpp>
|
|
|
|
#include <cstdio>
|
|
|
|
using namespace llmr;
|
|
|
|
RasterShader::RasterShader()
|
|
: Shader(
|
|
shaders[RASTER_SHADER].vertex,
|
|
shaders[RASTER_SHADER].fragment
|
|
) {
|
|
if (!valid) {
|
|
fprintf(stderr, "invalid raster shader\n");
|
|
return;
|
|
}
|
|
|
|
a_pos = glGetAttribLocation(program, "a_pos");
|
|
|
|
u_matrix = glGetUniformLocation(program, "u_matrix");
|
|
u_opacity = glGetUniformLocation(program, "u_opacity");
|
|
|
|
// fprintf(stderr, "RasterShader:\n");
|
|
// fprintf(stderr, " - u_matrix: %d\n", u_matrix);
|
|
// fprintf(stderr, " - u_image: %d\n", u_image);
|
|
// fprintf(stderr, " - u_opacity: %f\n", u_opacity);
|
|
}
|
|
|
|
void RasterShader::bind(char *offset) {
|
|
glEnableVertexAttribArray(a_pos);
|
|
glVertexAttribPointer(a_pos, 2, GL_SHORT, false, 0, offset);
|
|
}
|
|
|
|
void RasterShader::setImage(int32_t new_image) {
|
|
if (image != new_image) {
|
|
glUniform1i(u_image, new_image);
|
|
image = new_image;
|
|
}
|
|
}
|
|
|
|
void RasterShader::setOpacity(float new_opacity) {
|
|
if (opacity != new_opacity) {
|
|
glUniform1f(u_opacity, new_opacity);
|
|
opacity = new_opacity;
|
|
}
|
|
}
|