+static const char vertex_shader[] =
+ "uniform mat4 proj;\n"
+ "attribute vec4 position;\n"
+ "attribute vec2 texcoord;\n"
+ "varying vec2 v_texcoord;\n"
+ "void main()\n"
+ "{\n"
+ " gl_Position = proj * position;\n"
+ " v_texcoord = texcoord;\n"
+ "}\n";
+
+static const char fragment_shader[] =
+ /* "precision mediump float;\n" */
+ "varying vec2 v_texcoord;\n"
+ "uniform sampler2D tex;\n"
+ "void main()\n"
+ "{\n"
+ " gl_FragColor = texture2D(tex, v_texcoord)\n;"
+ "}\n";
+
+static void
+init_shaders(struct wlsc_compositor *ec)
+{
+ GLuint v, f, program;
+ const char *p;
+ char msg[512];
+ GLfloat vertices[4 * 5];
+
+ p = vertex_shader;
+ v = glCreateShader(GL_VERTEX_SHADER);
+ glShaderSource(v, 1, &p, NULL);
+ glCompileShader(v);
+ glGetShaderInfoLog(v, sizeof msg, NULL, msg);
+ printf("vertex shader info: %s\n", msg);
+
+ p = fragment_shader;
+ f = glCreateShader(GL_FRAGMENT_SHADER);
+ glShaderSource(f, 1, &p, NULL);
+ glCompileShader(f);
+ glGetShaderInfoLog(f, sizeof msg, NULL, msg);
+ printf("fragment shader info: %s\n", msg);
+
+ program = glCreateProgram();
+ glAttachShader(program, v);
+ glAttachShader(program, f);
+ glBindAttribLocation(program, 0, "position");
+ glBindAttribLocation(program, 1, "texcoord");
+
+ glLinkProgram(program);
+ glGetProgramInfoLog(program, sizeof msg, NULL, msg);
+ printf("info: %s\n", msg);
+
+ glUseProgram(program);
+ ec->proj_uniform = glGetUniformLocation(program, "proj");
+ ec->tex_uniform = glGetUniformLocation(program, "tex");
+
+ vertices[ 0] = 0.0;
+ vertices[ 1] = 0.0;
+ vertices[ 2] = 0.0;
+ vertices[ 3] = 0.0;
+ vertices[ 4] = 0.0;
+
+ vertices[ 5] = 0.0;
+ vertices[ 6] = 1.0;
+ vertices[ 7] = 0.0;
+ vertices[ 8] = 0.0;
+ vertices[ 9] = 1.0;
+
+ vertices[10] = 1.0;
+ vertices[11] = 0.0;
+ vertices[12] = 0.0;
+ vertices[13] = 1.0;
+ vertices[14] = 0.0;
+
+ vertices[15] = 1.0;
+ vertices[16] = 1.0;
+ vertices[17] = 0.0;
+ vertices[18] = 1.0;
+ vertices[19] = 1.0;
+
+ glGenBuffers(1, &ec->vbo);
+ glBindBuffer(GL_ARRAY_BUFFER, ec->vbo);
+ glBufferData(GL_ARRAY_BUFFER, sizeof vertices, vertices, GL_STATIC_DRAW);
+}
+