From 3e499eb9bad781e415fa416a8a3a0e1e4e43e25d Mon Sep 17 00:00:00 2001 From: OBattler Date: Thu, 4 Oct 2018 03:40:32 +0200 Subject: [PATCH] And two more in win/. --- src/win/startblit.fnd | 80 -------- src/win/win_sdl.c.bak | 448 ------------------------------------------ 2 files changed, 528 deletions(-) delete mode 100644 src/win/startblit.fnd delete mode 100644 src/win/win_sdl.c.bak diff --git a/src/win/startblit.fnd b/src/win/startblit.fnd deleted file mode 100644 index ff7b555f4..000000000 --- a/src/win/startblit.fnd +++ /dev/null @@ -1,80 +0,0 @@ - ----------- 86BOX.MANIFEST - ----------- 86BOX.RC - ----------- MAKEFILE.MINGW - ----------- PCAP_IF.RC - ----------- PLAT_DIR.H - ----------- RESOURCE.H - ----------- STARTBLIT.FND - ----------- WIN.C - startblit(); - startblit(); - startblit(); -startblit(void) - ----------- WIN.H - ----------- WIN_ABOUT.C - ----------- WIN_CDROM.C - ----------- WIN_CRASHDUMP.C - ----------- WIN_D2D.CPP - ----------- WIN_D2D.H - ----------- WIN_D3D.CPP - ----------- WIN_D3D.H - ----------- WIN_DDRAW.CPP - ----------- WIN_DDRAW.H - ----------- WIN_DEVCONF.C - ----------- WIN_DIALOG.C - ----------- WIN_DYNLD.C - ----------- WIN_JOYSTICK.CPP - ----------- WIN_JSCONF.C - ----------- WIN_KEYBOARD.C - ----------- WIN_MIDI.C - ----------- WIN_MOUSE.CPP - ----------- WIN_NEW_FLOPPY.C - ----------- WIN_OPENDIR.C - ----------- WIN_SDL.C - ----------- WIN_SDL.C.BAK - ----------- WIN_SDL.H - ----------- WIN_SERIAL.C - ----------- WIN_SETTINGS.C - ----------- WIN_SND_GAIN.C - ----------- WIN_STBAR.C - ----------- WIN_THREAD.C - ----------- WIN_UI.C - startblit(); - startblit(); diff --git a/src/win/win_sdl.c.bak b/src/win/win_sdl.c.bak deleted file mode 100644 index 479d0103a..000000000 --- a/src/win/win_sdl.c.bak +++ /dev/null @@ -1,448 +0,0 @@ -/* - * 86Box A hypervisor and IBM PC system emulator that specializes in - * running old operating systems and software designed for IBM - * PC systems and compatibles from 1981 through fairly recent - * system designs based on the PCI bus. - * - * This file is part of the 86Box distribution. - * - * Rendering module for libSDL2 - * - * NOTE: Given all the problems reported with FULLSCREEN use of SDL, - * we will not use that, but, instead, use a new window which - * coverrs the entire desktop. - * - * Version: @(#)win_sdl.c 1.0.0 2018/05/26 - * - * Authors: Fred N. van Kempen, - * Michael Drüing, - * - * Copyright 2018 Fred N. van Kempen. - * Copyright 2018 Michael Drüing. - * - * Redistribution and use in source and binary forms, with - * or without modification, are permitted provided that the - * following conditions are met: - * - * 1. Redistributions of source code must retain the entire - * above notice, this list of conditions and the following - * disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the - * following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names - * of its contributors may be used to endorse or promote - * products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#define UNICODE -#define WIN32_LEAN_AND_MEAN -#include -#include -#include -#include -#include "../86box.h" -#include "../device.h" -#include "../plat.h" -#include "../plat_dynld.h" -#include "../video/video.h" -#include "win.h" -#include "win_sdl.h" - - -#define PATH_SDL_DLL "sdl2.dll" - - -static void *sdl_handle = NULL; /* handle to libSDL2 DLL */ -static void *sdl_win = NULL; -static void *sdl_render = NULL; -static void *sdl_tex = NULL; -static HWND sdl_hwnd = NULL; -static int sdl_w, sdl_h; - - -typedef struct { - int16_t x, y; - uint16_t w, h; -} SDL_Rect; - -typedef struct SDL_version { - uint8_t major; - uint8_t minor; - uint8_t patch; -} SDL_version; - -#define SDL_INIT_VIDEO 0x00000020 - -typedef enum -{ - SDL_RENDERER_SOFTWARE = 0x00000001, /**< The renderer is a software fallback */ - SDL_RENDERER_ACCELERATED = 0x00000002, /**< The renderer uses hardware - acceleration */ - SDL_RENDERER_PRESENTVSYNC = 0x00000004, /**< Present is synchronized - with the refresh rate */ - SDL_RENDERER_TARGETTEXTURE = 0x00000008 /**< The renderer supports - rendering to texture */ -} SDL_RendererFlags; - -typedef enum -{ - SDL_TEXTUREACCESS_STATIC, /**< Changes rarely, not lockable */ - SDL_TEXTUREACCESS_STREAMING /**< Changes frequently, lockable */ -} SDL_TextureAccess; - -/** Pixel type. */ -enum -{ - SDL_PIXELTYPE_UNKNOWN, - SDL_PIXELTYPE_INDEX1, - SDL_PIXELTYPE_INDEX4, - SDL_PIXELTYPE_INDEX8, - SDL_PIXELTYPE_PACKED8, - SDL_PIXELTYPE_PACKED16, - SDL_PIXELTYPE_PACKED32, - SDL_PIXELTYPE_ARRAYU8, - SDL_PIXELTYPE_ARRAYU16, - SDL_PIXELTYPE_ARRAYU32, - SDL_PIXELTYPE_ARRAYF16, - SDL_PIXELTYPE_ARRAYF32 -}; - -/** Bitmap pixel order, high bit -> low bit. */ -enum -{ - SDL_BITMAPORDER_NONE, - SDL_BITMAPORDER_4321, - SDL_BITMAPORDER_1234 -}; - -/** Packed component order, high bit -> low bit. */ -enum -{ - SDL_PACKEDORDER_NONE, - SDL_PACKEDORDER_XRGB, - SDL_PACKEDORDER_RGBX, - SDL_PACKEDORDER_ARGB, - SDL_PACKEDORDER_RGBA, - SDL_PACKEDORDER_XBGR, - SDL_PACKEDORDER_BGRX, - SDL_PACKEDORDER_ABGR, - SDL_PACKEDORDER_BGRA -}; - -/** Array component order, low byte -> high byte. */ -/* !!! FIXME: in 2.1, make these not overlap differently with - !!! FIXME: SDL_PACKEDORDER_*, so we can simplify SDL_ISPIXELFORMAT_ALPHA */ -enum -{ - SDL_ARRAYORDER_NONE, - SDL_ARRAYORDER_RGB, - SDL_ARRAYORDER_RGBA, - SDL_ARRAYORDER_ARGB, - SDL_ARRAYORDER_BGR, - SDL_ARRAYORDER_BGRA, - SDL_ARRAYORDER_ABGR -}; - -/** Packed component layout. */ -enum -{ - SDL_PACKEDLAYOUT_NONE, - SDL_PACKEDLAYOUT_332, - SDL_PACKEDLAYOUT_4444, - SDL_PACKEDLAYOUT_1555, - SDL_PACKEDLAYOUT_5551, - SDL_PACKEDLAYOUT_565, - SDL_PACKEDLAYOUT_8888, - SDL_PACKEDLAYOUT_2101010, - SDL_PACKEDLAYOUT_1010102 -}; - -#define SDL_DEFINE_PIXELFORMAT(type, order, layout, bits, bytes) \ - ((1 << 28) | ((type) << 24) | ((order) << 20) | ((layout) << 16) | \ - ((bits) << 8) | ((bytes) << 0)) - -#define SDL_PIXELFORMAT_ARGB8888 SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB, SDL_PACKEDLAYOUT_8888, 32, 4) - - -/* Pointers to the real functions. */ -static void (*sdl_GetVersion)(void *ver); -static char *const (*sdl_GetError)(void); -static int (*sdl_Init)(uint32_t flags); -static void (*sdl_Quit)(void); -static void *(*sdl_CreateWindowFrom)(const void *data); -static void (*sdl_DestroyWindow)(void *window); -static void *(*sdl_CreateRenderer)(void *window, - int index, uint32_t flags); -static void (*sdl_DestroyRenderer)(void *renderer); -static void *(*sdl_CreateTexture)(void *renderer, - uint32_t format, int access, - int w, int h); -static void (*sdl_DestroyTexture)(void *texture); -static int (*sdl_LockTexture)(void *texture, - const SDL_Rect *rect, - void **pixels, int *pitch); -static void (*sdl_UnlockTexture)(void *texture); -static int (*sdl_RenderCopy)(void *renderer, - void *texture, - const SDL_Rect *srcrect, - const SDL_Rect *dstrect); -static void (*sdl_RenderPresent)(void *renderer); - - -static dllimp_t sdl_imports[] = { - { "SDL_GetVersion", &sdl_GetVersion }, - { "SDL_GetError", &sdl_GetError }, - { "SDL_Init", &sdl_Init }, - { "SDL_Quit", &sdl_Quit }, - { "SDL_CreateWindowFrom", &sdl_CreateWindowFrom }, - { "SDL_DestroyWindow", &sdl_DestroyWindow }, - { "SDL_CreateRenderer", &sdl_CreateRenderer }, - { "SDL_DestroyRenderer", &sdl_DestroyRenderer }, - { "SDL_CreateTexture", &sdl_CreateTexture }, - { "SDL_DestroyTexture", &sdl_DestroyTexture }, - { "SDL_LockTexture", &sdl_LockTexture }, - { "SDL_UnlockTexture", &sdl_UnlockTexture }, - { "SDL_RenderCopy", &sdl_RenderCopy }, - { "SDL_RenderPresent", &sdl_RenderPresent }, - { NULL, NULL } -}; - - -static void -sdl_blit(int x, int y, int y1, int y2, int w, int h) -{ - SDL_Rect r_src; - void *pixeldata; - int pitch; - int yy; - - if (buffer32 == NULL) { - video_blit_complete(); - return; - } - - /* - * TODO: - * SDL_UpdateTexture() might be better here, as it is - * (reportedly) slightly faster. - */ - sdl_LockTexture(sdl_tex, 0, &pixeldata, &pitch); - - for (yy = y1; yy < y2; yy++) { - if ((y + yy) >= 0 && (y + yy) < buffer32->h) - memset((uint32_t *) &(((uint8_t *)pixeldata)[yy * pitch]), 0xff, w * 4); - // memcpy((uint32_t *) &(((uint8_t *)pixeldata)[yy * pitch]), &(((uint32_t *)buffer32->line[y + yy])[x]), w * 4); - } - - video_blit_complete(); - - sdl_UnlockTexture(sdl_tex); - - r_src.x = 0; - r_src.y = 0; - r_src.w = w; - r_src.h = h; - - sdl_RenderCopy(sdl_render, sdl_tex, &r_src, 0); - - sdl_RenderPresent(sdl_render); -} - - -void -sdl_close(void) -{ - /* Unregister our renderer! */ - video_setblit(NULL); - - if (sdl_tex != NULL) { - sdl_DestroyTexture(sdl_tex); - sdl_tex = NULL; - } - - if (sdl_render != NULL) { - sdl_DestroyRenderer(sdl_render); - sdl_render = NULL; - } - - if (sdl_win != NULL) { - sdl_DestroyWindow(sdl_win); - sdl_win = NULL; - } - - if (sdl_hwnd != NULL) { - plat_set_input(hwndMain); - - DestroyWindow(sdl_hwnd); - sdl_hwnd = NULL; - - SetFocus(hwndMain); - } - - /* Quit and unload the DLL if possible. */ - if (sdl_handle != NULL) { - sdl_Quit(); - - dynld_close(sdl_handle); - sdl_handle = NULL; - } -} - - -static int -sdl_init_common(int fs) -{ - wchar_t temp[128]; - SDL_version ver; - - pclog("SDL: init (fs=%d)\n", fs); - - cgapal_rebuild(); - - /* Try loading the DLL. */ - sdl_handle = dynld_module(PATH_SDL_DLL, sdl_imports); - if (sdl_handle == NULL) { - pclog("SDL: unable to load '%s', SDL not available.\n", PATH_SDL_DLL); - return(0); - } - - /* Get and log the version of the DLL we are using. */ - sdl_GetVersion(&ver); - pclog("SDL: version %d.%d.%d\n", ver.major, ver.minor, ver.patch); - - /* Initialize the SDL system. */ - if (sdl_Init(SDL_INIT_VIDEO) < 0) { - pclog("SDL: initialization failed (%s)\n", sdl_GetError()); - return(0); - } - - if (fs) { - /* Get the size of the (current) desktop. */ - sdl_w = GetSystemMetrics(SM_CXSCREEN); - sdl_h = GetSystemMetrics(SM_CYSCREEN); - - /* Create the desktop-covering window. */ - _swprintf(temp, L"%s v%s", EMU_NAME_W, EMU_VERSION_W); - sdl_hwnd = CreateWindowEx( - 0, - SUB_CLASS_NAME, - temp, - WS_POPUP, - CW_USEDEFAULT, - CW_USEDEFAULT, - 640, - 480, - HWND_DESKTOP, - NULL, - NULL, - NULL); -pclog("SDL: FS %dx%d window at %08lx\n", sdl_w, sdl_h, sdl_hwnd); - - /* Redirect RawInput to this new window. */ - plat_set_input(sdl_hwnd); - - /* Show the window, make it topmost, and give it focus. */ - SetWindowPos(sdl_hwnd, HWND_TOPMOST, - 0, 0, sdl_w, sdl_h, SWP_SHOWWINDOW); - - /* Now create the SDL window from that. */ - sdl_win = sdl_CreateWindowFrom((void *)sdl_hwnd); - } else { - /* Redirect RawInput to this new window. */ - plat_set_input(hwndMain); - - // ShowWindow(hwndRender, TRUE); - ShowWindow(hwndRender, SW_SHOW); - - SetFocus(hwndMain); - - /* Create the SDL window from the render window. */ - sdl_win = sdl_CreateWindowFrom((void *)hwndRender); - } - if (sdl_win == NULL) { - pclog("SDL: unable to CreateWindowFrom (%s)\n", sdl_GetError()); - sdl_close(); - return(0); - } - - /* - * TODO: - * SDL_RENDERER_SOFTWARE, because SDL tries to do funky stuff - * otherwise (it turns off Win7 Aero and it looks like it's - * trying to switch to fullscreen even though the window is - * not a fullscreen window?) - */ - // sdl_render = sdl_CreateRenderer(sdl_win, -1, SDL_RENDERER_SOFTWARE); - sdl_render = sdl_CreateRenderer(sdl_win, -1, SDL_RENDERER_ACCELERATED); - if (sdl_render == NULL) { - pclog("SDL: unable to create renderer (%s)\n", sdl_GetError()); - sdl_close(); - return(0); - } - - /* - * TODO: - * Actually the source is (apparently) XRGB8888, but the alpha - * channel seems to be set to 255 everywhere, so ARGB8888 works - * just as well. - */ - sdl_tex = sdl_CreateTexture(sdl_render, SDL_PIXELFORMAT_ARGB8888, - SDL_TEXTUREACCESS_STREAMING, 2048, 2048); - if (sdl_tex == NULL) { - pclog("SDL: unable to create texture (%s)\n", sdl_GetError()); - sdl_close(); - return(0); - } - - /* Make sure we get a clean exit. */ - atexit(sdl_close); - - /* Register our renderer! */ - video_setblit(sdl_blit); - - return(1); -} - - -int -sdl_init(HWND h) -{ - return sdl_init_common(0); -} - - -int -sdl_init_fs(HWND h) -{ - return sdl_init_common(1); -} - - -void -sdl_take_screenshot(const wchar_t *fn) -{ - /* TODO: implement */ -} - - -int -sdl_pause(void) -{ - return(0); -}