shader.c (98c710f2d5cdf37f29a267352eb1f3c28cbf369d) | shader.c (46e19e149f3b129a22c440caba853188df67deab) |
---|---|
1/* 2 * QEMU opengl shader helper functions 3 * 4 * Copyright (c) 2014 Red Hat 5 * 6 * Authors: 7 * Gerd Hoffmann <kraxel@redhat.com> 8 * --- 14 unchanged lines hidden (view full) --- 23 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 25 * THE SOFTWARE. 26 */ 27#include "qemu/osdep.h" 28#include "qemu-common.h" 29#include "ui/shader.h" 30 | 1/* 2 * QEMU opengl shader helper functions 3 * 4 * Copyright (c) 2014 Red Hat 5 * 6 * Authors: 7 * Gerd Hoffmann <kraxel@redhat.com> 8 * --- 14 unchanged lines hidden (view full) --- 23 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 25 * THE SOFTWARE. 26 */ 27#include "qemu/osdep.h" 28#include "qemu-common.h" 29#include "ui/shader.h" 30 |
31#include "shader/texture-blit-vert.h" 32#include "shader/texture-blit-frag.h" 33 34struct QemuGLShader { 35 GLint texture_blit_prog; 36 GLint texture_blit_vao; 37}; 38 |
|
31/* ---------------------------------------------------------------------- */ 32 | 39/* ---------------------------------------------------------------------- */ 40 |
33GLuint qemu_gl_init_texture_blit(GLint texture_blit_prog) | 41static GLuint qemu_gl_init_texture_blit(GLint texture_blit_prog) |
34{ 35 static const GLfloat in_position[] = { 36 -1, -1, 37 1, -1, 38 -1, 1, 39 1, 1, 40 }; 41 GLint l_position; --- 13 unchanged lines hidden (view full) --- 55 glEnableVertexAttribArray(l_position); 56 57 glBindBuffer(GL_ARRAY_BUFFER, 0); 58 glBindVertexArray(0); 59 60 return vao; 61} 62 | 42{ 43 static const GLfloat in_position[] = { 44 -1, -1, 45 1, -1, 46 -1, 1, 47 1, 1, 48 }; 49 GLint l_position; --- 13 unchanged lines hidden (view full) --- 63 glEnableVertexAttribArray(l_position); 64 65 glBindBuffer(GL_ARRAY_BUFFER, 0); 66 glBindVertexArray(0); 67 68 return vao; 69} 70 |
63void qemu_gl_run_texture_blit(GLint texture_blit_prog, 64 GLint texture_blit_vao) | 71void qemu_gl_run_texture_blit(QemuGLShader *gls) |
65{ | 72{ |
66 glUseProgram(texture_blit_prog); 67 glBindVertexArray(texture_blit_vao); | 73 glUseProgram(gls->texture_blit_prog); 74 glBindVertexArray(gls->texture_blit_vao); |
68 glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 69} 70 71/* ---------------------------------------------------------------------- */ 72 | 75 glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 76} 77 78/* ---------------------------------------------------------------------- */ 79 |
73GLuint qemu_gl_create_compile_shader(GLenum type, const GLchar *src) | 80static GLuint qemu_gl_create_compile_shader(GLenum type, const GLchar *src) |
74{ 75 GLuint shader; 76 GLint status, length; 77 char *errmsg; 78 79 shader = glCreateShader(type); 80 glShaderSource(shader, 1, &src, 0); 81 glCompileShader(shader); --- 7 unchanged lines hidden (view full) --- 89 (type == GL_VERTEX_SHADER) ? "vertex" : "fragment", 90 errmsg); 91 g_free(errmsg); 92 return 0; 93 } 94 return shader; 95} 96 | 81{ 82 GLuint shader; 83 GLint status, length; 84 char *errmsg; 85 86 shader = glCreateShader(type); 87 glShaderSource(shader, 1, &src, 0); 88 glCompileShader(shader); --- 7 unchanged lines hidden (view full) --- 96 (type == GL_VERTEX_SHADER) ? "vertex" : "fragment", 97 errmsg); 98 g_free(errmsg); 99 return 0; 100 } 101 return shader; 102} 103 |
97GLuint qemu_gl_create_link_program(GLuint vert, GLuint frag) | 104static GLuint qemu_gl_create_link_program(GLuint vert, GLuint frag) |
98{ 99 GLuint program; 100 GLint status, length; 101 char *errmsg; 102 103 program = glCreateProgram(); 104 glAttachShader(program, vert); 105 glAttachShader(program, frag); --- 6 unchanged lines hidden (view full) --- 112 glGetProgramInfoLog(program, length, &length, errmsg); 113 fprintf(stderr, "%s: link program: %s\n", __func__, errmsg); 114 g_free(errmsg); 115 return 0; 116 } 117 return program; 118} 119 | 105{ 106 GLuint program; 107 GLint status, length; 108 char *errmsg; 109 110 program = glCreateProgram(); 111 glAttachShader(program, vert); 112 glAttachShader(program, frag); --- 6 unchanged lines hidden (view full) --- 119 glGetProgramInfoLog(program, length, &length, errmsg); 120 fprintf(stderr, "%s: link program: %s\n", __func__, errmsg); 121 g_free(errmsg); 122 return 0; 123 } 124 return program; 125} 126 |
120GLuint qemu_gl_create_compile_link_program(const GLchar *vert_src, 121 const GLchar *frag_src) | 127static GLuint qemu_gl_create_compile_link_program(const GLchar *vert_src, 128 const GLchar *frag_src) |
122{ 123 GLuint vert_shader, frag_shader, program; 124 125 vert_shader = qemu_gl_create_compile_shader(GL_VERTEX_SHADER, vert_src); 126 frag_shader = qemu_gl_create_compile_shader(GL_FRAGMENT_SHADER, frag_src); 127 if (!vert_shader || !frag_shader) { 128 return 0; 129 } 130 131 program = qemu_gl_create_link_program(vert_shader, frag_shader); 132 glDeleteShader(vert_shader); 133 glDeleteShader(frag_shader); 134 135 return program; 136} | 129{ 130 GLuint vert_shader, frag_shader, program; 131 132 vert_shader = qemu_gl_create_compile_shader(GL_VERTEX_SHADER, vert_src); 133 frag_shader = qemu_gl_create_compile_shader(GL_FRAGMENT_SHADER, frag_src); 134 if (!vert_shader || !frag_shader) { 135 return 0; 136 } 137 138 program = qemu_gl_create_link_program(vert_shader, frag_shader); 139 glDeleteShader(vert_shader); 140 glDeleteShader(frag_shader); 141 142 return program; 143} |
144 145/* ---------------------------------------------------------------------- */ 146 147QemuGLShader *qemu_gl_init_shader(void) 148{ 149 QemuGLShader *gls = g_new0(QemuGLShader, 1); 150 151 gls->texture_blit_prog = qemu_gl_create_compile_link_program 152 (texture_blit_vert_src, texture_blit_frag_src); 153 if (!gls->texture_blit_prog) { 154 exit(1); 155 } 156 157 gls->texture_blit_vao = 158 qemu_gl_init_texture_blit(gls->texture_blit_prog); 159 160 return gls; 161} 162 163void qemu_gl_fini_shader(QemuGLShader *gls) 164{ 165 if (!gls) { 166 return; 167 } 168 g_free(gls); 169} |
|