tb1/tb1_linux/svmwgraph/vmw_setup.c

174 lines
5.5 KiB
C
Raw Normal View History

2000-09-16 23:23:00 +00:00
/* Routines for setting up structures for the Super VMW graphics library */
2000-09-16 04:49:00 +00:00
2000-09-16 23:23:00 +00:00
#include "svmwgraph.h"
#include "sdl_svmwgraph.h" /* Make this dynamic somehow? */
2000-10-15 05:04:00 +00:00
#include "null_svmwgraph.h"
#include "curses_svmwgraph.h"
2000-10-28 02:09:00 +00:00
#include "opengl_svmwgraph.h"
2000-09-16 04:49:00 +00:00
2000-09-16 23:23:00 +00:00
#include <stdio.h> /* For printf */
#include <stdlib.h> /* For Memory Allocation */
2000-09-16 04:49:00 +00:00
void *(*vmwSetupGraphics)(int *xsize,int *ysize, int *bpp,
2000-09-22 04:38:00 +00:00
int fullscreen,int verbose);
2000-09-16 23:23:00 +00:00
void (*vmwBlitMemToDisplay)(vmwSVMWGraphState *display, vmwVisual *source);
2000-09-22 06:13:00 +00:00
void (*vmwFlushPalette)(vmwSVMWGraphState *state);
2000-09-22 04:38:00 +00:00
2000-09-16 23:23:00 +00:00
void (*vmwClearKeyboardBuffer)(void);
int (*vmwGetInput)(void);
2000-10-15 05:04:00 +00:00
void (*vmwCloseGraphics)(void);
2000-09-16 23:23:00 +00:00
vmwSVMWGraphState *vmwSetupSVMWGraph(int display_type,int xsize,int ysize,
2000-09-18 03:50:00 +00:00
int bpp,int scale,int fullscreen,
int verbose) {
2000-09-22 04:38:00 +00:00
vmwSVMWGraphState *temp_state;
2000-09-22 04:38:00 +00:00
if ( (temp_state=calloc(1,sizeof(vmwSVMWGraphState)) )==NULL) {
printf("Error allocating memory!\n");
return NULL;
}
/* Setup Setup routines */
switch (display_type) {
case VMW_NULLTARGET:
2000-10-28 02:09:00 +00:00
vmwSetupGraphics=null_setupGraphics;
2000-10-15 05:04:00 +00:00
break;
case VMW_CURSESTARGET:
2000-10-28 02:09:00 +00:00
#ifdef CURSES_TARGET
vmwSetupGraphics=curses_setupGraphics;
#endif
2000-10-15 05:04:00 +00:00
break;
case VMW_OPENGLTARGET:
2000-10-28 02:09:00 +00:00
#ifdef OPENGL_TARGET
vmwSetupGraphics=openGL_setupGraphics;
#endif
break;
case VMW_SDLTARGET:
2000-10-28 02:09:00 +00:00
#ifdef SDL_TARGET
vmwSetupGraphics=SDL_setupGraphics;
#endif
2000-10-15 05:04:00 +00:00
break;
2000-09-22 04:38:00 +00:00
default: printf("ERROR! Unknown Display Target %i.\n",display_type);
return NULL;
}
2000-09-22 04:38:00 +00:00
temp_state->bpp=bpp;
temp_state->xsize=xsize;
temp_state->ysize=ysize;
temp_state->scale=scale;
temp_state->default_font=NULL;
temp_state->palette_size=256;
2000-09-22 04:38:00 +00:00
if ( (temp_state->palette=calloc(temp_state->palette_size,sizeof(int)) )==NULL) {
printf("Error allocating palette of size %i!\n",temp_state->palette_size);
return NULL;
}
2000-10-07 06:39:00 +00:00
if ( (temp_state->actual_pal=calloc(temp_state->palette_size,sizeof(vmw24BitPal)) )==NULL) {
printf("Error allocating actual palette of size %i!\n",temp_state->palette_size);
return NULL;
}
if (vmwSetupGraphics==NULL) {
fprintf(stderr,"Unsupported graphics target!\n");
return NULL;
}
2000-09-22 04:38:00 +00:00
/* Attempt to get desired graphics state */
temp_state->output_screen=vmwSetupGraphics(&temp_state->xsize,
2000-10-15 05:04:00 +00:00
&temp_state->ysize,
&temp_state->bpp,
fullscreen,verbose);
2000-10-28 02:09:00 +00:00
if (temp_state->output_screen==NULL) return NULL;
/* Setup proper blitter and others*/
2000-09-22 04:38:00 +00:00
switch (display_type) {
2000-10-15 05:04:00 +00:00
case VMW_NULLTARGET:
vmwFlushPalette=null_flushPalette;
vmwClearKeyboardBuffer=null_clearKeyboardBuffer;
vmwBlitMemToDisplay=null_BlitMem;
vmwGetInput=null_getInput;
vmwCloseGraphics=null_closeGraphics;
break;
2000-10-28 02:09:00 +00:00
case VMW_OPENGLTARGET:
#ifdef OPENGL_TARGET
vmwFlushPalette=openGL_flushPalette;
2001-10-29 06:18:00 +00:00
vmwClearKeyboardBuffer=SDL_clearKeyboardBuffer;
2000-10-28 02:09:00 +00:00
vmwBlitMemToDisplay=openGL_BlitMem;
2001-10-29 06:18:00 +00:00
vmwGetInput=SDL_getInput;
2000-10-28 02:09:00 +00:00
vmwCloseGraphics=openGL_closeGraphics;
#endif
break;
2000-10-15 05:04:00 +00:00
case VMW_CURSESTARGET:
2000-10-28 02:09:00 +00:00
#ifdef CURSES_TARGET
2000-10-15 05:04:00 +00:00
vmwFlushPalette=curses_flushPalette;
vmwClearKeyboardBuffer=curses_clearKeyboardBuffer;
vmwBlitMemToDisplay=curses_BlitMem;
vmwGetInput=curses_getInput;
vmwCloseGraphics=curses_closeGraphics;
2000-10-28 02:09:00 +00:00
#endif
2000-10-15 05:04:00 +00:00
break;
2000-09-22 04:38:00 +00:00
case VMW_SDLTARGET:
2000-10-28 02:09:00 +00:00
#ifdef SDL_TARGET
2000-09-22 04:38:00 +00:00
if (temp_state->bpp==8) {
2000-10-16 03:56:00 +00:00
if (scale==1) {
vmwBlitMemToDisplay=SDL_NoScale8bpp_BlitMem;
} else {
vmwBlitMemToDisplay=SDL_Double8bpp_BlitMem;
}
2000-09-22 04:38:00 +00:00
}
if (temp_state->bpp==16) {
2000-09-22 04:38:00 +00:00
if (scale==1) {
vmwBlitMemToDisplay=SDL_NoScale16bpp_BlitMem;
} else {
vmwBlitMemToDisplay=SDL_Double16bpp_BlitMem;
}
}
if (temp_state->bpp==24) {
printf("ERROR! 24bpp not supported!\n");
if (scale==1) {
2001-10-29 06:18:00 +00:00
vmwBlitMemToDisplay=SDL_NoScale16bpp_BlitMem;
} else {
vmwBlitMemToDisplay=SDL_Double16bpp_BlitMem;
}
}
if (temp_state->bpp>=32) {
2001-10-29 06:18:00 +00:00
if (scale==1) {
vmwBlitMemToDisplay=SDL_NoScale32bpp_BlitMem;
} else {
vmwBlitMemToDisplay=SDL_Double32bpp_BlitMem;
}
}
2001-10-29 06:18:00 +00:00
2000-10-15 05:04:00 +00:00
vmwFlushPalette=SDL_flushPalette;
2000-09-22 04:38:00 +00:00
vmwClearKeyboardBuffer=SDL_clearKeyboardBuffer;
vmwGetInput=SDL_getInput;
2000-10-15 05:04:00 +00:00
vmwCloseGraphics=SDL_closeGraphics;
2000-10-28 02:09:00 +00:00
#endif
2000-09-22 04:38:00 +00:00
break;
2000-09-16 23:23:00 +00:00
default: printf("ERROR! Unknown Display Target %i.\n",display_type);
return NULL;
}
2000-09-22 04:38:00 +00:00
2000-09-16 23:23:00 +00:00
return temp_state;
2000-09-16 04:49:00 +00:00
}
2000-09-22 04:38:00 +00:00
vmwVisual *vmwSetupVisual(int xsize,int ysize) {
2000-09-16 23:23:00 +00:00
vmwVisual *temp_visual;
if ( (temp_visual=calloc(1,sizeof(vmwVisual)) )==NULL) {
printf("Error allocating memory for visual!\n");
return NULL;
}
temp_visual->xsize=xsize;
temp_visual->ysize=ysize;
if ( (temp_visual->memory=
calloc(xsize*ysize,sizeof(unsigned char)) )==NULL) {
printf("Error allocating %i x %i visual memory!\n",xsize,ysize);
return NULL;
}
return temp_visual;
2000-09-16 04:49:00 +00:00
}