From 2c41876dd9913c2a49cd044a805df54915b95f0f Mon Sep 17 00:00:00 2001 From: gameblabla Date: Sat, 26 Dec 2020 08:53:03 +0100 Subject: Fix issue wit pitch being doubled by 2. Change all of the code accordingly and simplify it. This was made as to allocate less memory than needed, improve the speed of the scaler code and make it more suitable for IPU mode. --- shell/video/gcw0/video_blit.c | 106 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 shell/video/gcw0/video_blit.c (limited to 'shell/video/gcw0/video_blit.c') diff --git a/shell/video/gcw0/video_blit.c b/shell/video/gcw0/video_blit.c new file mode 100644 index 0000000..da72224 --- /dev/null +++ b/shell/video/gcw0/video_blit.c @@ -0,0 +1,106 @@ +/* Cygne + * + * Copyright notice for this file: + * Copyright (C) 2002 Dox dox@space.pl + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include +#include +#include +#include +#include +#include "main.h" +#include "snes9x.h" +#include "soundux.h" +#include "memmap.h" +#include "apu.h" +#include "cheats.h" +#include "display.h" +#include "gfx.h" +#include "cpuexec.h" +#include "spc7110.h" +#include "srtc.h" +#include "sa1.h" +#include "scaler.h" + +#include "video_blit.h" +#include "scaler.h" +#include "config.h" + + +SDL_Surface *sdl_screen, *backbuffer; + +uint32_t width_of_surface; +uint32_t* Draw_to_Virtual_Screen; + +#ifndef SDL_TRIPLEBUF +#define SDL_TRIPLEBUF SDL_DOUBLEBUF +#endif + +#define SDL_FLAGS SDL_HWSURFACE | SDL_TRIPLEBUF + +void Init_Video() +{ + SDL_Init( SDL_INIT_VIDEO ); + + SDL_ShowCursor(0); + + sdl_screen = SDL_SetVideoMode(640, 480, 16, SDL_FLAGS); + + backbuffer = SDL_CreateRGBSurface(SDL_SWSURFACE, 320, 240, 16, 0,0,0,0); + + Set_Video_InGame(); +} + +void Set_Video_Menu() +{ + sdl_screen = SDL_SetVideoMode(320, 240, 16, SDL_FLAGS); +} + +void Set_Video_InGame() +{ + sdl_screen = SDL_SetVideoMode(IPPU.RenderedScreenWidth, IPPU.RenderedScreenHeight, 16, SDL_FLAGS); +} + +void Video_Close() +{ + if (sdl_screen) SDL_FreeSurface(sdl_screen); + if (backbuffer) SDL_FreeSurface(backbuffer); + SDL_Quit(); +} + +void Update_Video_Menu() +{ + SDL_BlitSurface(backbuffer, NULL, sdl_screen, NULL); + SDL_Flip(sdl_screen); +} + +void Update_Video_Ingame() +{ + uint32_t *s, *d; + uint32_t h, w; + uint8_t PAL = !!(Memory.FillRAM[0x2133] & 4); + + if (SDL_LockSurface(sdl_screen) == 0) + { + if (IPPU.RenderedScreenWidth != sdl_screen->w || IPPU.RenderedScreenHeight != sdl_screen->h) Set_Video_InGame(); + memcpy(sdl_screen->pixels, GFX.Screen, (IPPU.RenderedScreenWidth * IPPU.RenderedScreenHeight) * 2); + SDL_UnlockSurface(sdl_screen); + } + SDL_Flip(sdl_screen); +} -- cgit v1.2.3