summaryrefslogtreecommitdiff
path: root/render/fx_renderer/shaders.c
diff options
context:
space:
mode:
Diffstat (limited to 'render/fx_renderer/shaders.c')
-rw-r--r--render/fx_renderer/shaders.c104
1 files changed, 104 insertions, 0 deletions
diff --git a/render/fx_renderer/shaders.c b/render/fx_renderer/shaders.c
index 2c2aa7e..21cd522 100644
--- a/render/fx_renderer/shaders.c
+++ b/render/fx_renderer/shaders.c
@@ -9,9 +9,12 @@
#include "GLES2/gl2.h"
#include "common_vert_src.h"
#include "quad_frag_src.h"
+#include "quad_grad_frag_src.h"
#include "quad_round_frag_src.h"
+#include "quad_grad_round_frag_src.h"
#include "tex_frag_src.h"
#include "rounded_border_corner_frag_src.h"
+#include "rounded_grad_border_corner_frag_src.h"
#include "box_shadow_frag_src.h"
#include "blur1_frag_src.h"
#include "blur2_frag_src.h"
@@ -26,6 +29,12 @@ GLuint compile_shader(GLuint type, const GLchar *src) {
glGetShaderiv(shader, GL_COMPILE_STATUS, &ok);
if (ok == GL_FALSE) {
wlr_log(WLR_ERROR, "Failed to compile shader");
+ GLint maxLength = 0;
+ glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &maxLength);
+
+ char a[maxLength];
+ glGetShaderInfoLog(shader, maxLength, &maxLength, a);
+ printf("%s\n", a);
glDeleteShader(shader);
shader = 0;
}
@@ -114,6 +123,33 @@ bool link_quad_program(struct quad_shader *shader) {
return true;
}
+bool link_quad_grad_program(struct quad_grad_shader *shader, int max_len) {
+ GLchar quad_src[2048];
+ snprintf(quad_src, sizeof(quad_src),
+ "#define LEN %d\n%s", max_len, quad_grad_frag_src);
+
+ GLuint prog;
+ shader->program = prog = link_program(quad_src);
+ if (!shader->program) {
+ return false;
+ }
+
+ shader->proj = glGetUniformLocation(prog, "proj");
+ shader->pos_attrib = glGetAttribLocation(prog, "pos");
+ shader->size = glGetUniformLocation(prog, "size");
+ shader->colors = glGetUniformLocation(prog, "colors");
+ shader->degree = glGetUniformLocation(prog, "degree");
+ shader->grad_box = glGetUniformLocation(prog, "grad_box");
+ shader->linear = glGetUniformLocation(prog, "linear");
+ shader->origin = glGetUniformLocation(prog, "origin");
+ shader->count = glGetUniformLocation(prog, "count");
+ shader->blend = glGetUniformLocation(prog, "blend");
+
+ shader->max_len = max_len;
+
+ return true;
+}
+
bool link_quad_round_program(struct quad_round_shader *shader, enum fx_rounded_quad_shader_source source) {
GLchar quad_src[2048];
snprintf(quad_src, sizeof(quad_src),
@@ -135,6 +171,38 @@ bool link_quad_round_program(struct quad_round_shader *shader, enum fx_rounded_q
return true;
}
+bool link_quad_grad_round_program(struct quad_grad_round_shader *shader, enum fx_rounded_quad_shader_source source, int max_len) {
+ GLchar quad_src[4096];
+ snprintf(quad_src, sizeof(quad_src),
+ "#define SOURCE %d\n#define LEN %d\n%s", source, max_len, quad_grad_round_frag_src);
+
+ GLuint prog;
+ shader->program = prog = link_program(quad_src);
+ if (!shader->program) {
+ return false;
+ }
+
+ shader->proj = glGetUniformLocation(prog, "proj");
+ shader->color = glGetUniformLocation(prog, "color");
+ shader->pos_attrib = glGetAttribLocation(prog, "pos");
+ shader->size = glGetUniformLocation(prog, "size");
+ shader->position = glGetUniformLocation(prog, "position");
+ shader->radius = glGetUniformLocation(prog, "radius");
+
+ shader->grad_size = glGetUniformLocation(prog, "grad_size");
+ shader->colors = glGetUniformLocation(prog, "colors");
+ shader->degree = glGetUniformLocation(prog, "degree");
+ shader->grad_box = glGetUniformLocation(prog, "grad_box");
+ shader->linear = glGetUniformLocation(prog, "linear");
+ shader->origin = glGetUniformLocation(prog, "origin");
+ shader->count = glGetUniformLocation(prog, "count");
+ shader->blend = glGetUniformLocation(prog, "blend");
+
+ shader->max_len = max_len;
+
+ return true;
+}
+
bool link_tex_program(struct tex_shader *shader,
enum fx_tex_shader_source source) {
GLchar frag_src[2048];
@@ -185,6 +253,42 @@ bool link_rounded_border_corner_program(struct rounded_border_corner_shader *sha
return true;
}
+bool link_rounded_grad_border_corner_program(struct rounded_grad_border_corner_shader *shader, int max_len) {
+ GLchar quad_src[4096];
+ snprintf(quad_src, sizeof(quad_src),
+ "#define LEN %d\n%s", max_len, rounded_grad_border_corner_frag_src);
+
+ GLuint prog;
+ shader->program = prog = link_program(quad_src);
+ if (!shader->program) {
+ return false;
+ }
+
+ shader->proj = glGetUniformLocation(prog, "proj");
+ shader->pos_attrib = glGetAttribLocation(prog, "pos");
+ shader->size = glGetUniformLocation(prog, "size");
+ shader->colors = glGetUniformLocation(prog, "colors");
+ shader->degree = glGetUniformLocation(prog, "degree");
+ shader->grad_box = glGetUniformLocation(prog, "grad_box");
+ shader->linear = glGetUniformLocation(prog, "linear");
+ shader->origin = glGetUniformLocation(prog, "origin");
+ shader->count = glGetUniformLocation(prog, "count");
+ shader->blend = glGetUniformLocation(prog, "blend");
+
+ shader->is_top_left = glGetUniformLocation(prog, "is_top_left");
+ shader->is_top_right = glGetUniformLocation(prog, "is_top_right");
+ shader->is_bottom_left = glGetUniformLocation(prog, "is_bottom_left");
+ shader->is_bottom_right = glGetUniformLocation(prog, "is_bottom_right");
+ shader->position = glGetUniformLocation(prog, "position");
+ shader->radius = glGetUniformLocation(prog, "radius");
+ shader->half_size = glGetUniformLocation(prog, "half_size");
+ shader->half_thickness = glGetUniformLocation(prog, "half_thickness");
+
+ shader->max_len = max_len;
+
+ return true;
+}
+
bool link_box_shadow_program(struct box_shadow_shader *shader) {
GLuint prog;
shader->program = prog = link_program(box_shadow_frag_src);