Sprawa wygląda tak, że w Fairtrisie mam zaimplementowany ekskluzywny tryb wideo (opcjonalny). Jeśli jest on aktywny, okno gry ma rozmiar zgodny z rozdzielczością ekranu. Klatka zawsze jest renderowana na małym, tylnum buforze (tekstura SDL), a na koniec ta tekstura jest renderowana w oknie:

Kopiuj
procedure TGame.UpdateWindow();
begin
  SDL_RenderCopy(Window.Renderer, Buffers.Native, nil, @Buffers.Client);
  SDL_RenderPresent(Window.Renderer);
end;

Wszystko standardowo, nie ma tutaj żadnych cudów. Problem jednak polega na tym, że jeśli tryb wideo jest aktywny:

Kopiuj
SDL_SetWindowFullScreen(Window.Window, SDL_WINDOW_FULLSCREEN);

to jeśli zrobię zrzut ekranu przyciskiem PrtSc, to ten zrzut ekranu wychodzi cały czarny. Dziś dostałem zgłoszenie od jednego gracza, że nie da się nagrywać zawartości okna za pomocą OBS (choć nie napisał jakiego typu źródło próbował przechwytywać — pewnie zwyczajnie zawartość okna).

Wiem że nie jest to problem unikalny, bo dawniej podobną sytuację napotkałem w przypadku innych gier. Problem ten nie występuje, jeśli gra działa w trybie okienkowym, bez względu na to czy okno zajmuje cały ekran czy jest mniejsze — można robić zrzuty i przechwytywać okno w OBS.

Czy ktoś wie jak działa ekskluzywny tryb wideo i wie, dlaczego po jego aktywacji system nie ma dostępu do zawartości okna (na potrzeby zrzutu ekranu)? Gdzie jest przechowywana zawartość okna i dlaczego nie da się do niej dostać?

Edit: jakby co to nie mam żadnego problemu z kodem źródłowym, nie potrzebuję go naprawiać, bo działa prawidłowo. Chodzi mi tylko o zrozumienie dlaczego tak się dzieje z tymi zrzutami ekranu i przechwytywaniem.