static int gear_load_shaders(gear_t* self) { assert(self); LOGD("debug"); // face shaders self->face_program = a3d_shader_make_source(FACE_VSHADER, FACE_FSHADER); if(self->face_program == 0) return 0; self->face_attribute_vertex = glGetAttribLocation(self->face_program, "vertex"); self->face_uniform_color = glGetUniformLocation(self->face_program, "color"); self->face_uniform_mvp = glGetUniformLocation(self->face_program, "mvp"); // outward teeth shaders self->outward_program = a3d_shader_make_source(OUTWARD_VSHADER, OUTWARD_FSHADER); if(self->outward_program == 0) goto fail_outward_program; self->outward_attribute_vertex = glGetAttribLocation(self->outward_program, "vertex"); self->outward_attribute_normal = glGetAttribLocation(self->outward_program, "normal"); self->outward_uniform_color = glGetUniformLocation(self->outward_program, "color"); self->outward_uniform_nm = glGetUniformLocation(self->outward_program, "nm"); self->outward_uniform_mvp = glGetUniformLocation(self->outward_program, "mvp"); // cylinder shaders self->cylinder_program = a3d_shader_make_source(CYLINDER_VSHADER, CYLINDER_FSHADER); if(self->cylinder_program == 0) goto fail_cylinder_program; self->cylinder_attribute_vertex = glGetAttribLocation(self->cylinder_program, "vertex"); self->cylinder_attribute_normal = glGetAttribLocation(self->cylinder_program, "normal"); self->cylinder_uniform_color = glGetUniformLocation(self->cylinder_program, "color"); self->cylinder_uniform_nm = glGetUniformLocation(self->cylinder_program, "nm"); self->cylinder_uniform_mvp = glGetUniformLocation(self->cylinder_program, "mvp"); GLenum e = A3D_GL_GETERROR(); if(e != GL_NO_ERROR) goto fail_error; // success return 1; // failure fail_error: glDeleteProgram(self->cylinder_program); fail_cylinder_program: glDeleteProgram(self->outward_program); fail_outward_program: glDeleteProgram(self->face_program); return 0; }
static int a3d_widget_shaders(a3d_widget_t* self) { assert(self); LOGD("debug"); self->prog = a3d_shader_make_source(VSHADER, FSHADER); if(self->prog == 0) { return 0; } self->prog2 = a3d_shader_make_source(VSHADER2, FSHADER2); if(self->prog2 == 0) { goto fail_prog2; } self->scroll_prog = a3d_shader_make_source(VSHADER_SCROLL, FSHADER_SCROLL); if(self->scroll_prog == 0) { goto fail_scroll_prog; } self->attr_vertex = glGetAttribLocation(self->prog, "vertex"); self->unif_mvp = glGetUniformLocation(self->prog, "mvp"); self->unif_color = glGetUniformLocation(self->prog, "color"); self->attr_vertex2 = glGetAttribLocation(self->prog2, "vertex"); self->unif_mvp2 = glGetUniformLocation(self->prog2, "mvp"); self->unif_color2a = glGetUniformLocation(self->prog2, "colora"); self->unif_color2b = glGetUniformLocation(self->prog2, "colorb"); self->unif_y2 = glGetUniformLocation(self->prog2, "y"); self->scroll_attr_vertex = glGetAttribLocation(self->scroll_prog, "xyuv"); self->scroll_unif_mvp = glGetUniformLocation(self->scroll_prog, "mvp"); self->scroll_unif_color0 = glGetUniformLocation(self->scroll_prog, "color0"); self->scroll_unif_color1 = glGetUniformLocation(self->scroll_prog, "color1"); self->scroll_unif_a = glGetUniformLocation(self->scroll_prog, "a"); self->scroll_unif_b = glGetUniformLocation(self->scroll_prog, "b"); // success return 1; // failure fail_scroll_prog: glDeleteProgram(self->prog2); fail_prog2: glDeleteProgram(self->prog); return 0; }
a3d_spriteShader_t* a3d_spriteShader_new(void) { LOGD("debug"); a3d_spriteShader_t* self = (a3d_spriteShader_t*) malloc(sizeof(a3d_spriteShader_t)); if(self == NULL) { LOGE("malloc failed"); return 0; } self->prog = a3d_shader_make_source(VSHADER, FSHADER); if(self->prog == 0) { goto fail_prog; } self->attr_vertex = glGetAttribLocation(self->prog, "vertex"); self->attr_coords = glGetAttribLocation(self->prog, "coords"); self->unif_color = glGetUniformLocation(self->prog, "color"); self->unif_mvp = glGetUniformLocation(self->prog, "mvp"); self->unif_sampler = glGetUniformLocation(self->prog, "sampler"); // success return self; // failure fail_prog: free(self); return NULL; }