"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
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);
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,
#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;
};
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);
}
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);
}
--- /dev/null
+
+#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;
+}