Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/dosbox-staging/dosbox-staging.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/hardware/voodoo_opengl.cpp')
-rw-r--r--src/hardware/voodoo_opengl.cpp33
1 files changed, 23 insertions, 10 deletions
diff --git a/src/hardware/voodoo_opengl.cpp b/src/hardware/voodoo_opengl.cpp
index 4f4cfd20d..18da2a781 100644
--- a/src/hardware/voodoo_opengl.cpp
+++ b/src/hardware/voodoo_opengl.cpp
@@ -62,10 +62,15 @@ static UINT32 ogl_texture_index = 1;
/* texture cache buffer */
UINT32 texrgb[256*256];
+#ifdef __GNUC__
+#pragma GCC diagnostic ignored "-Wint-to-void-pointer-cast"
+#endif
/* texture address map */
std::map <const UINT32, ogl_texmap> textures[2];
+bool GFX_IsFullScreenSetting();
+SDL_Window* GFX_GetSDLWindow(void);
SDL_Window* GFX_SetSDLWindowMode(uint16_t width, uint16_t height, SCREEN_TYPES screenType);
static void ogl_get_depth(voodoo_state* VV, INT32 ITERZ, INT64 ITERW, INT32 *depthval, INT32 *out_wfloat)
@@ -918,9 +923,9 @@ void ogl_shaders(const poly_extra_data *extra) {
/* shaders extensions not loaded */
if (!glCreateShaderObjectARB) return;
- UINT32 FBZMODE = extra->r_fbzMode;
- UINT32 FOGMODE = extra->r_fogMode;
- UINT32 texcount = extra->texcount;
+ //UINT32 FBZMODE = extra->r_fbzMode;
+ UINT32 FOGMODE = (UINT32)extra->r_fogMode;
+ UINT32 texcount = (UINT32)extra->texcount;
/* build a new shader program */
if (!extra->info->shader_ready) {
@@ -1106,8 +1111,8 @@ void voodoo_ogl_draw_triangle(poly_extra_data *extra) {
td[0].enable = false;
td[1].enable = false;
- UINT32 ALPHAMODE = extra->r_alphaMode;
- UINT32 FBZMODE = extra->r_fbzMode;
+ UINT32 ALPHAMODE = (UINT32)extra->r_alphaMode;
+ UINT32 FBZMODE = (UINT32)extra->r_fbzMode;
ogl_get_vertex_data(v->fbi.ax, v->fbi.ay, (void*)extra, &vd[0]);
@@ -1438,7 +1443,7 @@ void voodoo_ogl_draw_pixel_pipeline(int x, int y, int r, int g, int b) {
}
-void voodoo_ogl_clip_window(voodoo_state *v) {
+void voodoo_ogl_clip_window(voodoo_state *) {
/* VOGL_ClearBeginMode();
int sx = (v->reg[clipLeftRight].u >> 16) & 0x3ff;
@@ -1481,7 +1486,7 @@ void voodoo_ogl_fastfill(void) {
bool scissors_needed = true;
if ((sx == 0) && (sy == 0)) {
- if ((ex == v->fbi.width) && (ey == v->fbi.height)) scissors_needed = false;
+ if ((ex == (int)v->fbi.width) && (ey == (int)v->fbi.height)) scissors_needed = false;
}
sx = (sx* new_width) / v->fbi.width;
@@ -1495,7 +1500,7 @@ void voodoo_ogl_fastfill(void) {
}
- Bit32u clear_mask=0;
+ uint32_t clear_mask=0;
if (FBZMODE_RGB_BUFFER_MASK(v->reg[fbzMode].u)) {
clear_mask|=GL_COLOR_BUFFER_BIT;
@@ -1642,8 +1647,6 @@ void voodoo_ogl_reset_videomode(void) {
GFX_TearDown();
- bool full_sdl_restart = true; // make dependent on surface=opengl
-
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
@@ -1673,12 +1676,20 @@ void voodoo_ogl_reset_videomode(void) {
if (GFX_LazyFullscreenRequested()) GFX_SwitchFullscreenNoReset();
+ int w = -1, h = -1;
+ SDL_GetWindowSize(GFX_GetSDLWindow(), &w, &h);
+ if (w > -1 && h > -1 && ((int)new_width != w || (int)new_height != h)) {
+ new_height = h;
+ new_width = w;
+ }
SDL_Window *window = GFX_SetSDLWindowMode(new_width, new_height, SCREEN_OPENGL);
if (window != NULL)
ogl_surface = SDL_GetWindowSurface(window);
if (ogl_surface == NULL)
E_Exit("VOODOO: opengl init error");
+ if (GFX_IsFullScreenSetting() && !GFX_IsFullscreen())
+ GFX_SwitchFullScreen();
GFX_SwitchLazyFullscreen(true);
//GFX_UpdateSDLCaptureState();
@@ -1825,6 +1836,8 @@ void voodoo_ogl_leave(bool leavemode) {
LOG_MSG("VOODOO: OpenGL: quit");
GFX_SwitchLazyFullscreen(false);
+ if (GFX_IsFullScreenSetting() && !GFX_IsFullscreen())
+ GFX_SwitchFullScreen();
if (ogl_surface != NULL) {
SDL_FreeSurface(ogl_surface);
ogl_surface = NULL;