+static void
+paint_rgb_using_clear (double r, double g, double b)
+{
+ glClearColor(r, g, b, 1.0);
+ glClear(GL_COLOR_BUFFER_BIT);
+}
+
+static void
+paint_rgb_using_glsl (double r, double g, double b)
+{
+ const char * vs_source =
+ "void main()\n"
+ "{\n"
+ " gl_Position = ftransform();\n"
+ "}\n";
+ const char * fs_source =
+ "#version 120\n"
+ "uniform vec4 color;\n"
+ "void main()\n"
+ "{\n"
+ " gl_FragColor = color;\n"
+ "}\n";
+
+ GLuint vs, fs, program;
+ GLint color;
+
+ vs = glCreateShader (GL_VERTEX_SHADER);
+ glShaderSource (vs, 1, &vs_source, NULL);
+ glCompileShader (vs);
+
+ fs = glCreateShader (GL_FRAGMENT_SHADER);
+ glShaderSource (fs, 1, &fs_source, NULL);
+ glCompileShader (fs);
+
+ program = glCreateProgram ();
+ glAttachShader (program, vs);
+ glAttachShader (program, fs);
+
+ glLinkProgram (program);
+ glUseProgram (program);
+
+ color = glGetUniformLocation (program, "color");
+
+ glUniform4f (color, r, g, b, 1.0);
+
+ glMatrixMode (GL_PROJECTION);
+ glLoadIdentity ();
+ glOrtho (0, width, height, 0, 0, 1);
+ glMatrixMode (GL_MODELVIEW);
+
+ glBegin (GL_QUADS);
+ glVertex2f (0, 0);
+ glVertex2f (width, 0);
+ glVertex2f (width, height);
+ glVertex2f (0, height);
+ glEnd ();
+
+ glUseProgram (0);
+}
+