summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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