mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-26 14:01:45 +00:00
- Implement SDL2 into GZDoom (needs improvements).
Make also minor fixes. Now it compiles and runs fine for me, except for the invisible cursor in the menu (no idea why).
This commit is contained in:
parent
c9150497e3
commit
37321d1d48
2 changed files with 44 additions and 32 deletions
|
@ -1,8 +1,6 @@
|
|||
|
||||
// HEADER FILES ------------------------------------------------------------
|
||||
|
||||
#include <iostream>
|
||||
|
||||
#include "doomtype.h"
|
||||
|
||||
#include "templates.h"
|
||||
|
@ -48,6 +46,7 @@ extern IVideo *Video;
|
|||
// extern int vid_renderer;
|
||||
|
||||
EXTERN_CVAR (Float, Gamma)
|
||||
EXTERN_CVAR (Int, vid_adapter)
|
||||
EXTERN_CVAR (Int, vid_displaybits)
|
||||
EXTERN_CVAR (Int, vid_renderer)
|
||||
|
||||
|
@ -156,14 +155,19 @@ bool SDLGLVideo::NextMode (int *width, int *height, bool *letterbox)
|
|||
}
|
||||
else
|
||||
{
|
||||
SDL_Rect **modes = SDL_ListModes (NULL, SDL_FULLSCREEN|SDL_HWSURFACE);
|
||||
if (modes != NULL && modes[IteratorMode] != NULL)
|
||||
SDL_DisplayMode mode = {}, oldmode = {};
|
||||
if(IteratorMode != 0)
|
||||
SDL_GetDisplayMode(vid_adapter, IteratorMode-1, &oldmode);
|
||||
do
|
||||
{
|
||||
*width = modes[IteratorMode]->w;
|
||||
*height = modes[IteratorMode]->h;
|
||||
if (SDL_GetDisplayMode(vid_adapter, IteratorMode, &mode) != 0)
|
||||
return false;
|
||||
++IteratorMode;
|
||||
return true;
|
||||
}
|
||||
} while(mode.w == oldmode.w && mode.h == oldmode.h);
|
||||
|
||||
*width = mode.w;
|
||||
*height = mode.h;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
@ -182,11 +186,11 @@ DFrameBuffer *SDLGLVideo::CreateFrameBuffer (int width, int height, bool fullscr
|
|||
if (fb->Width == width &&
|
||||
fb->Height == height)
|
||||
{
|
||||
bool fsnow = (fb->Screen->flags & SDL_FULLSCREEN) != 0;
|
||||
bool fsnow = (SDL_GetWindowFlags (fb->Screen) & SDL_WINDOW_FULLSCREEN_DESKTOP) != 0;
|
||||
|
||||
if (fsnow != fullscreen)
|
||||
{
|
||||
SDL_WM_ToggleFullScreen (fb->Screen);
|
||||
SDL_SetWindowFullscreen (fb->Screen, fullscreen ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0);
|
||||
}
|
||||
return old;
|
||||
}
|
||||
|
@ -336,30 +340,37 @@ SDLGLFB::SDLGLFB (void *, int width, int height, int, int, bool fullscreen)
|
|||
return;
|
||||
}
|
||||
|
||||
|
||||
Screen = SDL_SetVideoMode (width, height,
|
||||
32,
|
||||
SDL_HWSURFACE|SDL_HWPALETTE|SDL_OPENGL | SDL_GL_DOUBLEBUFFER|SDL_ANYFORMAT|
|
||||
(fullscreen ? SDL_FULLSCREEN : 0));
|
||||
FString caption;
|
||||
caption.Format(GAMESIG " %s (%s)", GetVersionString(), GetGitTime());
|
||||
Screen = SDL_CreateWindow (caption,
|
||||
SDL_WINDOWPOS_UNDEFINED_DISPLAY(vid_adapter), SDL_WINDOWPOS_UNDEFINED_DISPLAY(vid_adapter),
|
||||
width, height, (fullscreen ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0)|SDL_WINDOW_OPENGL);
|
||||
|
||||
if (Screen == NULL)
|
||||
return;
|
||||
|
||||
m_supportsGamma = -1 != SDL_GetGammaRamp(m_origGamma[0], m_origGamma[1], m_origGamma[2]);
|
||||
|
||||
#if defined(__APPLE__)
|
||||
// Need to set title here because a window is not created yet when calling the same function from main()
|
||||
char caption[100];
|
||||
mysnprintf(caption, countof(caption), GAMESIG " %s (%s)", GetVersionString(), GetGitTime());
|
||||
SDL_WM_SetCaption(caption, NULL);
|
||||
#endif // __APPLE__
|
||||
GLContext = SDL_GL_CreateContext(Screen);
|
||||
if (GLContext == NULL)
|
||||
return;
|
||||
|
||||
m_supportsGamma = -1 != SDL_GetWindowGammaRamp(Screen, m_origGamma[0], m_origGamma[1], m_origGamma[2]);
|
||||
}
|
||||
|
||||
SDLGLFB::~SDLGLFB ()
|
||||
{
|
||||
if (m_supportsGamma)
|
||||
if (Screen)
|
||||
{
|
||||
SDL_SetGammaRamp(m_origGamma[0], m_origGamma[1], m_origGamma[2]);
|
||||
if (m_supportsGamma)
|
||||
{
|
||||
SDL_SetWindowGammaRamp(Screen, m_origGamma[0], m_origGamma[1], m_origGamma[2]);
|
||||
}
|
||||
|
||||
if (GLContext)
|
||||
{
|
||||
SDL_GL_DeleteContext(GLContext);
|
||||
}
|
||||
|
||||
SDL_DestroyWindow(Screen);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -386,7 +397,7 @@ bool SDLGLFB::CanUpdate ()
|
|||
|
||||
void SDLGLFB::SetGammaTable(WORD *tbl)
|
||||
{
|
||||
SDL_SetGammaRamp(&tbl[0], &tbl[256], &tbl[512]);
|
||||
SDL_SetWindowGammaRamp(Screen, &tbl[0], &tbl[256], &tbl[512]);
|
||||
}
|
||||
|
||||
bool SDLGLFB::Lock(bool buffered)
|
||||
|
@ -420,7 +431,7 @@ bool SDLGLFB::IsLocked ()
|
|||
|
||||
bool SDLGLFB::IsFullscreen ()
|
||||
{
|
||||
return (Screen->flags & SDL_FULLSCREEN) != 0;
|
||||
return (SDL_GetWindowFlags (Screen) & SDL_WINDOW_FULLSCREEN_DESKTOP) != 0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -443,6 +454,6 @@ void SDLGLFB::NewRefreshRate ()
|
|||
|
||||
void SDLGLFB::SwapBuffers()
|
||||
{
|
||||
SDL_GL_SwapBuffers ();
|
||||
SDL_GL_SwapWindow (Screen);
|
||||
}
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
|
||||
#include "hardware.h"
|
||||
#include "v_video.h"
|
||||
#include <SDL.h>
|
||||
#include "gl/system/gl_system.h"
|
||||
|
||||
EXTERN_CVAR (Float, dimamount)
|
||||
|
@ -70,9 +69,11 @@ protected:
|
|||
SDLGLFB () {}
|
||||
BYTE GammaTable[3][256];
|
||||
bool UpdatePending;
|
||||
|
||||
SDL_Surface *Screen;
|
||||
|
||||
|
||||
SDL_Window *Screen;
|
||||
|
||||
SDL_GLContext GLContext;
|
||||
|
||||
void UpdateColors ();
|
||||
|
||||
int m_Lock;
|
||||
|
|
Loading…
Reference in a new issue