Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

3Dfx voodoo emulation with output=surface in fullscreen mode disables ALT+TAB #476

Closed
joncampbell123 opened this issue Feb 2, 2018 · 1 comment

Comments

@joncampbell123
Copy link
Owner

joncampbell123 commented Feb 2, 2018

Voodoo OpenGL emulation won't let you enter fullscreen mode when the overlay is active.

However if you were fullscreen when Voodoo emulation started, it overtakes the screen, changes your display to fit the 3Dfx video mode, and does not let you ALT+TAB out.

Though the initial report is on Windows, the behavior also happens on Linux. It's rather obnoxious to see your 1920x1080 desktop left in a 640x480 mode when it does break out with a segfault.

The initial report came from the SDL 1.x async windows hack, but testing shows it's a basic problem to SDL 1.x builds in general.

Fixes to do:

  • Remove fullscreen support. Voodoo OpenGL emulation needs to init by leaving fullscreen mode then setting up the OpenGL surface for the Voodoo overlay.
  • The Voodoo overlay should NOT take keyboard focus away from the emulator window, EVER. Nor should it ever capture the mouse and keyboard. It's up to the user to capture/release the mouse.

Future thoughts:

  • Does OpenGL-based emulation work on Windows with output=direct3d?
  • Can we direct OpenGL output to a texture, which then gets stretched to the surface to fit the window, rather than direct to the window, if the window is scaled in any way (including fullscreen)?
  • I'd rather not deal with the potential rendering problems at this time involved with translating Voodoo OpenGL geometry to scale up. I don't think the 3Dfx rendering process is sufficiently abstracted away from the API to allow it. This isn't like scaling up Nintendo 64 geometry.
  • But if the user has not resized the window, and not fullscreen, then the code should go back to 1:1 direct rendering to the window.
@joncampbell123
Copy link
Owner Author

For the time being, it's safest to just fix the code to set the fixed 3Dfx video mode, disable resize while visible, and move on.

I seem to have fixed the code for the non-async windows SDL 1.x build. It may have carried over into the async build, which I will test now.

The code has been fixed up to absolutely prevent 3Dfx OpenGL emulation from going fullscreen or allowing resize.

To answer the question, 3Dfx OpenGL emulation requires output=opengl.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant