//----------------------- vCaptureScreen void vCaptureScreen (char * filename, int iFrameWidth, int iFrameHeight) { FILE *fp = fopen (filename, "wb"); if (fp == NULL) { printf ("Invalid output filename\n"); return; } int data_size = iFrameWidth*iFrameHeight*3; unsigned char *framebuffer = new unsigned char[data_size]; if (framebuffer == NULL) { printf ("Unable to allocate enough memory to capture screen"); return; } glReadPixels (0, 0, iFrameWidth, iFrameHeight, GL_RGB, GL_UNSIGNED_BYTE, framebuffer); // now flip vertical int x, y, i1, i2; unsigned char temp; for (x = 0; x < iFrameWidth; x++){ for (y = 0; y < iFrameHeight/2; y++){ i1 = (y*iFrameWidth + x)*3; // this pixel i2 = ((iFrameHeight - y - 1)*iFrameWidth + x) * 3; // its opposite (across x-axis) // swap pixels temp = framebuffer[i1]; framebuffer[i1] = framebuffer[i2]; framebuffer[i2] = temp; i1++; i2++; temp = framebuffer[i1]; framebuffer[i1] = framebuffer[i2]; framebuffer[i2] = temp; i1++; i2++; temp = framebuffer[i1]; framebuffer[i1] = framebuffer[i2]; framebuffer[i2] = temp; } } fprintf (fp, "P6\n%d %d\n%d\n", iFrameWidth, iFrameHeight, 255); fwrite (framebuffer, data_size, 1, fp); delete framebuffer; fclose(fp); }