aboutsummaryrefslogtreecommitdiff
path: root/ui/shader.c
diff options
context:
space:
mode:
authorGerd Hoffmann <kraxel@redhat.com>2017-10-10 15:54:49 +0200
committerGerd Hoffmann <kraxel@redhat.com>2017-10-17 10:25:42 +0200
commit46e19e149f3b129a22c440caba853188df67deab (patch)
tree4c3b53e551e8f69b3762f5961551594ca72ee9d7 /ui/shader.c
parent4133fa711f37f0db303bf5aac03ea31b5be6ac1d (diff)
opengl: move shader init from console-gl.c to shader.c
With the upcoming dmabuf support in qemu there will be more users of the shaders than just console-gl.c. So rename ConsoleGLState to QemuGLShader, rename some functions too, move code from console-gl.c to shaders.c. No functional change. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Message-id: 20171010135453.6704-3-kraxel@redhat.com
Diffstat (limited to 'ui/shader.c')
-rw-r--r--ui/shader.c51
1 files changed, 42 insertions, 9 deletions
diff --git a/ui/shader.c b/ui/shader.c
index 1ffddbef3b..d36e7af232 100644
--- a/ui/shader.c
+++ b/ui/shader.c
@@ -28,9 +28,17 @@
#include "qemu-common.h"
#include "ui/shader.h"
+#include "shader/texture-blit-vert.h"
+#include "shader/texture-blit-frag.h"
+
+struct QemuGLShader {
+ GLint texture_blit_prog;
+ GLint texture_blit_vao;
+};
+
/* ---------------------------------------------------------------------- */
-GLuint qemu_gl_init_texture_blit(GLint texture_blit_prog)
+static GLuint qemu_gl_init_texture_blit(GLint texture_blit_prog)
{
static const GLfloat in_position[] = {
-1, -1,
@@ -60,17 +68,16 @@ GLuint qemu_gl_init_texture_blit(GLint texture_blit_prog)
return vao;
}
-void qemu_gl_run_texture_blit(GLint texture_blit_prog,
- GLint texture_blit_vao)
+void qemu_gl_run_texture_blit(QemuGLShader *gls)
{
- glUseProgram(texture_blit_prog);
- glBindVertexArray(texture_blit_vao);
+ glUseProgram(gls->texture_blit_prog);
+ glBindVertexArray(gls->texture_blit_vao);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
}
/* ---------------------------------------------------------------------- */
-GLuint qemu_gl_create_compile_shader(GLenum type, const GLchar *src)
+static GLuint qemu_gl_create_compile_shader(GLenum type, const GLchar *src)
{
GLuint shader;
GLint status, length;
@@ -94,7 +101,7 @@ GLuint qemu_gl_create_compile_shader(GLenum type, const GLchar *src)
return shader;
}
-GLuint qemu_gl_create_link_program(GLuint vert, GLuint frag)
+static GLuint qemu_gl_create_link_program(GLuint vert, GLuint frag)
{
GLuint program;
GLint status, length;
@@ -117,8 +124,8 @@ GLuint qemu_gl_create_link_program(GLuint vert, GLuint frag)
return program;
}
-GLuint qemu_gl_create_compile_link_program(const GLchar *vert_src,
- const GLchar *frag_src)
+static GLuint qemu_gl_create_compile_link_program(const GLchar *vert_src,
+ const GLchar *frag_src)
{
GLuint vert_shader, frag_shader, program;
@@ -134,3 +141,29 @@ GLuint qemu_gl_create_compile_link_program(const GLchar *vert_src,
return program;
}
+
+/* ---------------------------------------------------------------------- */
+
+QemuGLShader *qemu_gl_init_shader(void)
+{
+ QemuGLShader *gls = g_new0(QemuGLShader, 1);
+
+ gls->texture_blit_prog = qemu_gl_create_compile_link_program
+ (texture_blit_vert_src, texture_blit_frag_src);
+ if (!gls->texture_blit_prog) {
+ exit(1);
+ }
+
+ gls->texture_blit_vao =
+ qemu_gl_init_texture_blit(gls->texture_blit_prog);
+
+ return gls;
+}
+
+void qemu_gl_fini_shader(QemuGLShader *gls)
+{
+ if (!gls) {
+ return;
+ }
+ g_free(gls);
+}