Beispiel #1
0
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;
}