wxGWindow::wxGWindow( const GWindowSettings& _settings, wxWindow* parent, wxWindowID id) : invisible(wxCURSOR_BLANK), arrow(wxCURSOR_ARROW) { // For now a crude check to initialize once per process. if (sdlKeyMap.size() == 0) { initWXKeys(); } Array<int> attribList; makeAttribList(_settings, attribList); settings = _settings; wxPoint pos(_settings.x, _settings.y); wxSize size(_settings.width, _settings.height); clientX = _settings.x; clientY = _settings.y; relativeX = 0; relativeY = 0; window = new wxG3DCanvas( this, parent, id, pos, size, 0, "WxWindow", attribList.getCArray(), wxNullPalette); glGetIntegerv(GL_DEPTH_BITS, &settings.depthBits); glGetIntegerv(GL_STENCIL_BITS, &settings.stencilBits); int redBits, greenBits, blueBits; glGetIntegerv(GL_RED_BITS, &redBits); glGetIntegerv(GL_GREEN_BITS, &greenBits); glGetIntegerv(GL_BLUE_BITS, &blueBits); settings.rgbBits = iMin(redBits, iMin(greenBits, blueBits)); glGetIntegerv(GL_ALPHA_BITS, &settings.alphaBits); if (window->IsTopLevel()) { window->SetClientSize(_settings.width, _settings.height); } if (settings.center) { window->Center(); } if (! settings.visible) { window->Hide(); } window->GetPosition(&settings.x, &settings.y); window->GetClientSize(&settings.width, &settings.height); }
int GHOST_ContextWGL::_choose_pixel_format_arb_2( bool stereoVisual, int numOfAASamples, bool needAlpha, bool needStencil, bool sRGB, int swapMethod) { std::vector<int> iAttributes; int iPixelFormat = 0; int samples; // guard against some insanely high number of samples if (numOfAASamples > 64) { fprintf(stderr, "Warning! Clamping number of samples to 64.\n"); samples = 64; } else { samples = numOfAASamples; } // request a format with as many samples as possible, but not more than requested while (samples >= 0) { makeAttribList( iAttributes, stereoVisual, samples, swapMethod, needAlpha, needStencil, sRGB); UINT nNumFormats; WIN32_CHK(wglChoosePixelFormatARB(m_hDC, &(iAttributes[0]), NULL, 1, &iPixelFormat, &nNumFormats)); /* total number of formats that match (regardless of size of iPixelFormat array) * see: WGL_ARB_pixel_format extension spec */ if (nNumFormats > 0) break; /* if not reset, then the state of iPixelFormat is undefined after call to wglChoosePixelFormatARB * see: WGL_ARB_pixel_format extension spec */ iPixelFormat = 0; samples--; } // check how many samples were actually gotten if (iPixelFormat != 0) { int iQuery[] = { WGL_SAMPLES_ARB }; int actualSamples; wglGetPixelFormatAttribivARB(m_hDC, iPixelFormat, 0, 1, iQuery, &actualSamples); if (actualSamples != numOfAASamples) { fprintf(stderr, "Warning! Unable to find a multisample pixel format that supports exactly %d samples. " "Substituting one that uses %d samples.\n", numOfAASamples, actualSamples); m_numOfAASamples = actualSamples; // set context property to actual value } } return iPixelFormat; }