no real changes, clarified the usage of WX_GL_DOUBLEBUFFER; documented it and other WX_GL_XXX constants lost during doxygen transition; simplified wxMSW code a bit

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@53379 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2008-04-27 12:46:28 +00:00
parent 129513d354
commit 4aa59c3df6
3 changed files with 124 additions and 53 deletions

View File

@ -27,27 +27,27 @@ class WXDLLIMPEXP_FWD_GL wxGLContext;
// Constants for attributes list // Constants for attributes list
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// The generic OpenGL implementation doesn't support most of these options, // Notice that not all implementation support options such as stereo, auxiliary
// such as stereo, auxiliary buffers, alpha channel, and accumulator buffer. // buffers, alpha channel, and accumulator buffer, use IsDisplaySupported() to
// Other implementations may actually support them. // check for individual attributes support.
enum enum
{ {
WX_GL_RGBA=1, /* use true color palette */ WX_GL_RGBA = 1, // use true color palette (on if no attrs specified)
WX_GL_BUFFER_SIZE, /* bits for buffer if not WX_GL_RGBA */ WX_GL_BUFFER_SIZE, // bits for buffer if not WX_GL_RGBA
WX_GL_LEVEL, /* 0 for main buffer, >0 for overlay, <0 for underlay */ WX_GL_LEVEL, // 0 for main buffer, >0 for overlay, <0 for underlay
WX_GL_DOUBLEBUFFER, /* use doublebuffer */ WX_GL_DOUBLEBUFFER, // use double buffering (on if no attrs specified)
WX_GL_STEREO, /* use stereoscopic display */ WX_GL_STEREO, // use stereoscopic display
WX_GL_AUX_BUFFERS, /* number of auxiliary buffers */ WX_GL_AUX_BUFFERS, // number of auxiliary buffers
WX_GL_MIN_RED, /* use red buffer with most bits (> MIN_RED bits) */ WX_GL_MIN_RED, // use red buffer with most bits (> MIN_RED bits)
WX_GL_MIN_GREEN, /* use green buffer with most bits (> MIN_GREEN bits) */ WX_GL_MIN_GREEN, // use green buffer with most bits (> MIN_GREEN bits)
WX_GL_MIN_BLUE, /* use blue buffer with most bits (> MIN_BLUE bits) */ WX_GL_MIN_BLUE, // use blue buffer with most bits (> MIN_BLUE bits)
WX_GL_MIN_ALPHA, /* use alpha buffer with most bits (> MIN_ALPHA bits) */ WX_GL_MIN_ALPHA, // use alpha buffer with most bits (> MIN_ALPHA bits)
WX_GL_DEPTH_SIZE, /* bits for Z-buffer (0,16,32) */ WX_GL_DEPTH_SIZE, // bits for Z-buffer (0,16,32)
WX_GL_STENCIL_SIZE, /* bits for stencil buffer */ WX_GL_STENCIL_SIZE, // bits for stencil buffer
WX_GL_MIN_ACCUM_RED, /* use red accum buffer with most bits (> MIN_ACCUM_RED bits) */ WX_GL_MIN_ACCUM_RED, // use red accum buffer with most bits (> MIN_ACCUM_RED bits)
WX_GL_MIN_ACCUM_GREEN, /* use green buffer with most bits (> MIN_ACCUM_GREEN bits) */ WX_GL_MIN_ACCUM_GREEN, // use green buffer with most bits (> MIN_ACCUM_GREEN bits)
WX_GL_MIN_ACCUM_BLUE, /* use blue buffer with most bits (> MIN_ACCUM_BLUE bits) */ WX_GL_MIN_ACCUM_BLUE, // use blue buffer with most bits (> MIN_ACCUM_BLUE bits)
WX_GL_MIN_ACCUM_ALPHA /* use alpha buffer with most bits (> MIN_ACCUM_ALPHA bits) */ WX_GL_MIN_ACCUM_ALPHA // use alpha buffer with most bits (> MIN_ACCUM_ALPHA bits)
}; };
#define wxGLCanvasName _T("GLCanvas") #define wxGLCanvasName _T("GLCanvas")

View File

@ -71,7 +71,64 @@ public:
void SetCurrent(const wxGLCanvas& win); void SetCurrent(const wxGLCanvas& win);
}; };
/**
Constants for use with wxGLCanvas.
Notice that not all implementation support options such as stereo,
auxiliary buffers, alpha channel, and accumulator buffer, use
wxGLCanvas::IsDisplaySupported() to check for individual attributes support.
*/
enum
{
/// Use true color palette (on if no attributes at all specified).
WX_GL_RGBA = 1,
/// Specifies the number of bits for buffer if not WX_GL_RGBA.
WX_GL_BUFFER_SIZE,
/// Must be followed by 0 for main buffer, >0 for overlay, <0 for underlay.
WX_GL_LEVEL,
/// Use double buffering if present (on if no attributes specified).
WX_GL_DOUBLEBUFFER,
/// Use stereoscopic display.
WX_GL_STEREO,
/// Specifies number of auxiliary buffers.
WX_GL_AUX_BUFFERS,
/// Use red buffer with most bits (> MIN_RED bits)
WX_GL_MIN_RED,
/// Use green buffer with most bits (> MIN_GREEN bits)
WX_GL_MIN_GREEN,
/// Use blue buffer with most bits (> MIN_BLUE bits)
WX_GL_MIN_BLUE,
/// Use alpha buffer with most bits (> MIN_ALPHA bits)
WX_GL_MIN_ALPHA,
/// Specifies number of bits for Z-buffer (typically 0, 16 or 32).
WX_GL_DEPTH_SIZE,
/// Specifies number of bits for stencil buffer.
WX_GL_STENCIL_SIZE,
/// Specifies minimal number of red accumulator bits.
WX_GL_MIN_ACCUM_RED,
/// Specifies minimal number of green accumulator bits.
WX_GL_MIN_ACCUM_GREEN,
/// Specifies minimal number of blue accumulator bits.
WX_GL_MIN_ACCUM_BLUE,
/// Specifies minimal number of alpha accumulator bits.
WX_GL_MIN_ACCUM_ALPHA
};
/** /**
@class wxGLCanvas @class wxGLCanvas
@ -141,15 +198,23 @@ public:
@param name @param name
Window name. Window name.
@param attribList @param attribList
Array of integers. With this parameter you can set the device context Array of integers. With this parameter you can set the device
attributes associated to this window. context attributes associated to this window. This array is
This array is zero-terminated: it should be set up with constants described zero-terminated: it should be set up with constants described in
in the table above. the table above. If a constant should be followed by a value, put
If a constant should be followed by a value, put it in the next array it in the next array position. For example, the WX_GL_DEPTH_SIZE
position. should be followed by the value that indicates the number of bits
For example, the WX_GL_DEPTH_SIZE should be followed by the value that for the depth buffer, e.g:
indicates the number of @code
bits for the depth buffer, so: attribList[n++] = WX_GL_DEPTH_SIZE;
attribList[n++] = 32;
attribList[n] = 0; // terminate the list
@endcode
If the attribute list is not specified at all, i.e. if this
parameter is @NULL, the default attributes including @c WX_GL_RGBA
and @c WX_GL_DOUBLEBUFFER are used. But notice that if you do
specify some attributes you also need to explicitly include these
two default attributes in the list if you need them.
@param palette @param palette
Palette for indexed colour (i.e. non WX_GL_RGBA) mode. Palette for indexed colour (i.e. non WX_GL_RGBA) mode.
Ignored under most platforms. Ignored under most platforms.

View File

@ -332,21 +332,22 @@ AdjustPFDForAttributes(PIXELFORMATDESCRIPTOR& pfd, const int *attribList)
if ( !attribList ) if ( !attribList )
return; return;
// remove default attributes
pfd.dwFlags &= ~PFD_DOUBLEBUFFER; pfd.dwFlags &= ~PFD_DOUBLEBUFFER;
pfd.iPixelType = PFD_TYPE_COLORINDEX; pfd.iPixelType = PFD_TYPE_COLORINDEX;
pfd.cColorBits = 0;
int arg=0;
while ( attribList[arg] ) for ( int arg = 0; attribList[arg]; )
{ {
switch ( attribList[arg++] ) switch ( attribList[arg++] )
{ {
case WX_GL_RGBA: case WX_GL_RGBA:
pfd.iPixelType = PFD_TYPE_RGBA; pfd.iPixelType = PFD_TYPE_RGBA;
break; break;
case WX_GL_BUFFER_SIZE: case WX_GL_BUFFER_SIZE:
pfd.cColorBits = attribList[arg++]; pfd.cColorBits = attribList[arg++];
break; break;
case WX_GL_LEVEL: case WX_GL_LEVEL:
// this member looks like it may be obsolete // this member looks like it may be obsolete
if ( attribList[arg] > 0 ) if ( attribList[arg] > 0 )
@ -357,52 +358,58 @@ AdjustPFDForAttributes(PIXELFORMATDESCRIPTOR& pfd, const int *attribList)
pfd.iLayerType = PFD_MAIN_PLANE; pfd.iLayerType = PFD_MAIN_PLANE;
arg++; arg++;
break; break;
case WX_GL_DOUBLEBUFFER: case WX_GL_DOUBLEBUFFER:
pfd.dwFlags |= PFD_DOUBLEBUFFER; pfd.dwFlags |= PFD_DOUBLEBUFFER;
break; break;
case WX_GL_STEREO: case WX_GL_STEREO:
pfd.dwFlags |= PFD_STEREO; pfd.dwFlags |= PFD_STEREO;
break; break;
case WX_GL_AUX_BUFFERS: case WX_GL_AUX_BUFFERS:
pfd.cAuxBuffers = attribList[arg++]; pfd.cAuxBuffers = attribList[arg++];
break; break;
case WX_GL_MIN_RED: case WX_GL_MIN_RED:
pfd.cColorBits = (pfd.cColorBits + pfd.cColorBits += (pfd.cRedBits = attribList[arg++]);
(pfd.cRedBits = attribList[arg++]));
break; break;
case WX_GL_MIN_GREEN: case WX_GL_MIN_GREEN:
pfd.cColorBits = (pfd.cColorBits + pfd.cColorBits += (pfd.cGreenBits = attribList[arg++]);
(pfd.cGreenBits = attribList[arg++]));
break; break;
case WX_GL_MIN_BLUE: case WX_GL_MIN_BLUE:
pfd.cColorBits = (pfd.cColorBits + pfd.cColorBits += (pfd.cBlueBits = attribList[arg++]);
(pfd.cBlueBits = attribList[arg++]));
break; break;
case WX_GL_MIN_ALPHA: case WX_GL_MIN_ALPHA:
// doesn't count in cColorBits // doesn't count in cColorBits
pfd.cAlphaBits = attribList[arg++]; pfd.cAlphaBits = attribList[arg++];
break; break;
case WX_GL_DEPTH_SIZE: case WX_GL_DEPTH_SIZE:
pfd.cDepthBits = attribList[arg++]; pfd.cDepthBits = attribList[arg++];
break; break;
case WX_GL_STENCIL_SIZE: case WX_GL_STENCIL_SIZE:
pfd.cStencilBits = attribList[arg++]; pfd.cStencilBits = attribList[arg++];
break; break;
case WX_GL_MIN_ACCUM_RED: case WX_GL_MIN_ACCUM_RED:
pfd.cAccumBits = (pfd.cAccumBits + pfd.cAccumBits += (pfd.cAccumRedBits = attribList[arg++]);
(pfd.cAccumRedBits = attribList[arg++]));
break; break;
case WX_GL_MIN_ACCUM_GREEN: case WX_GL_MIN_ACCUM_GREEN:
pfd.cAccumBits = (pfd.cAccumBits + pfd.cAccumBits += (pfd.cAccumGreenBits = attribList[arg++]);
(pfd.cAccumGreenBits = attribList[arg++]));
break; break;
case WX_GL_MIN_ACCUM_BLUE: case WX_GL_MIN_ACCUM_BLUE:
pfd.cAccumBits = (pfd.cAccumBits + pfd.cAccumBits += (pfd.cAccumBlueBits = attribList[arg++]);
(pfd.cAccumBlueBits = attribList[arg++]));
break; break;
case WX_GL_MIN_ACCUM_ALPHA: case WX_GL_MIN_ACCUM_ALPHA:
pfd.cAccumBits = (pfd.cAccumBits + pfd.cAccumBits += (pfd.cAccumAlphaBits = attribList[arg++]);
(pfd.cAccumAlphaBits = attribList[arg++]));
break; break;
} }
} }
@ -421,14 +428,13 @@ wxGLCanvas::ChooseMatchingPixelFormat(HDC hdc,
1, // version 1, // version
PFD_SUPPORT_OPENGL | PFD_SUPPORT_OPENGL |
PFD_DRAW_TO_WINDOW | PFD_DRAW_TO_WINDOW |
PFD_DOUBLEBUFFER, // support double-buffering PFD_DOUBLEBUFFER, // use double-buffering by default
PFD_TYPE_RGBA, // color type PFD_TYPE_RGBA, // default pixel type
16, // preferred color depth 0, // preferred color depth (don't care)
0, 0, 0, 0, 0, 0, // color bits (ignored) 0, 0, 0, 0, 0, 0, // color bits and shift bits (ignored)
0, // no alpha buffer 0, 0, // alpha bits and shift (ignored)
0, // alpha bits (ignored) 0, // accumulation total bits
0, // no accumulation buffer 0, 0, 0, 0, // accumulator RGBA bits (not used)
0, 0, 0, 0, // accumulator bits (ignored)
16, // depth buffer 16, // depth buffer
0, // no stencil buffer 0, // no stencil buffer
0, // no auxiliary buffers 0, // no auxiliary buffers