RID render_shader_create(struct render *R, struct shader_init_args *args) { struct shader * s = (struct shader *)array_alloc(&R->shader); if (s == NULL) { return 0; } s->glid = glCreateProgram(); if (!compile_link(R, s, args->vs, args->fs)) { glDeleteProgram(s->glid); array_free(&R->shader, s); return 0; } s->texture_n = args->texture; int i; for (i=0;i<s->texture_n;i++) { s->texture_uniform[i] = glGetUniformLocation(s->glid, args->texture_uniform[i]); } #ifdef VAO_ENABLE glGenVertexArrays(1, &s->glvao); for (i=0;i<MAX_VB_SLOT;i++) { s->vbslot[i] = 0; } s->ib = 0; #endif CHECK_GL_ERROR return array_id(&R->shader, s); }
RID render_shader_create(struct render *R, struct shader_init_args *args) { struct shader * s = (struct shader *)array_alloc(&R->shader); if (s == NULL) { return 0; } s->glid = glCreateProgram(); if (!compile_link(R, s, args->vs, args->fs)) { glDeleteProgram(s->glid); array_free(&R->shader, s); return 0; } s->texture_n = args->texture; int i; for (i=0;i<s->texture_n;i++) { s->texture_uniform[i] = glGetUniformLocation(s->glid, args->texture_uniform[i]); } CHECK_GL_ERROR return array_id(&R->shader, s); }