static INLINE void gl_glsl_set_attribs(glsl_shader_data_t *glsl, GLuint vbo, GLfloat **buffer, size_t *buffer_elems, const GLfloat *data, size_t elems, const struct glsl_attrib *attrs, size_t num_attrs) { size_t i; glBindBuffer(GL_ARRAY_BUFFER, vbo); if (elems != *buffer_elems || memcmp(data, *buffer, elems * sizeof(GLfloat))) gl_glsl_set_vbo(buffer, buffer_elems, data, elems); for (i = 0; i < num_attrs; i++) { if (glsl->attribs.index < ARRAY_SIZE(glsl->attribs.elems)) { GLint loc = attrs[i].loc; glEnableVertexAttribArray(loc); glVertexAttribPointer(loc, attrs[i].size, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)(uintptr_t)attrs[i].offset); glsl->attribs.elems[glsl->attribs.index++] = loc; } else RARCH_WARN("Attrib array buffer was overflown!\n"); } glBindBuffer(GL_ARRAY_BUFFER, 0); }
static void gl_glsl_set_attribs(GLuint vbo, GLfloat *buffer, size_t *buffer_elems, const GLfloat *data, size_t elems, const struct glsl_attrib *attrs, size_t num_attrs) { glBindBuffer(GL_ARRAY_BUFFER, vbo); gl_glsl_set_vbo(buffer, buffer_elems, data, elems); for (size_t i = 0; i < num_attrs; i++) { GLint loc = attrs[i].loc; glEnableVertexAttribArray(loc); gl_attribs[gl_attrib_index++] = loc; glVertexAttribPointer(loc, attrs[i].size, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)(uintptr_t)attrs[i].offset); } glBindBuffer(GL_ARRAY_BUFFER, 0); }