int numMultiSamples = 4;
const int attributes[] =
{
WGL_SUPPORT_OPENGL_ARB, GL_TRUE, // need OpenGL supported
WGL_DRAW_TO_PBUFFER_ARB, GL_TRUE, // enable render to pbuffer
WGL_PIXEL_TYPE_ARB, WGL_TYPE_RGBA_ARB, // need RGBA colors
WGL_COLOR_BITS_ARB, 24, // at least 24 bits for color
WGL_SAMPLE_BUFFERS_ARB, GL_TRUE, // enable FSAA
WGL_SAMPLES_ARB, numMultiSamples,
NULL // end with a NULL terminator
};
int pixelFormat = 0;
UINT numFormats = 0;
HWND hWnd = ::GetDesktopWindow();
HDC hDC = ::GetDC (hWnd);
wglChoosePixelFormat (hDC, attributes, NULL, 1, &pixelFormat, &numFormats);
HPBUFFERARB hBitmapPbuffer = wglCreatePbuffer (hDC, pixelFormat, 100, 100, NULL);
HDC hBitmapPbufferDC = wglGetPbufferDC (hBitmapPbuffer);
HGLRC hBitmapRC = ::wglCreateContext (hBitmapPbufferDC);
VERIFY(wglMakeCurrent (hBitmapPbufferDC, hBitmapRC) != FALSE);
glDrawBuffer (GL_FRONT);
glClearColor(1.0f,1.0f,1.0f,1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glDisable(GL_DEPTH_TEST);
glReadBuffer(GL_FRONT);
RGBQUAD rgbQuad;
glReadPixels (0, 0, 1, 1, GL_BGRA_EXT, GL_UNSIGNED_BYTE, (GLvoid *) &rgbQuad);
ASSERT(rgbQuad.rgbRed == 255);
glBegin (GL_POINTS);
glVertex3i (10,20,30);
glEnd();
glReadPixels (0, 0, 1, 1, GL_BGRA_EXT, GL_UNSIGNED_BYTE, (GLvoid *) &rgbQuad);
ASSERT(rgbQuad.rgbRed == 255);