opengl: add flipping vertex shader
Add vertex shader which flips the texture upside down while blitting it. Add argument to qemu_gl_run_texture_blit() to enable flipping. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Message-id: 20171010135453.6704-4-kraxel@redhat.com
This commit is contained in:
parent
46e19e149f
commit
2e1d70b9e0
4
Makefile
4
Makefile
@ -673,7 +673,9 @@ ui/shader/%-frag.h: $(SRC_PATH)/ui/shader/%.frag $(SRC_PATH)/scripts/shaderinclu
|
||||
"FRAG","$@")
|
||||
|
||||
ui/shader.o: $(SRC_PATH)/ui/shader.c \
|
||||
ui/shader/texture-blit-vert.h ui/shader/texture-blit-frag.h
|
||||
ui/shader/texture-blit-vert.h \
|
||||
ui/shader/texture-blit-flip-vert.h \
|
||||
ui/shader/texture-blit-frag.h
|
||||
|
||||
# documentation
|
||||
MAKEINFO=makeinfo
|
||||
|
@ -5,7 +5,7 @@
|
||||
|
||||
typedef struct QemuGLShader QemuGLShader;
|
||||
|
||||
void qemu_gl_run_texture_blit(QemuGLShader *gls);
|
||||
void qemu_gl_run_texture_blit(QemuGLShader *gls, bool flip);
|
||||
|
||||
QemuGLShader *qemu_gl_init_shader(void);
|
||||
void qemu_gl_fini_shader(QemuGLShader *gls);
|
||||
|
@ -109,7 +109,7 @@ void surface_gl_render_texture(QemuGLShader *gls,
|
||||
glClearColor(0.1f, 0.1f, 0.1f, 0.0f);
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
|
||||
qemu_gl_run_texture_blit(gls);
|
||||
qemu_gl_run_texture_blit(gls, false);
|
||||
}
|
||||
|
||||
void surface_gl_destroy_texture(QemuGLShader *gls,
|
||||
|
12
ui/shader.c
12
ui/shader.c
@ -29,10 +29,12 @@
|
||||
#include "ui/shader.h"
|
||||
|
||||
#include "shader/texture-blit-vert.h"
|
||||
#include "shader/texture-blit-flip-vert.h"
|
||||
#include "shader/texture-blit-frag.h"
|
||||
|
||||
struct QemuGLShader {
|
||||
GLint texture_blit_prog;
|
||||
GLint texture_blit_flip_prog;
|
||||
GLint texture_blit_vao;
|
||||
};
|
||||
|
||||
@ -68,9 +70,11 @@ static GLuint qemu_gl_init_texture_blit(GLint texture_blit_prog)
|
||||
return vao;
|
||||
}
|
||||
|
||||
void qemu_gl_run_texture_blit(QemuGLShader *gls)
|
||||
void qemu_gl_run_texture_blit(QemuGLShader *gls, bool flip)
|
||||
{
|
||||
glUseProgram(gls->texture_blit_prog);
|
||||
glUseProgram(flip
|
||||
? gls->texture_blit_flip_prog
|
||||
: gls->texture_blit_prog);
|
||||
glBindVertexArray(gls->texture_blit_vao);
|
||||
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
||||
}
|
||||
@ -150,7 +154,9 @@ QemuGLShader *qemu_gl_init_shader(void)
|
||||
|
||||
gls->texture_blit_prog = qemu_gl_create_compile_link_program
|
||||
(texture_blit_vert_src, texture_blit_frag_src);
|
||||
if (!gls->texture_blit_prog) {
|
||||
gls->texture_blit_flip_prog = qemu_gl_create_compile_link_program
|
||||
(texture_blit_flip_vert_src, texture_blit_frag_src);
|
||||
if (!gls->texture_blit_prog || !gls->texture_blit_flip_prog) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
10
ui/shader/texture-blit-flip.vert
Normal file
10
ui/shader/texture-blit-flip.vert
Normal file
@ -0,0 +1,10 @@
|
||||
|
||||
#version 300 es
|
||||
|
||||
in vec2 in_position;
|
||||
out vec2 ex_tex_coord;
|
||||
|
||||
void main(void) {
|
||||
gl_Position = vec4(in_position, 0.0, 1.0);
|
||||
ex_tex_coord = vec2(1.0 + in_position.x, 1.0 + in_position.y) * 0.5;
|
||||
}
|
Loading…
Reference in New Issue
Block a user