qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 1/9] shaders: initialize vertexes once


From: Marc-André Lureau
Subject: Re: [Qemu-devel] [PATCH 1/9] shaders: initialize vertexes once
Date: Thu, 10 Sep 2015 14:40:36 +0200

Hi

On Wed, Sep 9, 2015 at 1:20 PM, Gerd Hoffmann <address@hidden> 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 <address@hidden>
> ---
>  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 <epoxy/gl.h>
>
> -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 =
> +        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[] = {
> +    static const GLfloat in_position[] = {
>          -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 = glGetAttribLocation(texture_blit_prog, "in_position");
> -    glVertexAttribPointer(l_position, 2, GL_FLOAT, GL_FALSE, 0, in_position);
> +    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é Lureau <address@hidden>

-- 
Marc-André Lureau



reply via email to

[Prev in Thread] Current Thread [Next in Thread]