static void _del_gl(Evas_Object *obj) { GLData *gld = evas_object_data_get(obj, "gld"); if (!gld) { printf("Unable to get GLData. \n"); return; } Evas_GL_API *gl = gld->glapi; gl->glDeleteShader(gld->vtx_shader); gl->glDeleteShader(gld->fgmt_shader); gl->glDeleteProgram(gld->program); gl->glDeleteBuffers(1, &gld->gear1->vbo); gl->glDeleteBuffers(1, &gld->gear2->vbo); gl->glDeleteBuffers(1, &gld->gear3->vbo); free_gear(gld->gear1); free_gear(gld->gear2); free_gear(gld->gear3); evas_object_data_del((Evas_Object*)obj, "..gld"); free(gld); }
//--------------------------------// static GLuint load_shader( GLData *gld, GLenum type, const char *shader_src ) { Evas_GL_API *gl = gld->glapi; GLuint shader; GLint compiled; // Create the shader object shader = gl->glCreateShader(type); if (shader==0) return 0; // Load/Compile shader source gl->glShaderSource(shader, 1, &shader_src, NULL); gl->glCompileShader(shader); gl->glGetShaderiv(shader, GL_COMPILE_STATUS, &compiled); if (!compiled) { GLint info_len = 0; gl->glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &info_len); if (info_len > 1) { char* info_log = malloc(sizeof(char) * info_len); gl->glGetShaderInfoLog(shader, info_len, NULL, info_log); printf("Error compiling shader:\n%s\n======\n%s\n======\n", info_log, shader_src ); free(info_log); } gl->glDeleteShader(shader); return 0; } return shader; }