OpenGl Fullscreen?



  • Wie bekomme ich meine OpenGl-Anwendung im Vollbildmodus zu sehen?



  • OpenGL hat mal gar nichts damit zu tun. Das musst du mit deinem OS absprechen...



  • Wie mach ich das denn?



  • FS schrieb:

    Wie mach ich das denn?

    Unter welchem OS?



  • Windows



  • if ( m_settings.fullscreen )
        {
            DEVMODE dmVideoMode;                            
            memset(&dmVideoMode,0,sizeof(dmVideoMode));             
            dmVideoMode.dmSize       = sizeof(dmVideoMode);         
            dmVideoMode.dmPelsWidth  = static_cast<DWORD>(m_settings.width);
            dmVideoMode.dmPelsHeight = static_cast<DWORD>(m_settings.height);
            dmVideoMode.dmFields     = DM_PELSWIDTH|DM_PELSHEIGHT;
    
            int code = ::ChangeDisplaySettings(&dmVideoMode, CDS_FULLSCREEN);
            if ( code != DISP_CHANGE_SUCCESSFUL )
            {
                std::basic_string<wchar_t> err = L"ChangeDisplaySettings() failed: ";
                switch(code)
                {
                case DISP_CHANGE_BADDUALVIEW:
                    {
                        err += L"DISP_CHANGE_BADDUALVIEW";
                        break;
                    }
                case DISP_CHANGE_BADFLAGS:
                    {
                        err += L"DISP_CHANGE_BADFLAGS";
                        break;
                    }
                case DISP_CHANGE_BADMODE:
                    {
                        err += L"DISP_CHANGE_BADMODE";
                        break;
                    }
                case DISP_CHANGE_BADPARAM:
                    {
                        err += L"DISP_CHANGE_BADPARAM";
                        break;
                    }
                case DISP_CHANGE_FAILED:
                    {
                        err += L"DISP_CHANGE_FAILED";
                        break;
                    }
                case DISP_CHANGE_RESTART:
                    {
                        err += L"DISP_CHANGE_RESTART";
                        break;
                    }
                }
                ::MessageBox(HWND_DESKTOP, err.c_str(), L"NightLight2D", MB_ICONERROR|MB_OK);
                ::UnregisterClass(getWindowClassName(), m_hInstance);
                ::DestroyWindow((HWND)m_window_handle);
                m_quitEvent();
                return false;
            }
        }
    

    Gehört aber eher ins WinAPI Forum^^.
    OpenGL selber kennt weder Fenster noch Vollbild,nur seinen Context.
    http://code.google.com/p/nightlight2d/source/browse/NightLightDLL/NLWindowWin32.cpp#136
    Und nicht vergessen den Style vorher auf WS_POPUP zu setzen am besten.



  • Ich habe jetzt glaube ich eine andere Lösung gefunden:

    hWnd = CreateWindowA("Test",
    					"Test",
    					WS_OVERLAPPEDWINDOW,
    					0,
    					0,
    					1920,
    					1080,
    					NULL,
    					NULL,
    					hInstance,
    					NULL);
    
    ShowWindow(hWnd, nCmdShow);
    
    LONG_PTR style = GetWindowLongPtr(hWnd, GWL_STYLE);
    tempStyle &= ~WS_OVERLAPPEDWINDOW;
    SetWindowLongPtr(hWnd, GWL_STYLE, style);
    
    ShowWindow(hWindow, SW_MAXIMIZE);
    

    Kann man das so machen?



  • PS: Zeile 16 müsste natürlich so lauten:

    style &= ~WS_OVERLAPPEDWINDOW;
    

Log in to reply