diff options
author | wm4 <wm4@nowhere> | 2015-01-29 17:19:01 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2015-01-29 17:19:01 +0100 |
commit | 20c5c7e521d194c9be0fc3ee3ebdc0495afee9be (patch) | |
tree | f954963892ad05a8d45007dc577a851bafbcb835 /video/out/gl_utils.c | |
parent | 0bd147bd14e077389535234599b1c2b3b42cbf1c (diff) | |
download | mpv-20c5c7e521d194c9be0fc3ee3ebdc0495afee9be.tar.bz2 mpv-20c5c7e521d194c9be0fc3ee3ebdc0495afee9be.tar.xz |
vo_opengl: split out a helper for drawing primitives
Useful if we want to reduce the size of gl_video.c further.
To some degree this emulates traditional glDrawArrays() usage. It also
leaves a loophole for avoiding a reupload every time by leaving
ptr==NULL, although this is unused for now.
Diffstat (limited to 'video/out/gl_utils.c')
-rw-r--r-- | video/out/gl_utils.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/video/out/gl_utils.c b/video/out/gl_utils.c index 10708451b9..cf3a24cc48 100644 --- a/video/out/gl_utils.c +++ b/video/out/gl_utils.c @@ -298,6 +298,27 @@ void gl_vao_bind_attribs(struct gl_vao *vao, GLuint program) gl->BindAttribLocation(program, n, vao->entries[n].name); } +// Draw the vertex data (as described by the gl_vao_entry entries) in ptr +// to the screen. num is the number of vertexes. prim is usually GL_TRIANGLES. +// If ptr is NULL, then skip the upload, and use the data uploaded with the +// previous call. +void gl_vao_draw_data(struct gl_vao *vao, GLenum prim, void *ptr, size_t num) +{ + GL *gl = vao->gl; + + if (ptr) { + gl->BindBuffer(GL_ARRAY_BUFFER, vao->buffer); + gl->BufferData(GL_ARRAY_BUFFER, num * vao->stride, ptr, GL_DYNAMIC_DRAW); + gl->BindBuffer(GL_ARRAY_BUFFER, 0); + } + + gl_vao_bind(vao); + + gl->DrawArrays(prim, 0, num); + + gl_vao_unbind(vao); +} + // Create a texture and a FBO using the texture as color attachments. // gl_target: GL_TEXTURE_2D // gl_filter: GL_LINEAR |