Nicht exklusive grenzenlose Vollbildbildschirm mit SDL3 + OpenGL unter Windows 11 erzwingenC++

Programme in C++. Entwicklerforum
Anonymous
 Nicht exklusive grenzenlose Vollbildbildschirm mit SDL3 + OpenGL unter Windows 11 erzwingen

Post by Anonymous »

Erstellen eines randlosen OpenGL -Fensters mit SDL3 unter Windows bei der nativen Anzeigeauflösung führt dazu, dass das Fenster unerwartet in einen exklusiven Vollbildmodus wechselt. Hier ist ein MCVE: < /p>

Code: Select all

#include 

int main()
{
SDL_InitSubSystem(SDL_INIT_VIDEO);

SDL_WindowFlags flags = {};
flags |= SDL_WINDOW_OPENGL;
flags |= SDL_WINDOW_RESIZABLE;
flags |= SDL_WINDOW_BORDERLESS;

SDL_Window *w = SDL_CreateWindow("", 3440, 1440, flags); // use fullscreen resolution here
SDL_GLContext wCtx = SDL_GL_CreateContext(w);

while (true) {
SDL_Event event;
while (SDL_PollEvent(&event)) { }

SDL_GL_SwapWindow(w); // commenting this line solves the issue
}
}
Das erwartete Verhalten zeigt ein randloses Fenster an, das die native Bildschirmauflösung perfekt füllt (z. B. 3440x1440 ), verhält sich wie Standard -Randless -Vollbild -Fenstermodus:
Der gesamte Screen -Bildschirm, der gesamte Bildschirm, der gesamte Bildschirm, der den gesamten Aufgabenbereich, der den gesamten Aufgabenbar -Bereich, den gesamten Aufgabenbereich, den gesamten Aufgabenbereich, der den gesamten Aufgabenbereich, den gesamten Aufgabenbereich, den gesamten Bildschirm, der den gesamten Aufgabenbereich erstellt. /> Alt-Tabbing funktioniert reibungslos ohne Änderungen des Anzeigemodus. Modus beim ersten Aufruf an sdl_gl_swapwindow :

Es gibt einen kurzen Bildschirmflackern oder Blanking, was auf eine Änderung des Display-Modus oder eine Übernahme von Swapchain-Übernahmen hinweist. /> < /ul>

Ich habe das Problem als Problem für SDL gemeldet, aber das Problem wurde mit der folgenden Antwort geschlossen: < /p>

Dies ist das Verhalten des OpenGL -Treibers, um die Leistung zu erhöhen, und nicht etwas SDL kann. Versucht mehrere Dinge:

Erstellen des Fensters mit etwas kleineren Abmessungen (z. B. Modus. Sdl_setwindowfulscreen (Fenster, True) Auch führt zu demselben unerwünschten exklusiven Vollbildverhalten. Sdl_gl_setswapinterval (0/1/-1) verhindern nicht Verhinderung dieses Verhaltens.SetWindowLongPtr(m_handle, GWL_STYLE, WS_OVERLAPPED | WS_CLIPCHILDREN | WS_CLIPSIBLINGS);
SetWindowLongPtr(m_handle, GWL_EXSTYLE, WS_EX_APPWINDOW);

SetWindowPos(m_handle, HWND_TOP, left, top, width, height,
SWP_FRAMECHANGED | SWP_NOOWNERZORDER | SWP_SHOWWINDOW);
< /code>
Die obige Problemumgehung ist jedoch spröde, stützt sich auf undokumentiertes Verhalten und muss-vor allem-das Fenster beim Wechsel zwischen Fenster und nicht exklusivem Vollbildmodus nachgebildet werden. /> Sogar explizite Verwendung von Win32 -API ist akzeptabel. < /p>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post