void glamor_init_solid_shader(ScreenPtr screen) { glamor_screen_private *glamor_priv; const char *solid_vs = "attribute vec4 v_position;" "void main()\n" "{\n" " gl_Position = v_position;\n" "}\n"; const char *solid_fs = GLAMOR_DEFAULT_PRECISION "uniform vec4 color;\n" "void main()\n" "{\n" " gl_FragColor = color;\n" "}\n"; GLint fs_prog, vs_prog; glamor_priv = glamor_get_screen_private(screen); glamor_get_context(glamor_priv); glamor_priv->solid_prog = glCreateProgram(); vs_prog = glamor_compile_glsl_prog(GL_VERTEX_SHADER, solid_vs); fs_prog = glamor_compile_glsl_prog(GL_FRAGMENT_SHADER, solid_fs); glAttachShader(glamor_priv->solid_prog, vs_prog); glAttachShader(glamor_priv->solid_prog, fs_prog); glBindAttribLocation(glamor_priv->solid_prog, GLAMOR_VERTEX_POS, "v_position"); glamor_link_glsl_prog(glamor_priv->solid_prog); glamor_priv->solid_color_uniform_location = glGetUniformLocation(glamor_priv->solid_prog, "color"); glamor_put_context(glamor_priv); }
void glamor_init_putimage_shaders(ScreenPtr screen) { #if 0 glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); const char *xybitmap_vs = "uniform float x_bias;\n" "uniform float x_scale;\n" "uniform float y_bias;\n" "uniform float y_scale;\n" "varying vec2 bitmap_coords;\n" "void main()\n" "{\n" " gl_Position = vec4((gl_Vertex.x + x_bias) * x_scale,\n" " (gl_Vertex.y + y_bias) * y_scale,\n" " 0,\n" " 1);\n" " bitmap_coords = gl_MultiTexCoord0.xy;\n" "}\n"; const char *xybitmap_fs = "uniform vec4 fg, bg;\n" "varying vec2 bitmap_coords;\n" "uniform sampler2D bitmap_sampler;\n" "void main()\n" "{\n" " float bitmap_value = texture2D(bitmap_sampler,\n" " bitmap_coords).x;\n" " gl_FragColor = mix(bg, fg, bitmap_value);\n" "}\n"; GLint fs_prog, vs_prog, prog; GLint sampler_uniform_location; if (!GLEW_ARB_fragment_shader) return; prog = dispatch->glCreateProgram(); vs_prog = glamor_compile_glsl_prog(GL_VERTEX_SHADER, xybitmap_vs); fs_prog = glamor_compile_glsl_prog(GL_FRAGMENT_SHADER, xybitmap_fs); dispatch->glAttachShader(prog, vs_prog); dispatch->glAttachShader(prog, fs_prog); glamor_link_glsl_prog(prog); dispatch->glUseProgram(prog); sampler_uniform_location = dispatch->glGetUniformLocation(prog, "bitmap_sampler"); dispatch->glUniform1i(sampler_uniform_location, 0); glamor_priv->put_image_xybitmap_fg_uniform_location = dispatch->glGetUniformLocation(prog, "fg"); glamor_priv->put_image_xybitmap_bg_uniform_location = dispatch->glGetUniformLocation(prog, "bg"); glamor_get_transform_uniform_locations(prog, &glamor_priv->put_image_xybitmap_transform); glamor_priv->put_image_xybitmap_prog = prog; dispatch->glUseProgram(0); #endif }
void glamor_init_tile_shader(ScreenPtr screen) { glamor_screen_private *glamor_priv; const char *tile_vs = "attribute vec4 v_position;\n" "attribute vec4 v_texcoord0;\n" "varying vec2 tile_texture;\n" "void main()\n" "{\n" " gl_Position = v_position;\n" " tile_texture = v_texcoord0.xy;\n" "}\n"; const char *tile_fs = GLAMOR_DEFAULT_PRECISION "varying vec2 tile_texture;\n" "uniform sampler2D sampler;\n" "uniform vec2 wh;" "void main()\n" "{\n" " vec2 rel_tex;" " rel_tex = tile_texture * wh; \n" " rel_tex = floor(rel_tex) + (fract(rel_tex) / wh); \n" " gl_FragColor = texture2D(sampler, rel_tex);\n" "}\n"; GLint fs_prog, vs_prog; GLint sampler_uniform_location; glamor_priv = glamor_get_screen_private(screen); glamor_make_current(glamor_priv); glamor_priv->tile_prog = glCreateProgram(); vs_prog = glamor_compile_glsl_prog(GL_VERTEX_SHADER, tile_vs); fs_prog = glamor_compile_glsl_prog(GL_FRAGMENT_SHADER, tile_fs); glAttachShader(glamor_priv->tile_prog, vs_prog); glAttachShader(glamor_priv->tile_prog, fs_prog); glBindAttribLocation(glamor_priv->tile_prog, GLAMOR_VERTEX_POS, "v_position"); glBindAttribLocation(glamor_priv->tile_prog, GLAMOR_VERTEX_SOURCE, "v_texcoord0"); glamor_link_glsl_prog(screen, glamor_priv->tile_prog, "tile"); sampler_uniform_location = glGetUniformLocation(glamor_priv->tile_prog, "sampler"); glUseProgram(glamor_priv->tile_prog); glUniform1i(sampler_uniform_location, 0); glamor_priv->tile_wh = glGetUniformLocation(glamor_priv->tile_prog, "wh"); }
void glamor_init_finish_access_shaders(ScreenPtr screen) { glamor_screen_private *glamor_priv; const char *vs_source = "attribute vec4 v_position;\n" "attribute vec4 v_texcoord0;\n" "varying vec2 source_texture;\n" "void main()\n" "{\n" " gl_Position = v_position;\n" " source_texture = v_texcoord0.xy;\n" "}\n"; const char *common_source = GLAMOR_DEFAULT_PRECISION "varying vec2 source_texture;\n" "uniform sampler2D sampler;\n" "uniform int revert;\n" "uniform int swap_rb;\n" "#define REVERT_NONE 0\n" "#define REVERT_NORMAL 1\n" "#define SWAP_NONE_DOWNLOADING 0\n" "#define SWAP_DOWNLOADING 1\n" "#define SWAP_UPLOADING 2\n" "#define SWAP_NONE_UPLOADING 3\n"; const char *fs_source = "void main()\n" "{\n" " if (revert == REVERT_NONE) \n" " { \n" " if ((swap_rb != SWAP_NONE_DOWNLOADING) && (swap_rb != SWAP_NONE_UPLOADING)) \n" " gl_FragColor = texture2D(sampler, source_texture).bgra;\n" " else \n" " gl_FragColor = texture2D(sampler, source_texture).rgba;\n" " } \n" " else \n" " { \n" " if (swap_rb == SWAP_DOWNLOADING) \n" " gl_FragColor = texture2D(sampler, source_texture).argb;\n" " else if (swap_rb == SWAP_NONE_DOWNLOADING)\n" " gl_FragColor = texture2D(sampler, source_texture).abgr;\n" " else if (swap_rb == SWAP_UPLOADING)\n" " gl_FragColor = texture2D(sampler, source_texture).gbar;\n" " else if (swap_rb == SWAP_NONE_UPLOADING)\n" " gl_FragColor = texture2D(sampler, source_texture).abgr;\n" " } \n" "}\n"; const char *set_alpha_source = "void main()\n" "{\n" " if (revert == REVERT_NONE) \n" " { \n" " if ((swap_rb != SWAP_NONE_DOWNLOADING) && (swap_rb != SWAP_NONE_UPLOADING)) \n" " gl_FragColor = vec4(texture2D(sampler, source_texture).bgr, 1);\n" " else \n" " gl_FragColor = vec4(texture2D(sampler, source_texture).rgb, 1);\n" " } \n" " else \n" " { \n" " if (swap_rb == SWAP_DOWNLOADING) \n" " gl_FragColor = vec4(1, texture2D(sampler, source_texture).rgb);\n" " else if (swap_rb == SWAP_NONE_DOWNLOADING)\n" " gl_FragColor = vec4(1, texture2D(sampler, source_texture).bgr);\n" " else if (swap_rb == SWAP_UPLOADING)\n" " gl_FragColor = vec4(texture2D(sampler, source_texture).gba, 1);\n" " else if (swap_rb == SWAP_NONE_UPLOADING)\n" " gl_FragColor = vec4(texture2D(sampler, source_texture).abg, 1);\n" " } \n" "}\n"; GLint fs_prog, vs_prog, avs_prog, set_alpha_prog; GLint sampler_uniform_location; char *source; glamor_priv = glamor_get_screen_private(screen); glamor_get_context(glamor_priv); glamor_priv->finish_access_prog[0] = glCreateProgram(); glamor_priv->finish_access_prog[1] = glCreateProgram(); vs_prog = glamor_compile_glsl_prog(GL_VERTEX_SHADER, vs_source); XNFasprintf(&source, "%s%s", common_source, fs_source); fs_prog = glamor_compile_glsl_prog(GL_FRAGMENT_SHADER, source); free(source); glAttachShader(glamor_priv->finish_access_prog[0], vs_prog); glAttachShader(glamor_priv->finish_access_prog[0], fs_prog); avs_prog = glamor_compile_glsl_prog(GL_VERTEX_SHADER, vs_source); XNFasprintf(&source, "%s%s", common_source, set_alpha_source); set_alpha_prog = glamor_compile_glsl_prog(GL_FRAGMENT_SHADER, source); free(source); glAttachShader(glamor_priv->finish_access_prog[1], avs_prog); glAttachShader(glamor_priv->finish_access_prog[1], set_alpha_prog); glBindAttribLocation(glamor_priv->finish_access_prog[0], GLAMOR_VERTEX_POS, "v_position"); glBindAttribLocation(glamor_priv->finish_access_prog[0], GLAMOR_VERTEX_SOURCE, "v_texcoord0"); glamor_link_glsl_prog(glamor_priv->finish_access_prog[0]); glBindAttribLocation(glamor_priv->finish_access_prog[1], GLAMOR_VERTEX_POS, "v_position"); glBindAttribLocation(glamor_priv->finish_access_prog[1], GLAMOR_VERTEX_SOURCE, "v_texcoord0"); glamor_link_glsl_prog(glamor_priv->finish_access_prog[1]); glamor_priv->finish_access_revert[0] = glGetUniformLocation(glamor_priv->finish_access_prog[0], "revert"); glamor_priv->finish_access_swap_rb[0] = glGetUniformLocation(glamor_priv->finish_access_prog[0], "swap_rb"); sampler_uniform_location = glGetUniformLocation(glamor_priv->finish_access_prog[0], "sampler"); glUseProgram(glamor_priv->finish_access_prog[0]); glUniform1i(sampler_uniform_location, 0); glUniform1i(glamor_priv->finish_access_revert[0], 0); glUniform1i(glamor_priv->finish_access_swap_rb[0], 0); glUseProgram(0); glamor_priv->finish_access_revert[1] = glGetUniformLocation(glamor_priv->finish_access_prog[1], "revert"); glamor_priv->finish_access_swap_rb[1] = glGetUniformLocation(glamor_priv->finish_access_prog[1], "swap_rb"); sampler_uniform_location = glGetUniformLocation(glamor_priv->finish_access_prog[1], "sampler"); glUseProgram(glamor_priv->finish_access_prog[1]); glUniform1i(glamor_priv->finish_access_revert[1], 0); glUniform1i(sampler_uniform_location, 0); glUniform1i(glamor_priv->finish_access_swap_rb[1], 0); glUseProgram(0); glamor_put_context(glamor_priv); }