void device_load_vertexshader(device_t device, shader_t vertshader) { GLuint program = 0; vertbuffer_t cur_vb = device->cur_vertex_buffer; if (device->cur_vertex_shader == vertshader) return; if (vertshader && vertshader->type != SHADER_VERTEX) { blog(LOG_ERROR, "Specified shader is not a vertex shader"); goto fail; } /* unload and reload the vertex buffer to sync the buffers up with * the specific shader */ if (cur_vb && !vertexbuffer_load(device, NULL)) goto fail; device->cur_vertex_shader = vertshader; if (vertshader) program = vertshader->program; glUseProgramStages(device->pipeline, GL_VERTEX_SHADER_BIT, program); if (!gl_success("glUseProgramStages")) goto fail; if (cur_vb && !vertexbuffer_load(device, cur_vb)) goto fail; return; fail: blog(LOG_ERROR, "device_load_vertexshader (GL) failed"); }
void device_load_vertexbuffer(device_t device, vertbuffer_t vb) { if (!vertexbuffer_load(device, vb)) blog(LOG_ERROR, "device_load_vertexbuffer (GL) failed"); }