From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54420) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Za19b-0004KS-CR for qemu-devel@nongnu.org; Thu, 10 Sep 2015 08:40:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Za19a-000431-Ag for qemu-devel@nongnu.org; Thu, 10 Sep 2015 08:40:39 -0400 Received: from mail-ob0-x22d.google.com ([2607:f8b0:4003:c01::22d]:35762) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Za19Z-00041w-UR for qemu-devel@nongnu.org; Thu, 10 Sep 2015 08:40:38 -0400 Received: by obuk4 with SMTP id k4so33334095obu.2 for ; Thu, 10 Sep 2015 05:40:37 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: <1441797654-15350-2-git-send-email-kraxel@redhat.com> References: <1441797654-15350-1-git-send-email-kraxel@redhat.com> <1441797654-15350-2-git-send-email-kraxel@redhat.com> Date: Thu, 10 Sep 2015 14:40:36 +0200 Message-ID: From: =?UTF-8?B?TWFyYy1BbmRyw6kgTHVyZWF1?= Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH 1/9] shaders: initialize vertexes once List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Gerd Hoffmann Cc: QEMU Hi On Wed, Sep 9, 2015 at 1:20 PM, Gerd Hoffmann wrote: > Create a buffer for the vertex data and place vertexes > there at initialization time. Then just use the buffer > for each texture blit. > > Signed-off-by: Gerd Hoffmann > --- > include/ui/shader.h | 4 +++- > ui/console-gl.c | 7 ++++++- > ui/shader.c | 32 +++++++++++++++++++++++++++----- > 3 files changed, 36 insertions(+), 7 deletions(-) > > diff --git a/include/ui/shader.h b/include/ui/shader.h > index 8509596..f7d8618 100644 > --- a/include/ui/shader.h > +++ b/include/ui/shader.h > @@ -3,7 +3,9 @@ > > #include > > -void qemu_gl_run_texture_blit(GLint texture_blit_prog); > +GLuint qemu_gl_init_texture_blit(GLint texture_blit_prog); > +void qemu_gl_run_texture_blit(GLint texture_blit_prog, > + GLint texture_blit_vao); > > GLuint qemu_gl_create_compile_shader(GLenum type, const GLchar *src); > GLuint qemu_gl_create_link_program(GLuint vert, GLuint frag); > diff --git a/ui/console-gl.c b/ui/console-gl.c > index cb45cf8..baf397b 100644 > --- a/ui/console-gl.c > +++ b/ui/console-gl.c > @@ -33,6 +33,7 @@ > > struct ConsoleGLState { > GLint texture_blit_prog; > + GLint texture_blit_vao; > }; > > /* ---------------------------------------------------------------------= - */ > @@ -47,6 +48,9 @@ ConsoleGLState *console_gl_init_context(void) > exit(1); > } > > + gls->texture_blit_vao =3D > + qemu_gl_init_texture_blit(gls->texture_blit_prog); > + The gl console doesn't have cleanup, ok > return gls; > } > > @@ -131,7 +135,8 @@ void surface_gl_render_texture(ConsoleGLState *gls, > glClearColor(0.1f, 0.1f, 0.1f, 0.0f); > glClear(GL_COLOR_BUFFER_BIT); > > - qemu_gl_run_texture_blit(gls->texture_blit_prog); > + qemu_gl_run_texture_blit(gls->texture_blit_prog, > + gls->texture_blit_vao); > } > > void surface_gl_destroy_texture(ConsoleGLState *gls, > diff --git a/ui/shader.c b/ui/shader.c > index 52a4632..ada1c4c 100644 > --- a/ui/shader.c > +++ b/ui/shader.c > @@ -29,21 +29,43 @@ > > /* ---------------------------------------------------------------------= - */ > > -void qemu_gl_run_texture_blit(GLint texture_blit_prog) > +GLuint qemu_gl_init_texture_blit(GLint texture_blit_prog) > { > - GLfloat in_position[] =3D { > + static const GLfloat in_position[] =3D { > -1, -1, > 1, -1, > -1, 1, > 1, 1, > }; > GLint l_position; > + GLuint vao, buffer; > + > + glGenVertexArrays(1, &vao); > + glBindVertexArray(vao); > + > + /* this is the VBO that holds the vertex data */ > + glGenBuffers(1, &buffer); > + glBindBuffer(GL_ARRAY_BUFFER, buffer); > + glBufferData(GL_ARRAY_BUFFER, sizeof(in_position), in_position, > + GL_STATIC_DRAW); > > - glUseProgram(texture_blit_prog); > l_position =3D glGetAttribLocation(texture_blit_prog, "in_position")= ; > - glVertexAttribPointer(l_position, 2, GL_FLOAT, GL_FALSE, 0, in_posit= ion); > + glVertexAttribPointer(l_position, 2, GL_FLOAT, GL_FALSE, 0, 0); > glEnableVertexAttribArray(l_position); > - glDrawArrays(GL_TRIANGLE_STRIP, l_position, 4); > + > + glBindBuffer (GL_ARRAY_BUFFER, 0); > + glBindVertexArray (0); > + glDeleteBuffers (1, &buffer); > + extra space before ( Is the unbinding necessary? > + return vao; > +} > + > +void qemu_gl_run_texture_blit(GLint texture_blit_prog, > + GLint texture_blit_vao) > +{ > + glUseProgram(texture_blit_prog); > + glBindVertexArray(texture_blit_vao); > + glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); > } > > /* ---------------------------------------------------------------------= - */ > -- > 1.8.3.1 > > Reviewed-by: Marc-Andr=C3=A9 Lureau --=20 Marc-Andr=C3=A9 Lureau