summaryrefslogtreecommitdiffstats
path: root/devel
diff options
context:
space:
mode:
authorsobomax <sobomax@FreeBSD.org>2001-01-27 19:22:03 +0000
committersobomax <sobomax@FreeBSD.org>2001-01-27 19:22:03 +0000
commit5d628409ac0ce364be9347b18dce8cbc828fdfa0 (patch)
treea92f071b4f8abbf99c3ef3d17251211801b9b7d4 /devel
parent4a3e8b7ea5d9e251ee22c84c236d526e2b4e127f (diff)
downloadFreeBSD-ports-5d628409ac0ce364be9347b18dce8cbc828fdfa0.zip
FreeBSD-ports-5d628409ac0ce364be9347b18dce8cbc828fdfa0.tar.gz
Make vgl driver working OOB without the need to use custom patched version
of libvgl. I abadoned my previous plans to get my extentions into the base system because it seems that libvgl is at the end of its lifecycle and will be replaced by more generic and better solution (probably kgi/ggi), at least nsouch is actively working in this drection now. In the meantime, those lucky with VESA 2.0 compatible videocards would be able to play quakeforge or any other SDL-based games straight on their FreeBSD consoles ;).
Diffstat (limited to 'devel')
-rw-r--r--devel/sdl-devel/Makefile9
-rw-r--r--devel/sdl-devel/files/patch-ac4
-rw-r--r--devel/sdl-devel/files/patch-configure.in4
-rw-r--r--devel/sdl-devel/files/patch-src_video_svga_SDL__svgaevents.c13
-rw-r--r--devel/sdl-devel/files/patch-src_video_vgl_SDL__vglevents.c4
-rw-r--r--devel/sdl-devel/files/patch-src_video_vgl_SDL__vglevents__c.h4
-rw-r--r--devel/sdl-devel/files/patch-src_video_vgl_SDL__vglmouse.c4
-rw-r--r--devel/sdl-devel/files/patch-src_video_vgl_SDL__vglmouse__c.h4
-rw-r--r--devel/sdl-devel/files/patch-src_video_vgl_SDL__vglvideo.c210
-rw-r--r--devel/sdl-devel/files/patch-src_video_vgl_SDL__vglvideo.h31
-rw-r--r--devel/sdl-devel/files/patch-src_video_x11_SDL__x11events.c15
-rw-r--r--devel/sdl12/Makefile9
-rw-r--r--devel/sdl12/files/patch-ac4
-rw-r--r--devel/sdl12/files/patch-configure.in4
-rw-r--r--devel/sdl12/files/patch-src_video_svga_SDL__svgaevents.c13
-rw-r--r--devel/sdl12/files/patch-src_video_vgl_SDL__vglevents.c4
-rw-r--r--devel/sdl12/files/patch-src_video_vgl_SDL__vglevents__c.h4
-rw-r--r--devel/sdl12/files/patch-src_video_vgl_SDL__vglmouse.c4
-rw-r--r--devel/sdl12/files/patch-src_video_vgl_SDL__vglmouse__c.h4
-rw-r--r--devel/sdl12/files/patch-src_video_vgl_SDL__vglvideo.c210
-rw-r--r--devel/sdl12/files/patch-src_video_vgl_SDL__vglvideo.h31
-rw-r--r--devel/sdl12/files/patch-src_video_x11_SDL__x11events.c15
22 files changed, 526 insertions, 78 deletions
diff --git a/devel/sdl-devel/Makefile b/devel/sdl-devel/Makefile
index 01bb92a..79d778c 100644
--- a/devel/sdl-devel/Makefile
+++ b/devel/sdl-devel/Makefile
@@ -25,11 +25,16 @@ INSTALLS_SHLIB= yes
USE_LIBTOOL= yes
CONFIGURE_ENV= NASM="${LOCALBASE}/bin/nasm"
CONFIGURE_ARGS= --enable-video-aalib \
- --enable-video-svga \
- --enable-video-vgl
+ --enable-video-svga
CFLAGS+= -D_THREAD_SAFE
+.if exists(/usr/lib/libvgl.so.3)
+CONFIGURE_ARGS+=--enable-video-vgl
+.else
+CONFIGURE_ARGS+=--disable-video-vgl
+.endif
+
.if defined(WITHOUT_GL)
CONFIGURE_ARGS+=--disable-video-opengl
.else
diff --git a/devel/sdl-devel/files/patch-ac b/devel/sdl-devel/files/patch-ac
index 7f44eb5..c29d740 100644
--- a/devel/sdl-devel/files/patch-ac
+++ b/devel/sdl-devel/files/patch-ac
@@ -62,8 +62,8 @@ $FreeBSD$
+
+int main() {
+
-+ VGLMode mode;
-+ exit(0);
++ VGLBitmap bitmap;
++ exit(bitmap.PixelBytes);
+
+; return 0; }
+EOF
diff --git a/devel/sdl-devel/files/patch-configure.in b/devel/sdl-devel/files/patch-configure.in
index 96e9447..83a0f76 100644
--- a/devel/sdl-devel/files/patch-configure.in
+++ b/devel/sdl-devel/files/patch-configure.in
@@ -22,8 +22,8 @@ $FreeBSD$
+ #include <sys/kbio.h>
+ #include <vgl.h>
+ ],[
-+ VGLMode mode;
-+ exit(0);
++ VGLBitmap bitmap;
++ exit(bitmap.PyxelBytes);
+ ],[
+ video_vgl=yes
+ ])
diff --git a/devel/sdl-devel/files/patch-src_video_svga_SDL__svgaevents.c b/devel/sdl-devel/files/patch-src_video_svga_SDL__svgaevents.c
new file mode 100644
index 0000000..1133849
--- /dev/null
+++ b/devel/sdl-devel/files/patch-src_video_svga_SDL__svgaevents.c
@@ -0,0 +1,13 @@
+
+$FreeBSD$
+
+--- src/video/svga/SDL_svgaevents.c 2001/01/27 17:53:11 1.1
++++ src/video/svga/SDL_svgaevents.c 2001/01/27 17:53:58
+@@ -28,6 +28,7 @@
+ /* Handle the event stream, converting X11 events into SDL events */
+
+ #include <stdio.h>
++#include <stdlib.h>
+
+ #include <vga.h>
+ #include <vgamouse.h>
diff --git a/devel/sdl-devel/files/patch-src_video_vgl_SDL__vglevents.c b/devel/sdl-devel/files/patch-src_video_vgl_SDL__vglevents.c
index 589a210..9caaeae 100644
--- a/devel/sdl-devel/files/patch-src_video_vgl_SDL__vglevents.c
+++ b/devel/sdl-devel/files/patch-src_video_vgl_SDL__vglevents.c
@@ -1,8 +1,8 @@
$FreeBSD$
---- /dev/null Mon Jan 22 20:53:09 2001
-+++ src/video/vgl/SDL_vglevents.c Mon Jan 22 20:02:48 2001
+--- src/video/vgl/SDL_vglevents.c.orig Wed Jan 24 00:51:13 2001
++++ src/video/vgl/SDL_vglevents.c Wed Jan 24 00:51:13 2001
@@ -0,0 +1,305 @@
+/*
+ SDL - Simple DirectMedia Layer
diff --git a/devel/sdl-devel/files/patch-src_video_vgl_SDL__vglevents__c.h b/devel/sdl-devel/files/patch-src_video_vgl_SDL__vglevents__c.h
index 3a0c60c..ed719a7 100644
--- a/devel/sdl-devel/files/patch-src_video_vgl_SDL__vglevents__c.h
+++ b/devel/sdl-devel/files/patch-src_video_vgl_SDL__vglevents__c.h
@@ -1,8 +1,8 @@
$FreeBSD$
---- /dev/null Mon Jan 22 20:53:09 2001
-+++ src/video/vgl/SDL_vglevents_c.h Mon Jan 22 19:57:14 2001
+--- src/video/vgl/SDL_vglevents_c.h.orig Wed Jan 24 00:51:13 2001
++++ src/video/vgl/SDL_vglevents_c.h Wed Jan 24 00:51:13 2001
@@ -0,0 +1,159 @@
+/*
+ SDL - Simple DirectMedia Layer
diff --git a/devel/sdl-devel/files/patch-src_video_vgl_SDL__vglmouse.c b/devel/sdl-devel/files/patch-src_video_vgl_SDL__vglmouse.c
index 2fc9f5e..33247ab 100644
--- a/devel/sdl-devel/files/patch-src_video_vgl_SDL__vglmouse.c
+++ b/devel/sdl-devel/files/patch-src_video_vgl_SDL__vglmouse.c
@@ -1,8 +1,8 @@
$FreeBSD$
---- /dev/null Mon Jan 22 20:53:09 2001
-+++ src/video/vgl/SDL_vglmouse.c Mon Jan 22 16:31:43 2001
+--- src/video/vgl/SDL_vglmouse.c.orig Wed Jan 24 00:51:13 2001
++++ src/video/vgl/SDL_vglmouse.c Wed Jan 24 00:51:13 2001
@@ -0,0 +1,66 @@
+/*
+ SDL - Simple DirectMedia Layer
diff --git a/devel/sdl-devel/files/patch-src_video_vgl_SDL__vglmouse__c.h b/devel/sdl-devel/files/patch-src_video_vgl_SDL__vglmouse__c.h
index 119b811..9e75008 100644
--- a/devel/sdl-devel/files/patch-src_video_vgl_SDL__vglmouse__c.h
+++ b/devel/sdl-devel/files/patch-src_video_vgl_SDL__vglmouse__c.h
@@ -1,8 +1,8 @@
$FreeBSD$
---- /dev/null Mon Jan 22 20:53:10 2001
-+++ src/video/vgl/SDL_vglmouse_c.h Mon Jan 22 16:31:43 2001
+--- src/video/vgl/SDL_vglmouse_c.h.orig Wed Jan 24 00:51:13 2001
++++ src/video/vgl/SDL_vglmouse_c.h Wed Jan 24 00:51:13 2001
@@ -0,0 +1,36 @@
+/*
+ SDL - Simple DirectMedia Layer
diff --git a/devel/sdl-devel/files/patch-src_video_vgl_SDL__vglvideo.c b/devel/sdl-devel/files/patch-src_video_vgl_SDL__vglvideo.c
index 9ab45e6..7a8f38c 100644
--- a/devel/sdl-devel/files/patch-src_video_vgl_SDL__vglvideo.c
+++ b/devel/sdl-devel/files/patch-src_video_vgl_SDL__vglvideo.c
@@ -1,9 +1,9 @@
$FreeBSD$
---- /dev/null Mon Jan 22 20:53:09 2001
-+++ src/video/vgl/SDL_vglvideo.c Mon Jan 22 20:04:39 2001
-@@ -0,0 +1,444 @@
+--- src/video/vgl/SDL_vglvideo.c.orig Sat Jan 27 17:45:48 2001
++++ src/video/vgl/SDL_vglvideo.c Sat Jan 27 18:13:31 2001
+@@ -0,0 +1,616 @@
+/*
+ SDL - Simple DirectMedia Layer
+ Copyright (C) 1997, 1998, 1999, 2000 Sam Lantinga
@@ -56,8 +56,6 @@ $FreeBSD$
+#include "SDL_vglmouse_c.h"
+
+
-+static VGLMode *VGLCurMode = NULL;
-+
+/* Initialization/Query functions */
+static int VGL_VideoInit(_THIS, SDL_PixelFormat *vformat);
+static SDL_Rect **VGL_ListModes(_THIS, SDL_PixelFormat *format, Uint32 flags);
@@ -73,6 +71,10 @@ $FreeBSD$
+static void VGL_UnlockHWSurface(_THIS, SDL_Surface *surface);
+static void VGL_FreeHWSurface(_THIS, SDL_Surface *surface);
+
++/* Misc function */
++static VGLMode ** VGLListModes(int depth, int mem_model);
++static void VGLWaitRetrace(void);
++
+/* VGL driver bootstrap functions */
+
+static int VGL_Available(void)
@@ -133,7 +135,7 @@ $FreeBSD$
+ device->SetHWAlpha = NULL;
+ device->LockHWSurface = VGL_LockHWSurface;
+ device->UnlockHWSurface = VGL_UnlockHWSurface;
-+ device->FlipHWSurface = NULL;
++ device->FlipHWSurface = VGL_FlipHWSurface;
+ device->FreeHWSurface = VGL_FreeHWSurface;
+ device->SetIcon = NULL;
+ device->SetCaption = NULL;
@@ -242,10 +244,6 @@ $FreeBSD$
+ SDL_SetError("Unable to initialize mouse");
+ return -1;
+ }
-+// if (VGLMouseInit(VGL_MOUSEHIDE) != 0) {
-+// SDL_SetError("Unable to initialize mouse");
-+// return -1;
-+// }
+
+ /* Determine the screen depth */
+ if (VGLCurMode != NULL)
@@ -294,7 +292,7 @@ $FreeBSD$
+static void VGL_BankedUpdate(_THIS, int numrects, SDL_Rect *rects);
+
+SDL_Surface *VGL_SetVideoMode(_THIS, SDL_Surface *current,
-+ int width, int height, int bpp, Uint32 flags)
++ int width, int height, int bpp, Uint32 flags)
+{
+ int mode_found;
+ int i;
@@ -326,25 +324,45 @@ $FreeBSD$
+ SDL_SetError("Unable to switch to requested mode");
+ return NULL;
+ }
++
+ VGLCurMode = realloc(VGLCurMode, sizeof(VGLMode));
+ VGLCurMode->ModeInfo = *VGLDisplay;
+ VGLCurMode->Depth = modes[i]->Depth;
+ VGLCurMode->ModeId = modes[i]->ModeId;
++ VGLCurMode->Rmask = modes[i]->Rmask;
++ VGLCurMode->Gmask = modes[i]->Gmask;
++ VGLCurMode->Bmask = modes[i]->Bmask;
+
+ /* Workaround a bug in libvgl */
+ if (VGLCurMode->ModeInfo.PixelBytes == 0)
+ (VGLCurMode->ModeInfo.PixelBytes = 1);
+
-+ current->flags = (SDL_FULLSCREEN | SDL_HWSURFACE);
-+ if (VGLCurMode->ModeInfo.Type == VIDBUF8)
-+ current->flags |= SDL_HWPALETTE;
+ current->w = VGLCurMode->ModeInfo.Xsize;
+ current->h = VGLCurMode->ModeInfo.Ysize;
+ current->pixels = VGLCurMode->ModeInfo.Bitmap;
-+ current->pitch = VGLCurMode->ModeInfo.Xsize * VGLCurMode->ModeInfo.PixelBytes;
++ current->pitch = VGLCurMode->ModeInfo.Xsize *
++ VGLCurMode->ModeInfo.PixelBytes;
++ current->flags = (SDL_FULLSCREEN | SDL_HWSURFACE);
+
-+ /* FIXME - should set colormasks for bpp > 8*/
-+ if (! SDL_ReallocFormat(current, modes[i]->Depth, 0, 0, 0, 0)) {
++ /* Check if we are in a pseudo-color mode */
++ if (VGLCurMode->ModeInfo.Type == VIDBUF8)
++ current->flags |= SDL_HWPALETTE;
++
++ /* Check if we can do doublebuffering */
++ if (flags & SDL_DOUBLEBUF) {
++ if (VGLCurMode->ModeInfo.Xsize * 2 <=
++ VGLCurMode->ModeInfo.VYsize) {
++ current->flags |= SDL_DOUBLEBUF;
++ flip_page = 0;
++ flip_address[0] = (byte *)current->pixels;
++ flip_address[1] = (byte *)current->pixels +
++ current->h * current->pitch;
++ VGL_FlipHWSurface(this, current);
++ }
++ }
++
++ if (! SDL_ReallocFormat(current, modes[i]->Depth, VGLCurMode->Rmask,
++ VGLCurMode->Gmask, VGLCurMode->Bmask, 0)) {
+ return NULL;
+ }
+
@@ -385,6 +403,15 @@ $FreeBSD$
+
+static int VGL_FlipHWSurface(_THIS, SDL_Surface *surface)
+{
++// VGLWaitRetrace();
++ if (VGLPanScreen(VGLDisplay, 0, flip_page * surface->h) < 0) {
++ SDL_SetError("VGLPanSreen() failed");
++ return -1;
++ }
++
++ flip_page = !flip_page;
++ surface->pixels = flip_address[flip_page];
++
+ return 0;
+}
+
@@ -418,10 +445,12 @@ $FreeBSD$
+{
+ int i, j;
+
-+ /* Reset the console video mode */
++ /* Return the keyboard to the normal state */
+ VGLKeyboardEnd();
-+ VGLEnd();
++
++ /* Reset the console video mode if we actually initialised one */
+ if (VGLCurMode != NULL) {
++ VGLEnd();
+ free(VGLCurMode);
+ VGLCurMode = NULL;
+ }
@@ -448,3 +477,146 @@ $FreeBSD$
+ this->screen->pixels = NULL;
+ }
+}
++
++#define VGL_RED_INDEX 0
++#define VGL_GREEN_INDEX 1
++#define VGL_BLUE_INDEX 2
++
++static VGLMode **
++VGLListModes(int depth, int mem_model)
++{
++ static VGLMode **modes = NULL;
++
++ VGLBitmap *vminfop;
++ VGLMode **modesp, *modescp;
++ video_info_t minfo;
++ int adptype, i, modenum;
++
++ if (modes == NULL) {
++ modes = malloc(sizeof(VGLMode *) * M_VESA_MODE_MAX);
++ bzero(modes, sizeof(VGLMode *) * M_VESA_MODE_MAX);
++ }
++ modesp = modes;
++
++ for (modenum = 0; modenum < M_VESA_MODE_MAX; modenum++) {
++ minfo.vi_mode = modenum;
++ if (ioctl(0, CONS_MODEINFO, &minfo) || ioctl(0, CONS_CURRENT, &adptype))
++ continue;
++ if (minfo.vi_mode != modenum)
++ continue;
++ if ((minfo.vi_flags & V_INFO_GRAPHICS) == 0)
++ continue;
++ if ((mem_model != -1) && ((minfo.vi_mem_model & mem_model) == 0))
++ continue;
++ if ((depth > 1) && (minfo.vi_depth != depth))
++ continue;
++
++ /* reallocf can fail */
++ if ((*modesp = reallocf(*modesp, sizeof(VGLMode))) == NULL)
++ return NULL;
++ modescp = *modesp;
++
++ vminfop = &(modescp->ModeInfo);
++ bzero(vminfop, sizeof(VGLBitmap));
++
++ vminfop->Type = NOBUF;
++
++ vminfop->PixelBytes = 1; /* Good default value */
++ switch (minfo.vi_mem_model) {
++ case V_INFO_MM_PLANAR:
++ /* we can handle EGA/VGA planar modes only */
++ if (!(minfo.vi_depth != 4 || minfo.vi_planes != 4
++ || (adptype != KD_EGA && adptype != KD_VGA)))
++ vminfop->Type = VIDBUF4;
++ break;
++ case V_INFO_MM_PACKED:
++ /* we can do only 256 color packed modes */
++ if (minfo.vi_depth == 8)
++ vminfop->Type = VIDBUF8;
++ break;
++ case V_INFO_MM_VGAX:
++ vminfop->Type = VIDBUF8X;
++ break;
++#if __FreeBSD_version >= 500000
++ case V_INFO_MM_DIRECT:
++ vminfop->PixelBytes = minfo.vi_pixel_size;
++ switch (vminfop->PixelBytes) {
++ case 2:
++ vminfop->Type = VIDBUF16;
++ break;
++#if notyet
++ case 3:
++ vminfop->Type = VIDBUF24;
++ break;
++#endif
++ case 4:
++ vminfop->Type = VIDBUF32;
++ break;
++ default:
++ break;
++ }
++#endif
++ default:
++ break;
++ }
++ if (vminfop->Type == NOBUF)
++ continue;
++
++ switch (vminfop->Type) {
++ case VIDBUF16:
++ case VIDBUF32:
++ modescp->Rmask = ((1 << minfo.vi_pixel_fsizes[VGL_RED_INDEX]) - 1) <<
++ minfo.vi_pixel_fields[VGL_RED_INDEX];
++ modescp->Gmask = ((1 << minfo.vi_pixel_fsizes[VGL_GREEN_INDEX]) - 1) <<
++ minfo.vi_pixel_fields[VGL_GREEN_INDEX];
++ modescp->Bmask = ((1 << minfo.vi_pixel_fsizes[VGL_BLUE_INDEX]) - 1) <<
++ minfo.vi_pixel_fields[VGL_BLUE_INDEX];
++ break;
++
++ default:
++ break;
++ }
++
++ vminfop->Xsize = minfo.vi_width;
++ vminfop->Ysize = minfo.vi_height;
++ modescp->Depth = minfo.vi_depth;
++
++ /* XXX */
++ if (minfo.vi_mode >= M_VESA_BASE)
++ modescp->ModeId = _IO('V', minfo.vi_mode - M_VESA_BASE);
++ else
++ modescp->ModeId = _IO('S', minfo.vi_mode);
++
++ /* Sort list */
++ for (i = 0; modes + i < modesp ; i++) {
++ if (modes[i]->ModeInfo.Xsize * modes[i]->ModeInfo.Ysize >
++ vminfop->Xsize * modes[i]->ModeInfo.Ysize)
++ continue;
++ if ((modes[i]->ModeInfo.Xsize * modes[i]->ModeInfo.Ysize ==
++ vminfop->Xsize * vminfop->Ysize) &&
++ (modes[i]->Depth >= modescp->Depth))
++ continue;
++ *modesp = modes[i];
++ modes[i] = modescp;
++ modescp = *modesp;
++ vminfop = &(modescp->ModeInfo);
++ }
++
++ modesp++;
++ }
++
++ if (*modesp != NULL) {
++ free(*modesp);
++ *modesp = NULL;
++ }
++
++ return modes;
++}
++
++static void
++VGLWaitRetrace(void)
++{
++ while (!(inb(0x3DA) & 8));
++ while (inb(0x3DA) & 8);
++}
++
diff --git a/devel/sdl-devel/files/patch-src_video_vgl_SDL__vglvideo.h b/devel/sdl-devel/files/patch-src_video_vgl_SDL__vglvideo.h
index 640ae17..c6b440f 100644
--- a/devel/sdl-devel/files/patch-src_video_vgl_SDL__vglvideo.h
+++ b/devel/sdl-devel/files/patch-src_video_vgl_SDL__vglvideo.h
@@ -1,9 +1,9 @@
$FreeBSD$
---- /dev/null Mon Jan 22 20:53:10 2001
-+++ src/video/vgl/SDL_vglvideo.h Mon Jan 22 18:16:51 2001
-@@ -0,0 +1,50 @@
+--- src/video/vgl/SDL_vglvideo.h.orig Sat Jan 27 17:25:12 2001
++++ src/video/vgl/SDL_vglvideo.h Sat Jan 27 17:30:56 2001
+@@ -0,0 +1,69 @@
+/*
+ SDL - Simple DirectMedia Layer
+ Copyright (C) 1997, 1998, 1999, 2000 Sam Lantinga
@@ -34,6 +34,10 @@ $FreeBSD$
+#ifndef _SDL_vglvideo_h
+#define _SDL_vglvideo_h
+
++#include <sys/fbio.h>
++#include <sys/consio.h>
++#include <vgl.h>
++
+#include "SDL_mouse.h"
+#include "SDL_mutex.h"
+#include "SDL_sysvideo.h"
@@ -41,16 +45,31 @@ $FreeBSD$
+/* Hidden "this" pointer for the video functions */
+#define _THIS SDL_VideoDevice *this
+
++typedef struct {
++ int ModeId;
++ int Depth;
++ int Rmask;
++ int Gmask;
++ int Bmask;
++ VGLBitmap ModeInfo;
++} VGLMode;
++
+/* Private display data */
+struct SDL_PrivateVideoData {
+#define NUM_MODELISTS 4 /* 8, 16, 24, and 32 bits-per-pixel */
+ int SDL_nummodes[NUM_MODELISTS];
+ SDL_Rect **SDL_modelist[NUM_MODELISTS];
+ SDL_mutex *hw_lock;
++ VGLMode *VGLCurMode;
++ int flip_page;
++ byte *flip_address[2];
+};
+/* Old variable names */
-+#define SDL_nummodes (this->hidden->SDL_nummodes)
-+#define SDL_modelist (this->hidden->SDL_modelist)
-+#define hw_lock (this->hidden->hw_lock)
++#define SDL_nummodes (this->hidden->SDL_nummodes)
++#define SDL_modelist (this->hidden->SDL_modelist)
++#define hw_lock (this->hidden->hw_lock)
++#define VGLCurMode (this->hidden->VGLCurMode)
++#define flip_page (this->hidden->flip_page)
++#define flip_address (this->hidden->flip_address)
+
+#endif /* _SDL_vglvideo_h */
diff --git a/devel/sdl-devel/files/patch-src_video_x11_SDL__x11events.c b/devel/sdl-devel/files/patch-src_video_x11_SDL__x11events.c
new file mode 100644
index 0000000..0951242
--- /dev/null
+++ b/devel/sdl-devel/files/patch-src_video_x11_SDL__x11events.c
@@ -0,0 +1,15 @@
+
+$FreeBSD$
+
+--- src/video/x11/SDL_x11events.c 2001/01/27 17:49:30 1.1
++++ src/video/x11/SDL_x11events.c 2001/01/27 17:49:54
+@@ -35,7 +35,9 @@
+ #ifdef __SVR4
+ #include <X11/Sunkeysym.h>
+ #endif
++#include <sys/types.h>
+ #include <sys/time.h>
++#include <unistd.h>
+
+ #include "SDL.h"
+ #include "SDL_syswm.h"
diff --git a/devel/sdl12/Makefile b/devel/sdl12/Makefile
index 01bb92a..79d778c 100644
--- a/devel/sdl12/Makefile
+++ b/devel/sdl12/Makefile
@@ -25,11 +25,16 @@ INSTALLS_SHLIB= yes
USE_LIBTOOL= yes
CONFIGURE_ENV= NASM="${LOCALBASE}/bin/nasm"
CONFIGURE_ARGS= --enable-video-aalib \
- --enable-video-svga \
- --enable-video-vgl
+ --enable-video-svga
CFLAGS+= -D_THREAD_SAFE
+.if exists(/usr/lib/libvgl.so.3)
+CONFIGURE_ARGS+=--enable-video-vgl
+.else
+CONFIGURE_ARGS+=--disable-video-vgl
+.endif
+
.if defined(WITHOUT_GL)
CONFIGURE_ARGS+=--disable-video-opengl
.else
diff --git a/devel/sdl12/files/patch-ac b/devel/sdl12/files/patch-ac
index 7f44eb5..c29d740 100644
--- a/devel/sdl12/files/patch-ac
+++ b/devel/sdl12/files/patch-ac
@@ -62,8 +62,8 @@ $FreeBSD$
+
+int main() {
+
-+ VGLMode mode;
-+ exit(0);
++ VGLBitmap bitmap;
++ exit(bitmap.PixelBytes);
+
+; return 0; }
+EOF
diff --git a/devel/sdl12/files/patch-configure.in b/devel/sdl12/files/patch-configure.in
index 96e9447..83a0f76 100644
--- a/devel/sdl12/files/patch-configure.in
+++ b/devel/sdl12/files/patch-configure.in
@@ -22,8 +22,8 @@ $FreeBSD$
+ #include <sys/kbio.h>
+ #include <vgl.h>
+ ],[
-+ VGLMode mode;
-+ exit(0);
++ VGLBitmap bitmap;
++ exit(bitmap.PyxelBytes);
+ ],[
+ video_vgl=yes
+ ])
diff --git a/devel/sdl12/files/patch-src_video_svga_SDL__svgaevents.c b/devel/sdl12/files/patch-src_video_svga_SDL__svgaevents.c
new file mode 100644
index 0000000..1133849
--- /dev/null
+++ b/devel/sdl12/files/patch-src_video_svga_SDL__svgaevents.c
@@ -0,0 +1,13 @@
+
+$FreeBSD$
+
+--- src/video/svga/SDL_svgaevents.c 2001/01/27 17:53:11 1.1
++++ src/video/svga/SDL_svgaevents.c 2001/01/27 17:53:58
+@@ -28,6 +28,7 @@
+ /* Handle the event stream, converting X11 events into SDL events */
+
+ #include <stdio.h>
++#include <stdlib.h>
+
+ #include <vga.h>
+ #include <vgamouse.h>
diff --git a/devel/sdl12/files/patch-src_video_vgl_SDL__vglevents.c b/devel/sdl12/files/patch-src_video_vgl_SDL__vglevents.c
index 589a210..9caaeae 100644
--- a/devel/sdl12/files/patch-src_video_vgl_SDL__vglevents.c
+++ b/devel/sdl12/files/patch-src_video_vgl_SDL__vglevents.c
@@ -1,8 +1,8 @@
$FreeBSD$
---- /dev/null Mon Jan 22 20:53:09 2001
-+++ src/video/vgl/SDL_vglevents.c Mon Jan 22 20:02:48 2001
+--- src/video/vgl/SDL_vglevents.c.orig Wed Jan 24 00:51:13 2001
++++ src/video/vgl/SDL_vglevents.c Wed Jan 24 00:51:13 2001
@@ -0,0 +1,305 @@
+/*
+ SDL - Simple DirectMedia Layer
diff --git a/devel/sdl12/files/patch-src_video_vgl_SDL__vglevents__c.h b/devel/sdl12/files/patch-src_video_vgl_SDL__vglevents__c.h
index 3a0c60c..ed719a7 100644
--- a/devel/sdl12/files/patch-src_video_vgl_SDL__vglevents__c.h
+++ b/devel/sdl12/files/patch-src_video_vgl_SDL__vglevents__c.h
@@ -1,8 +1,8 @@
$FreeBSD$
---- /dev/null Mon Jan 22 20:53:09 2001
-+++ src/video/vgl/SDL_vglevents_c.h Mon Jan 22 19:57:14 2001
+--- src/video/vgl/SDL_vglevents_c.h.orig Wed Jan 24 00:51:13 2001
++++ src/video/vgl/SDL_vglevents_c.h Wed Jan 24 00:51:13 2001
@@ -0,0 +1,159 @@
+/*
+ SDL - Simple DirectMedia Layer
diff --git a/devel/sdl12/files/patch-src_video_vgl_SDL__vglmouse.c b/devel/sdl12/files/patch-src_video_vgl_SDL__vglmouse.c
index 2fc9f5e..33247ab 100644
--- a/devel/sdl12/files/patch-src_video_vgl_SDL__vglmouse.c
+++ b/devel/sdl12/files/patch-src_video_vgl_SDL__vglmouse.c
@@ -1,8 +1,8 @@
$FreeBSD$
---- /dev/null Mon Jan 22 20:53:09 2001
-+++ src/video/vgl/SDL_vglmouse.c Mon Jan 22 16:31:43 2001
+--- src/video/vgl/SDL_vglmouse.c.orig Wed Jan 24 00:51:13 2001
++++ src/video/vgl/SDL_vglmouse.c Wed Jan 24 00:51:13 2001
@@ -0,0 +1,66 @@
+/*
+ SDL - Simple DirectMedia Layer
diff --git a/devel/sdl12/files/patch-src_video_vgl_SDL__vglmouse__c.h b/devel/sdl12/files/patch-src_video_vgl_SDL__vglmouse__c.h
index 119b811..9e75008 100644
--- a/devel/sdl12/files/patch-src_video_vgl_SDL__vglmouse__c.h
+++ b/devel/sdl12/files/patch-src_video_vgl_SDL__vglmouse__c.h
@@ -1,8 +1,8 @@
$FreeBSD$
---- /dev/null Mon Jan 22 20:53:10 2001
-+++ src/video/vgl/SDL_vglmouse_c.h Mon Jan 22 16:31:43 2001
+--- src/video/vgl/SDL_vglmouse_c.h.orig Wed Jan 24 00:51:13 2001
++++ src/video/vgl/SDL_vglmouse_c.h Wed Jan 24 00:51:13 2001
@@ -0,0 +1,36 @@
+/*
+ SDL - Simple DirectMedia Layer
diff --git a/devel/sdl12/files/patch-src_video_vgl_SDL__vglvideo.c b/devel/sdl12/files/patch-src_video_vgl_SDL__vglvideo.c
index 9ab45e6..7a8f38c 100644
--- a/devel/sdl12/files/patch-src_video_vgl_SDL__vglvideo.c
+++ b/devel/sdl12/files/patch-src_video_vgl_SDL__vglvideo.c
@@ -1,9 +1,9 @@
$FreeBSD$
---- /dev/null Mon Jan 22 20:53:09 2001
-+++ src/video/vgl/SDL_vglvideo.c Mon Jan 22 20:04:39 2001
-@@ -0,0 +1,444 @@
+--- src/video/vgl/SDL_vglvideo.c.orig Sat Jan 27 17:45:48 2001
++++ src/video/vgl/SDL_vglvideo.c Sat Jan 27 18:13:31 2001
+@@ -0,0 +1,616 @@
+/*
+ SDL - Simple DirectMedia Layer
+ Copyright (C) 1997, 1998, 1999, 2000 Sam Lantinga
@@ -56,8 +56,6 @@ $FreeBSD$
+#include "SDL_vglmouse_c.h"
+
+
-+static VGLMode *VGLCurMode = NULL;
-+
+/* Initialization/Query functions */
+static int VGL_VideoInit(_THIS, SDL_PixelFormat *vformat);
+static SDL_Rect **VGL_ListModes(_THIS, SDL_PixelFormat *format, Uint32 flags);
@@ -73,6 +71,10 @@ $FreeBSD$
+static void VGL_UnlockHWSurface(_THIS, SDL_Surface *surface);
+static void VGL_FreeHWSurface(_THIS, SDL_Surface *surface);
+
++/* Misc function */
++static VGLMode ** VGLListModes(int depth, int mem_model);
++static void VGLWaitRetrace(void);
++
+/* VGL driver bootstrap functions */
+
+static int VGL_Available(void)
@@ -133,7 +135,7 @@ $FreeBSD$
+ device->SetHWAlpha = NULL;
+ device->LockHWSurface = VGL_LockHWSurface;
+ device->UnlockHWSurface = VGL_UnlockHWSurface;
-+ device->FlipHWSurface = NULL;
++ device->FlipHWSurface = VGL_FlipHWSurface;
+ device->FreeHWSurface = VGL_FreeHWSurface;
+ device->SetIcon = NULL;
+ device->SetCaption = NULL;
@@ -242,10 +244,6 @@ $FreeBSD$
+ SDL_SetError("Unable to initialize mouse");
+ return -1;
+ }
-+// if (VGLMouseInit(VGL_MOUSEHIDE) != 0) {
-+// SDL_SetError("Unable to initialize mouse");
-+// return -1;
-+// }
+
+ /* Determine the screen depth */
+ if (VGLCurMode != NULL)
@@ -294,7 +292,7 @@ $FreeBSD$
+static void VGL_BankedUpdate(_THIS, int numrects, SDL_Rect *rects);
+
+SDL_Surface *VGL_SetVideoMode(_THIS, SDL_Surface *current,
-+ int width, int height, int bpp, Uint32 flags)
++ int width, int height, int bpp, Uint32 flags)
+{
+ int mode_found;
+ int i;
@@ -326,25 +324,45 @@ $FreeBSD$
+ SDL_SetError("Unable to switch to requested mode");
+ return NULL;
+ }
++
+ VGLCurMode = realloc(VGLCurMode, sizeof(VGLMode));
+ VGLCurMode->ModeInfo = *VGLDisplay;
+ VGLCurMode->Depth = modes[i]->Depth;
+ VGLCurMode->ModeId = modes[i]->ModeId;
++ VGLCurMode->Rmask = modes[i]->Rmask;
++ VGLCurMode->Gmask = modes[i]->Gmask;
++ VGLCurMode->Bmask = modes[i]->Bmask;
+
+ /* Workaround a bug in libvgl */
+ if (VGLCurMode->ModeInfo.PixelBytes == 0)
+ (VGLCurMode->ModeInfo.PixelBytes = 1);
+
-+ current->flags = (SDL_FULLSCREEN | SDL_HWSURFACE);
-+ if (VGLCurMode->ModeInfo.Type == VIDBUF8)
-+ current->flags |= SDL_HWPALETTE;
+ current->w = VGLCurMode->ModeInfo.Xsize;
+ current->h = VGLCurMode->ModeInfo.Ysize;
+ current->pixels = VGLCurMode->ModeInfo.Bitmap;
-+ current->pitch = VGLCurMode->ModeInfo.Xsize * VGLCurMode->ModeInfo.PixelBytes;
++ current->pitch = VGLCurMode->ModeInfo.Xsize *
++ VGLCurMode->ModeInfo.PixelBytes;
++ current->flags = (SDL_FULLSCREEN | SDL_HWSURFACE);
+
-+ /* FIXME - should set colormasks for bpp > 8*/
-+ if (! SDL_ReallocFormat(current, modes[i]->Depth, 0, 0, 0, 0)) {
++ /* Check if we are in a pseudo-color mode */
++ if (VGLCurMode->ModeInfo.Type == VIDBUF8)
++ current->flags |= SDL_HWPALETTE;
++
++ /* Check if we can do doublebuffering */
++ if (flags & SDL_DOUBLEBUF) {
++ if (VGLCurMode->ModeInfo.Xsize * 2 <=
++ VGLCurMode->ModeInfo.VYsize) {
++ current->flags |= SDL_DOUBLEBUF;
++ flip_page = 0;
++ flip_address[0] = (byte *)current->pixels;
++ flip_address[1] = (byte *)current->pixels +
++ current->h * current->pitch;
++ VGL_FlipHWSurface(this, current);
++ }
++ }
++
++ if (! SDL_ReallocFormat(current, modes[i]->Depth, VGLCurMode->Rmask,
++ VGLCurMode->Gmask, VGLCurMode->Bmask, 0)) {
+ return NULL;
+ }
+
@@ -385,6 +403,15 @@ $FreeBSD$
+
+static int VGL_FlipHWSurface(_THIS, SDL_Surface *surface)
+{
++// VGLWaitRetrace();
++ if (VGLPanScreen(VGLDisplay, 0, flip_page * surface->h) < 0) {
++ SDL_SetError("VGLPanSreen() failed");
++ return -1;
++ }
++
++ flip_page = !flip_page;
++ surface->pixels = flip_address[flip_page];
++
+ return 0;
+}
+
@@ -418,10 +445,12 @@ $FreeBSD$
+{
+ int i, j;
+
-+ /* Reset the console video mode */
++ /* Return the keyboard to the normal state */
+ VGLKeyboardEnd();
-+ VGLEnd();
++
++ /* Reset the console video mode if we actually initialised one */
+ if (VGLCurMode != NULL) {
++ VGLEnd();
+ free(VGLCurMode);
+ VGLCurMode = NULL;
+ }
@@ -448,3 +477,146 @@ $FreeBSD$
+ this->screen->pixels = NULL;
+ }
+}
++
++#define VGL_RED_INDEX 0
++#define VGL_GREEN_INDEX 1
++#define VGL_BLUE_INDEX 2
++
++static VGLMode **
++VGLListModes(int depth, int mem_model)
++{
++ static VGLMode **modes = NULL;
++
++ VGLBitmap *vminfop;
++ VGLMode **modesp, *modescp;
++ video_info_t minfo;
++ int adptype, i, modenum;
++
++ if (modes == NULL) {
++ modes = malloc(sizeof(VGLMode *) * M_VESA_MODE_MAX);
++ bzero(modes, sizeof(VGLMode *) * M_VESA_MODE_MAX);
++ }
++ modesp = modes;
++
++ for (modenum = 0; modenum < M_VESA_MODE_MAX; modenum++) {
++ minfo.vi_mode = modenum;
++ if (ioctl(0, CONS_MODEINFO, &minfo) || ioctl(0, CONS_CURRENT, &adptype))
++ continue;
++ if (minfo.vi_mode != modenum)
++ continue;
++ if ((minfo.vi_flags & V_INFO_GRAPHICS) == 0)
++ continue;
++ if ((mem_model != -1) && ((minfo.vi_mem_model & mem_model) == 0))
++ continue;
++ if ((depth > 1) && (minfo.vi_depth != depth))
++ continue;
++
++ /* reallocf can fail */
++ if ((*modesp = reallocf(*modesp, sizeof(VGLMode))) == NULL)
++ return NULL;
++ modescp = *modesp;
++
++ vminfop = &(modescp->ModeInfo);
++ bzero(vminfop, sizeof(VGLBitmap));
++
++ vminfop->Type = NOBUF;
++
++ vminfop->PixelBytes = 1; /* Good default value */
++ switch (minfo.vi_mem_model) {
++ case V_INFO_MM_PLANAR:
++ /* we can handle EGA/VGA planar modes only */
++ if (!(minfo.vi_depth != 4 || minfo.vi_planes != 4
++ || (adptype != KD_EGA && adptype != KD_VGA)))
++ vminfop->Type = VIDBUF4;
++ break;
++ case V_INFO_MM_PACKED:
++ /* we can do only 256 color packed modes */
++ if (minfo.vi_depth == 8)
++ vminfop->Type = VIDBUF8;
++ break;
++ case V_INFO_MM_VGAX:
++ vminfop->Type = VIDBUF8X;
++ break;
++#if __FreeBSD_version >= 500000
++ case V_INFO_MM_DIRECT:
++ vminfop->PixelBytes = minfo.vi_pixel_size;
++ switch (vminfop->PixelBytes) {
++ case 2:
++ vminfop->Type = VIDBUF16;
++ break;
++#if notyet
++ case 3:
++ vminfop->Type = VIDBUF24;
++ break;
++#endif
++ case 4:
++ vminfop->Type = VIDBUF32;
++ break;
++ default:
++ break;
++ }
++#endif
++ default:
++ break;
++ }
++ if (vminfop->Type == NOBUF)
++ continue;
++
++ switch (vminfop->Type) {
++ case VIDBUF16:
++ case VIDBUF32:
++ modescp->Rmask = ((1 << minfo.vi_pixel_fsizes[VGL_RED_INDEX]) - 1) <<
++ minfo.vi_pixel_fields[VGL_RED_INDEX];
++ modescp->Gmask = ((1 << minfo.vi_pixel_fsizes[VGL_GREEN_INDEX]) - 1) <<
++ minfo.vi_pixel_fields[VGL_GREEN_INDEX];
++ modescp->Bmask = ((1 << minfo.vi_pixel_fsizes[VGL_BLUE_INDEX]) - 1) <<
++ minfo.vi_pixel_fields[VGL_BLUE_INDEX];
++ break;
++
++ default:
++ break;
++ }
++
++ vminfop->Xsize = minfo.vi_width;
++ vminfop->Ysize = minfo.vi_height;
++ modescp->Depth = minfo.vi_depth;
++
++ /* XXX */
++ if (minfo.vi_mode >= M_VESA_BASE)
++ modescp->ModeId = _IO('V', minfo.vi_mode - M_VESA_BASE);
++ else
++ modescp->ModeId = _IO('S', minfo.vi_mode);
++
++ /* Sort list */
++ for (i = 0; modes + i < modesp ; i++) {
++ if (modes[i]->ModeInfo.Xsize * modes[i]->ModeInfo.Ysize >
++ vminfop->Xsize * modes[i]->ModeInfo.Ysize)
++ continue;
++ if ((modes[i]->ModeInfo.Xsize * modes[i]->ModeInfo.Ysize ==
++ vminfop->Xsize * vminfop->Ysize) &&
++ (modes[i]->Depth >= modescp->Depth))
++ continue;
++ *modesp = modes[i];
++ modes[i] = modescp;
++ modescp = *modesp;
++ vminfop = &(modescp->ModeInfo);
++ }
++
++ modesp++;
++ }
++
++ if (*modesp != NULL) {
++ free(*modesp);
++ *modesp = NULL;
++ }
++
++ return modes;
++}
++
++static void
++VGLWaitRetrace(void)
++{
++ while (!(inb(0x3DA) & 8));
++ while (inb(0x3DA) & 8);
++}
++
diff --git a/devel/sdl12/files/patch-src_video_vgl_SDL__vglvideo.h b/devel/sdl12/files/patch-src_video_vgl_SDL__vglvideo.h
index 640ae17..c6b440f 100644
--- a/devel/sdl12/files/patch-src_video_vgl_SDL__vglvideo.h
+++ b/devel/sdl12/files/patch-src_video_vgl_SDL__vglvideo.h
@@ -1,9 +1,9 @@
$FreeBSD$
---- /dev/null Mon Jan 22 20:53:10 2001
-+++ src/video/vgl/SDL_vglvideo.h Mon Jan 22 18:16:51 2001
-@@ -0,0 +1,50 @@
+--- src/video/vgl/SDL_vglvideo.h.orig Sat Jan 27 17:25:12 2001
++++ src/video/vgl/SDL_vglvideo.h Sat Jan 27 17:30:56 2001
+@@ -0,0 +1,69 @@
+/*
+ SDL - Simple DirectMedia Layer
+ Copyright (C) 1997, 1998, 1999, 2000 Sam Lantinga
@@ -34,6 +34,10 @@ $FreeBSD$
+#ifndef _SDL_vglvideo_h
+#define _SDL_vglvideo_h
+
++#include <sys/fbio.h>
++#include <sys/consio.h>
++#include <vgl.h>
++
+#include "SDL_mouse.h"
+#include "SDL_mutex.h"
+#include "SDL_sysvideo.h"
@@ -41,16 +45,31 @@ $FreeBSD$
+/* Hidden "this" pointer for the video functions */
+#define _THIS SDL_VideoDevice *this
+
++typedef struct {
++ int ModeId;
++ int Depth;
++ int Rmask;
++ int Gmask;
++ int Bmask;
++ VGLBitmap ModeInfo;
++} VGLMode;
++
+/* Private display data */
+struct SDL_PrivateVideoData {
+#define NUM_MODELISTS 4 /* 8, 16, 24, and 32 bits-per-pixel */
+ int SDL_nummodes[NUM_MODELISTS];
+ SDL_Rect **SDL_modelist[NUM_MODELISTS];
+ SDL_mutex *hw_lock;
++ VGLMode *VGLCurMode;
++ int flip_page;
++ byte *flip_address[2];
+};
+/* Old variable names */
-+#define SDL_nummodes (this->hidden->SDL_nummodes)
-+#define SDL_modelist (this->hidden->SDL_modelist)
-+#define hw_lock (this->hidden->hw_lock)
++#define SDL_nummodes (this->hidden->SDL_nummodes)
++#define SDL_modelist (this->hidden->SDL_modelist)
++#define hw_lock (this->hidden->hw_lock)
++#define VGLCurMode (this->hidden->VGLCurMode)
++#define flip_page (this->hidden->flip_page)
++#define flip_address (this->hidden->flip_address)
+
+#endif /* _SDL_vglvideo_h */
diff --git a/devel/sdl12/files/patch-src_video_x11_SDL__x11events.c b/devel/sdl12/files/patch-src_video_x11_SDL__x11events.c
new file mode 100644
index 0000000..0951242
--- /dev/null
+++ b/devel/sdl12/files/patch-src_video_x11_SDL__x11events.c
@@ -0,0 +1,15 @@
+
+$FreeBSD$
+
+--- src/video/x11/SDL_x11events.c 2001/01/27 17:49:30 1.1
++++ src/video/x11/SDL_x11events.c 2001/01/27 17:49:54
+@@ -35,7 +35,9 @@
+ #ifdef __SVR4
+ #include <X11/Sunkeysym.h>
+ #endif
++#include <sys/types.h>
+ #include <sys/time.h>
++#include <unistd.h>
+
+ #include "SDL.h"
+ #include "SDL_syswm.h"
OpenPOWER on IntegriCloud