From 345b59f6f5b49f1837735004082e9ab7757bcd41 Mon Sep 17 00:00:00 2001 From: Ronald Kinard Date: Wed, 23 Jul 2014 21:45:36 -0500 Subject: [PATCH] sdl2: code cleanup --- src/sdl2/i_video.c | 169 +++------------------------------------------ src/sdl2/ogl_sdl.c | 78 ++------------------- src/sdl2/ogl_sdl.h | 2 +- 3 files changed, 14 insertions(+), 235 deletions(-) diff --git a/src/sdl2/i_video.c b/src/sdl2/i_video.c index 038e6347..66982542 100644 --- a/src/sdl2/i_video.c +++ b/src/sdl2/i_video.c @@ -216,7 +216,7 @@ static void SDLSetMode(INT32 width, INT32 height, SDL_bool fullscreen) if (rendermode == render_opengl) { - OglSdlSurface(vid.width, vid.height, (USE_FULLSCREEN)); + OglSdlSurface(vid.width, vid.height); } if (rendermode == render_soft) @@ -1318,17 +1318,6 @@ void I_UpdateNoBlit(void) SDL_RenderPresent(renderer); } } -#if 0 -#ifdef HWRENDER - if (rendermode != render_soft) - OglSdlFinishUpdate(cv_vidwait.value); - else -#endif - if (vidSurface->flags&SDL_DOUBLEBUF) - SDL_Flip(vidSurface); - else if (exposevideo) - SDL_UpdateRect(vidSurface, 0, 0, 0, 0); -#endif exposevideo = SDL_FALSE; } @@ -1666,112 +1655,6 @@ INT32 VID_SetMode(INT32 modeNum) } return SDL_TRUE; -#if 0 - SDLdoUngrabMouse(); - vid.recalc = true; - BitsPerPixel = (Uint8)cv_scr_depth.value; - //vid.bpp = BitsPerPixel==8?1:2; - // Window title - SDL_WM_SetCaption("SRB2 "VERSIONSTRING, "SRB2"); - - if (render_soft == rendermode) - { - //Alam: SDL_Video system free vidSurface for me - if (vid.buffer) free(vid.buffer); - vid.buffer = NULL; - if (bufSurface) SDL_FreeSurface(bufSurface); - bufSurface = NULL; - } - - if (USE_FULLSCREEN) - { - if (numVidModes != -1) - { - modeNum += firstEntry; - vid.width = modeList[modeNum]->w; - vid.height = modeList[modeNum]->h; - } - else - { - vid.width = windowedModes[modeNum][0]; - vid.height = windowedModes[modeNum][1]; - } - if (render_soft == rendermode) - { - SDLSetMode(vid.width, vid.height, BitsPerPixel, surfaceFlagsF); - - if (!vidSurface) - { - cv_fullscreen.value = 0; - modeNum = VID_GetModeForSize(vid.width,vid.height); - vid.width = windowedModes[modeNum][0]; - vid.height = windowedModes[modeNum][1]; - SDLSetMode(vid.width, vid.height, BitsPerPixel, surfaceFlagsW); - if (!vidSurface) - I_Error("Could not set vidmode: %s\n",SDL_GetError()); - } - } -#ifdef HWRENDER - else // (render_soft != rendermode) - { - if (!OglSdlSurface(vid.width, vid.height, true)) - { - cv_fullscreen.value = 0; - modeNum = VID_GetModeForSize(vid.width,vid.height); - vid.width = windowedModes[modeNum][0]; - vid.height = windowedModes[modeNum][1]; - if (!OglSdlSurface(vid.width, vid.height,false)) - I_Error("Could not set vidmode: %s\n",SDL_GetError()); - } - - realwidth = (Uint16)vid.width; - realheight = (Uint16)vid.height; - } -#endif - } - else //(cv_fullscreen.value) - { - vid.width = windowedModes[modeNum][0]; - vid.height = windowedModes[modeNum][1]; - - if (render_soft == rendermode) - { - SDLSetMode(vid.width, vid.height, BitsPerPixel, surfaceFlagsW); - if (!vidSurface) - I_Error("Could not set vidmode: %s\n",SDL_GetError()); - } -#ifdef HWRENDER - else //(render_soft != rendermode) - { - if (!OglSdlSurface(vid.width, vid.height, false)) - I_Error("Could not set vidmode: %s\n",SDL_GetError()); - realwidth = (Uint16)vid.width; - realheight = (Uint16)vid.height; - } -#endif - } - - vid.modenum = VID_GetModeForSize(vidSurface->w,vidSurface->h); - - if (render_soft == rendermode) - { - vid.rowbytes = vid.width*vid.bpp; - vid.direct = SDLGetDirect(); - vid.buffer = malloc(vid.rowbytes*vid.height*NUMSCREENS); - if (vid.buffer) memset(vid.buffer,0x00,vid.rowbytes*vid.height*NUMSCREENS); - else I_Error ("Not enough memory for video buffer\n"); - } - -#if 0 // broken - if (!cv_stretch.value && (float)vid.width/vid.height != ((float)BASEVIDWIDTH/BASEVIDHEIGHT)) - vid.height = (INT32)(vid.width * ((float)BASEVIDHEIGHT/BASEVIDWIDTH));// Adjust the height to match -#endif - I_StartupMouse(); - - SDLWMSet(); - - return true; -#endif } static SDL_bool Impl_CreateWindow(SDL_bool fullscreen) @@ -1790,30 +1673,10 @@ static SDL_bool Impl_CreateWindow(SDL_bool fullscreen) #ifdef HWRENDER if (rendermode == render_opengl) { - /* - * We want at least 1 bit R, G, and B, - * and at least 16 bpp. Why 1 bit? May be more? - */ - /*SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 1); - SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 1); - SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 1); - SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);*/ - window = SDL_CreateWindow("SRB2", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, realwidth, realheight, flags | SDL_WINDOW_OPENGL); if (window != NULL) { - /* - renderer = SDL_CreateRenderer(window, -1, 0); - if (renderer != NULL) - { - //SDL_RenderSetLogicalSize(renderer, BASEVIDWIDTH, BASEVIDHEIGHT); - sdlglcontext = SDL_GL_CreateContext(window); - SDL_GL_MakeCurrent(window, sdlglcontext); - } - else return SDL_FALSE; - */ - sdlglcontext = SDL_GL_CreateContext(window); SDL_GL_MakeCurrent(window, sdlglcontext); } @@ -2014,15 +1877,10 @@ void I_StartupGraphics(void) vid.height = BASEVIDHEIGHT; if (HWD.pfnInit(I_Error)) // let load the OpenGL library { - OglSdlSurface(vid.width, vid.height, (USE_FULLSCREEN)); - - // Contrary to SDL1 implementation, all we need is a window and a GL context. - // No setting up a special surface to draw to. - // If the GL context was already made, we're good to go. - - /*if (!OglSdlSurface(vid.width, vid.height, (USE_FULLSCREEN))) - if (!OglSdlSurface(vid.width, vid.height, !(USE_FULLSCREEN))) - rendermode = render_soft;*/ + if (!OglSdlSurface(vid.width, vid.height)) + { + rendermode = render_soft; + } } else rendermode = render_soft; @@ -2033,19 +1891,6 @@ void I_StartupGraphics(void) if (render_soft == rendermode) { VID_SetMode(VID_GetModeForSize(BASEVIDWIDTH, BASEVIDHEIGHT)); -#if 0 - vid.width = BASEVIDWIDTH; - vid.height = BASEVIDHEIGHT; - SDLSetMode(vid.width, vid.height, USE_FULLSCREEN); - if (!vidSurface) - { - CONS_Printf(M_GetText("Could not set vidmode: %s\n") ,SDL_GetError()); - vid.rowbytes = 0; - graphics_started = true; - return; - } - Impl_VideoSetupBuffer(); -#endif } if (M_CheckParm("-nomousegrab")) mousegrabok = SDL_FALSE; @@ -2098,6 +1943,10 @@ void I_ShutdownGraphics(void) #ifdef HWRENDER if (GLUhandle) hwClose(GLUhandle); + if (sdlglcontext) + { + SDL_GL_DeleteContext(sdlglcontext); + } #endif SDL_QuitSubSystem(SDL_INIT_VIDEO); framebuffer = SDL_FALSE; diff --git a/src/sdl2/ogl_sdl.c b/src/sdl2/ogl_sdl.c index ec07d211..562eaf2a 100644 --- a/src/sdl2/ogl_sdl.c +++ b/src/sdl2/ogl_sdl.c @@ -150,12 +150,10 @@ boolean LoadGL(void) \return if true, changed video mode */ -boolean OglSdlSurface(INT32 w, INT32 h, boolean isFullscreen) +boolean OglSdlSurface(INT32 w, INT32 h) { INT32 cbpp; - //Uint32 OGLFlags; const GLvoid *glvendor = NULL, *glrenderer = NULL, *glversion = NULL; - (void)isFullscreen; //unused cbpp = cv_scr_depth.value < 16 ? 16 : cv_scr_depth.value; @@ -173,55 +171,18 @@ boolean OglSdlSurface(INT32 w, INT32 h, boolean isFullscreen) DBG_Printf("Extensions : %s\n", gl_extensions); oglflags = 0; -#ifdef _WIN32 - // BP: disable advenced feature that don't work on somes hardware - // Hurdler: Now works on G400 with bios 1.6 and certified drivers 6.04 - if (strstr(glrenderer, "810")) oglflags |= GLF_NOZBUFREAD; -#elif defined (unix) || defined (UNIXCOMMON) - // disable advanced features not working on somes hardware - if (strstr(glrenderer, "G200")) oglflags |= GLF_NOTEXENV; - if (strstr(glrenderer, "G400")) oglflags |= GLF_NOTEXENV; -#endif - DBG_Printf("oglflags : 0x%X\n", oglflags ); - -#ifdef USE_PALETTED_TEXTURE - if (isExtAvailable("GL_EXT_paletted_texture", gl_extensions)) - glColorTableEXT = SDL_GL_GetProcAddress("glColorTableEXT"); - else - glColorTableEXT = NULL; -#endif - -#ifdef USE_WGL_SWAP - if (isExtAvailable("WGL_EXT_swap_control", gl_extensions)) - wglSwapIntervalEXT = SDL_GL_GetProcAddress("wglSwapIntervalEXT"); - else - wglSwapIntervalEXT = NULL; -#else - if (isExtAvailable("GLX_SGI_swap_control", gl_extensions)) - glXSwapIntervalSGIEXT = SDL_GL_GetProcAddress("glXSwapIntervalSGI"); - else - glXSwapIntervalSGIEXT = NULL; -#endif - -#ifndef KOS_GL_COMPATIBILITY - if (isExtAvailable("GL_EXT_texture_filter_anisotropic", gl_extensions)) - pglGetIntegerv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &maximumAnisotropy); - else -#endif - maximumAnisotropy = 0; + maximumAnisotropy = 0; granisotropicmode_cons_t[1].value = maximumAnisotropy; + SDL_GL_SetSwapInterval(cv_vidwait.value ? 1 : 0); + SetModelView(w, h); SetStates(); pglClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); HWR_Startup(); -#ifdef KOS_GL_COMPATIBILITY - textureformatGL = GL_ARGB4444; -#else textureformatGL = cbpp > 16 ? GL_RGBA : GL_RGB5_A1; -#endif return true; } @@ -235,19 +196,6 @@ boolean OglSdlSurface(INT32 w, INT32 h, boolean isFullscreen) void OglSdlFinishUpdate(boolean waitvbl) { static boolean oldwaitvbl = false; - /* - if (oldwaitvbl != waitvbl) - { -#ifdef USE_WGL_SWAP - if (wglSwapIntervalEXT) - wglSwapIntervalEXT(waitvbl); -#else - if (glXSwapIntervalSGIEXT) - glXSwapIntervalSGIEXT(waitvbl); -#endif - } - oldwaitvbl = waitvbl;*/ - if (oldwaitvbl != waitvbl) { SDL_GL_SetSwapInterval(waitvbl ? 1 : 0); @@ -263,10 +211,6 @@ EXPORT void HWRAPI( OglSdlSetPalette) (RGBA_t *palette, RGBA_t *pgamma) UINT32 redgamma = pgamma->s.red, greengamma = pgamma->s.green, bluegamma = pgamma->s.blue; -#if 0 // changing the gamma to 127 is a bad idea - i = SDL_SetGamma(byteasfloat(redgamma), byteasfloat(greengamma), byteasfloat(bluegamma)); -#endif - if (i == 0) redgamma = greengamma = bluegamma = 0x7F; //Alam: cool for (i = 0; i < 256; i++) { myPaletteData[i].s.red = (UINT8)MIN((palette[i].s.red * redgamma) /127, 255); @@ -274,20 +218,6 @@ EXPORT void HWRAPI( OglSdlSetPalette) (RGBA_t *palette, RGBA_t *pgamma) myPaletteData[i].s.blue = (UINT8)MIN((palette[i].s.blue * bluegamma) /127, 255); myPaletteData[i].s.alpha = palette[i].s.alpha; } -#ifdef USE_PALETTED_TEXTURE - if (glColorTableEXT) - { - for (i = 0; i < 256; i++) - { - palette_tex[(3*i)+0] = palette[i].s.red; - palette_tex[(3*i)+1] = palette[i].s.green; - palette_tex[(3*i)+2] = palette[i].s.blue; - } - glColorTableEXT(GL_TEXTURE_2D, GL_RGB8, 256, GL_RGB, GL_UNSIGNED_BYTE, palette_tex); - } -#endif - // on a chang�de palette, il faut recharger toutes les textures - // jaja, und noch viel mehr ;-) Flush(); } diff --git a/src/sdl2/ogl_sdl.h b/src/sdl2/ogl_sdl.h index 583a27de..72f130a5 100644 --- a/src/sdl2/ogl_sdl.h +++ b/src/sdl2/ogl_sdl.h @@ -20,7 +20,7 @@ extern void *GLUhandle; -boolean OglSdlSurface(INT32 w, INT32 h, boolean isFullscreen); +boolean OglSdlSurface(INT32 w, INT32 h); void OglSdlFinishUpdate(boolean vidwait);