+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, win_width, win_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+
+ varr_sz = win_width * win_height * sizeof *varr * 2;
+ if(!(varr = malloc(varr_sz))) {
+ fprintf(stderr, "failed to allocate vertex array\n");
+ return -1;
+ }
+ carr_sz = win_width * win_height * sizeof *carr * 3;
+ if(!(carr = malloc(carr_sz))) {
+ fprintf(stderr, "failed to allocate color array\n");
+ return -1;
+ }
+
+ vptr = varr;
+ for(i=0; i<win_height; i++) {
+ for(j=0; j<win_width; j++) {
+ vptr[0] = j;
+ vptr[1] = i;
+ vptr += 2;
+ }
+ }
+
+ if(have_vbo) {
+ gl_gen_buffers(1, &vbo_pos);
+ gl_bind_buffer(GL_ARRAY_BUFFER, vbo_pos);
+ gl_buffer_data(GL_ARRAY_BUFFER, varr_sz, varr, GL_STATIC_DRAW);
+
+ gl_gen_buffers(1, &vbo_col);
+ gl_bind_buffer(GL_ARRAY_BUFFER, vbo_col);
+ gl_buffer_data(GL_ARRAY_BUFFER, carr_sz, 0, GL_STREAM_DRAW);
+ }
+
+ quad = glGenLists(1);
+ glNewList(quad, GL_COMPILE);
+ glBegin(GL_QUADS);
+ glTexCoord2f(0, 0); glVertex2f(0, 0);
+ glTexCoord2f(1, 0); glVertex2f(1, 0);
+ glTexCoord2f(1, 1); glVertex2f(1, 1);
+ glTexCoord2f(0, 1); glVertex2f(0, 1);
+ glEnd();
+ glEndList();
+
+ tri = glGenLists(1);
+ glNewList(tri, GL_COMPILE);
+ glBegin(GL_TRIANGLES);
+ glTexCoord2f(0, 0); glVertex2f(0, 0);
+ glTexCoord2f(2, 0); glVertex2f(2, 0);
+ glTexCoord2f(0, 2); glVertex2f(0, 2);
+ glEnd();
+ glEndList();