Commit 2c07cb4d authored by Sam Lantinga's avatar Sam Lantinga

*** empty log message ***

--HG--
extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%40310
parent d6eaf8e9
README by Mike Gorchak <mike@malva.ua>
OpenGL support was experimentally added in window mode (in
fullscreen mode not yet). If you have QNX RtP v6.1.0 w/ or w/o
Patch A you must download new Photon3D runtime from http://de-
velopers.qnx.com. The versions of OS before 6.1.0 are not sup-
ported.
OpenGL in window mode works well and stable, in fullscreen
mode too, but fullscreen mode has not been heavily tested.
If you have QNX RtP 6.1.0 w/ or w/o Patch A you must download
new Photon3D runtime from http://developers.qnx.com. The versions
of OS before 6.1.0 are not supported.
Problems:
1. Fullscreen mode (in OpenGL mode) has not been written yet.
2. Photon has some errors in detecting how much bits per pi-
xel videomode has.
3. No shared libraries yet. We need manually set flag to
1. While creating OpenGL context artificially selected software
renderer mode (QSSL made acceleration only for Voodoo boards
in fullscreen mode, sorry but I don't have this board, if you
want acceleration - you may remove some line in source).
2. Photon has some errors in detecting how much bits per pixel
videomode has.
3. No shared libraries yet. We need manually set flag to
'configure' --disable-shared.
Some building issues:
......
......@@ -155,54 +155,52 @@ int ph_GetVideoModes(_THIS)
SDL_Rect **ph_ListModes(_THIS, SDL_PixelFormat *format, Uint32 flags)
{
int i = 0;
int j = 0;
SDL_Rect Amodelist[PH_MAX_VIDEOMODES];
int i = 0;
int j = 0;
SDL_Rect Amodelist[PH_MAX_VIDEOMODES];
for (i=0; i<PH_MAX_VIDEOMODES; i++)
{
SDL_modearray[i]=&SDL_modelist[i];
}
if (PgGetVideoModeList( &mode_list ) < 0)
{
fprintf(stderr,"error: PgGetVideoModeList failed\n");
return NULL;
}
for (i=0; i<PH_MAX_VIDEOMODES; i++)
{
SDL_modearray[i]=&SDL_modelist[i];
}
mode_info.bits_per_pixel = 0;
if (PgGetVideoModeList( &mode_list ) < 0)
{
fprintf(stderr,"error: PgGetVideoModeList failed\n");
return NULL;
}
for (i=0; i < mode_list.num_modes; i++)
{
if (PgGetVideoModeInfo(mode_list.modes[i], &mode_info) < 0)
{
fprintf(stderr,"error: PgGetVideoModeInfo failed on mode: 0x%x\n",
mode_list.modes[i]);
return NULL;
}
mode_info.bits_per_pixel = 0;
if(mode_info.bits_per_pixel == format->BitsPerPixel)
{
Amodelist[j].w = mode_info.width;
Amodelist[j].h = mode_info.height;
Amodelist[j].x = 0;
Amodelist[j].y = 0;
j++;
}
}
for (i=0; i < mode_list.num_modes; i++)
{
if (PgGetVideoModeInfo(mode_list.modes[i], &mode_info) < 0)
{
fprintf(stderr,"error: PgGetVideoModeInfo failed on mode: 0x%x\n", mode_list.modes[i]);
return NULL;
}
if(mode_info.bits_per_pixel == format->BitsPerPixel)
{
Amodelist[j].w = mode_info.width;
Amodelist[j].h = mode_info.height;
Amodelist[j].x = 0;
Amodelist[j].y = 0;
j++;
}
}
//reorder biggest for smallest, assume width dominates
/* reorder biggest for smallest, assume width dominates */
for(i=0; i< j ; i++)
{
SDL_modelist[i].w = Amodelist[j - i -1].w;
SDL_modelist[i].h = Amodelist[j - i -1].h;
SDL_modelist[i].x = Amodelist[j - i -1].x;
SDL_modelist[i].y = Amodelist[j - i -1].y;
}
SDL_modearray[j]=NULL;
for(i=0; i<j; i++)
{
SDL_modelist[i].w = Amodelist[j - i -1].w;
SDL_modelist[i].h = Amodelist[j - i -1].h;
SDL_modelist[i].x = Amodelist[j - i -1].x;
SDL_modelist[i].y = Amodelist[j - i -1].y;
}
SDL_modearray[j]=NULL;
return SDL_modearray;
return SDL_modearray;
}
void ph_FreeVideoModes(_THIS)
......@@ -281,82 +279,53 @@ static void set_best_resolution(_THIS, int width, int height)
}
}
/*
static void get_real_resolution(_THIS, int* w, int* h)
{
if ( use_vidmode ) {
//PgDisplaySettings_t settings;
PgVideoModeInfo_t current_mode_info;
PgHWCaps_t my_hwcaps;
// int unused;
// if (PgGetVideoMode( &settings ) >= 0) {
// *w = settings.xres;
// *h = settings.yres;
// return;
// }
if (PgGetGraphicsHWCaps(&my_hwcaps) >= 0)
{
if (PgGetVideoModeInfo(my_hwcaps.current_video_mode, &current_mode_info) < 0)
{
fprintf(stderr,"get_real_resolution: PgGetVideoModeInfo failed\n");
}
*w = current_mode_info.width;
*h = current_mode_info.height;
}
}
// *w = DisplayWidth(SDL_Display, SDL_Screen);
// *h = DisplayHeight(SDL_Display, SDL_Screen);
}
*/
int ph_ResizeFullScreen(_THIS)
{
if ( currently_fullscreen ) {
if (currently_fullscreen) {
set_best_resolution(this, current_w, current_h);
}
return(1);
return (1);
}
int get_mode(int width, int height, int bpp)
/* return the mode associated with width, height and bpp */
/* if there is no mode then zero is returned */
/* if there is no mode then zero is returned */
int get_mode(int width, int height, int bpp)
{
int i;
int i;
if(width<640)
{
width=640;
}
if(height<480)
{
height=480;
}
if(width <640)
width = 640;
if(height < 480)
height = 480;
if (PgGetVideoModeList(&mode_list) < 0)
{
fprintf(stderr,"error: PgGetVideoModeList failed\n");
return -1;
}
/* search list for exact match */
for (i=0;i<mode_list.num_modes;i++)
{
if (PgGetVideoModeInfo(mode_list.modes[i], &mode_info) < 0)
{
fprintf(stderr,"error: PgGetVideoModeInfo failed\n");
return 0;
}
if (PgGetVideoModeList( &mode_list ) < 0)
{
fprintf(stderr,"error: PgGetVideoModeList failed\n");
return -1;
}
if ((mode_info.width == width) &&
(mode_info.height == height) &&
(mode_info.bits_per_pixel == bpp))
{
return mode_list.modes[i];
}
}
// search list for exact match
for (i=0;i<mode_list.num_modes;i++)
{
if (PgGetVideoModeInfo(mode_list.modes[i], &mode_info) < 0)
{
fprintf(stderr,"error: PgGetVideoModeInfo failed\n");
return 0;
}
if ((mode_info.width == width) &&
(mode_info.height == height) &&
(mode_info.bits_per_pixel == bpp))
{
return mode_list.modes[i];
}
}
return (i == mode_list.num_modes) ? 0 : mode_list.modes[i];
return (i == mode_list.num_modes) ? 0 : mode_list.modes[i];
}
int get_mode_any_format(int width, int height, int bpp)
......@@ -421,7 +390,7 @@ int get_mode_any_format(int width, int height, int bpp)
return mode_list.modes[ closest ];
}
else
return 0;
return 0;
}
void ph_WaitMapped(_THIS);
......@@ -430,78 +399,88 @@ void ph_QueueEnterFullScreen(_THIS);
int ph_ToggleFullScreen(_THIS, int on)
{
if(currently_fullscreen)
ph_LeaveFullScreen(this);
else
ph_EnterFullScreen(this);
if (currently_fullscreen)
{
return ph_LeaveFullScreen(this);
}
else
{
return ph_EnterFullScreen(this);
}
return 0;
return 0;
}
int ph_EnterFullScreen(_THIS)
{
if ( ! currently_fullscreen )
{
if (old_video_mode==-1)
{
PgGetGraphicsHWCaps(&graphics_card_caps);
old_video_mode=graphics_card_caps.current_video_mode;
old_refresh_rate=graphics_card_caps.current_rrate;
}
if(OCImage.direct_context == NULL)
OCImage.direct_context=(PdDirectContext_t*)PdCreateDirectContext();
if( !OCImage.direct_context )
fprintf(stderr, "error: Can't create direct context\n" );
/* Remove the cursor if in full screen mode */
/*
region_info.cursor_type = Ph_CURSOR_NONE;
region_info.rid=PtWidgetRid(window);
PhRegionChange(Ph_REGION_CURSOR,0,&region_info,NULL,NULL);
*/
if (!currently_fullscreen)
{
if ((this->screen->flags & SDL_OPENGL)==SDL_OPENGL)
{
#ifdef HAVE_OPENGL
#endif /* HAVE_OPENGL */
return 0;
}
else
{
if (old_video_mode==-1)
{
PgGetGraphicsHWCaps(&graphics_card_caps);
old_video_mode=graphics_card_caps.current_video_mode;
old_refresh_rate=graphics_card_caps.current_rrate;
}
PdDirectStart( OCImage.direct_context );
if(OCImage.direct_context == NULL)
{
OCImage.direct_context=(PdDirectContext_t*)PdCreateDirectContext();
}
if(!OCImage.direct_context)
{
fprintf(stderr, "error: Can't create direct context\n" );
}
currently_fullscreen = 1;
}
PdDirectStart(OCImage.direct_context);
currently_fullscreen = 1;
}
}
return 1;
return 1;
}
int ph_LeaveFullScreen(_THIS )
{
PgDisplaySettings_t mymode_settings;
PgDisplaySettings_t mymode_settings;
if ( currently_fullscreen )
{
PdDirectStop(OCImage.direct_context);
PdReleaseDirectContext(OCImage.direct_context);
if (currently_fullscreen)
{
if ((this->screen->flags & SDL_OPENGL)==SDL_OPENGL)
{
#ifdef HAVE_OPENGL
#endif /* HAVE_OPENGL */
return 0;
}
else
{
PdDirectStop(OCImage.direct_context);
PdReleaseDirectContext(OCImage.direct_context);
//Restore old video mode
if (old_video_mode != -1)
{
mymode_settings.mode= (unsigned short) old_video_mode;
mymode_settings.refresh= (unsigned short) old_refresh_rate;
mymode_settings.flags = 0;
if(PgSetVideoMode(&mymode_settings) < 0)
{
fprintf(stderr,"error: PgSetVideoMode failed\n");
}
}
old_video_mode=-1;
old_refresh_rate=-1;
// Restore cursor
}
return 1;
/* Restore old video mode */
if (old_video_mode != -1)
{
mymode_settings.mode= (unsigned short) old_video_mode;
mymode_settings.refresh= (unsigned short) old_refresh_rate;
mymode_settings.flags = 0;
if (PgSetVideoMode(&mymode_settings) < 0)
{
fprintf(stderr,"error: PgSetVideoMode failed\n");
}
}
old_video_mode=-1;
old_refresh_rate=-1;
}
}
return 1;
}
This diff is collapsed.
......@@ -19,26 +19,6 @@
Sam Lantinga
slouken@libsdl.org
*/
/*
static PhEvent_t *event;
static PtAppContext_t app;
static PtWidget_t *window;
static PgVideoModes_t modelist;
static PdOffscreenContext_t *Buff[2];
static PdDirectContext_t *directContext;
static PhRect_t screenRect,windowRect;
static PgColor_t currRGB;
static PhPoint_t zeroPoint;
static char keyque[ QUE_SIZE ],keyMatrix[256];
static int queput,queget;
static int modeSet;
static PgHWCaps_t hwCaps;
static PgDisplaySettings_t mode_settings;
static int rshift1,rshift2,gshift1,gshift2,bshift1,bshift2;
static int backPitch;
static unsigned RBitMask,GBitMask,BBitMask;
static unsigned TranslatedFillColor;
*/
#ifndef _SDL_ph_video_h
#define _SDL_ph_video_h
......@@ -50,7 +30,9 @@ static unsigned TranslatedFillColor;
#include "Pt.h"
#include <photon/Pg.h>
#include <photon/PdDirect.h>
#ifdef HAVE_OPENGL
#include <photon/PdGL.h>
#endif /* HAVE_OPENGL */
/* Hidden "this" pointer for the video functions */
#define _THIS SDL_VideoDevice *this
......@@ -76,31 +58,32 @@ struct SDL_PrivateVideoData {
int local_ph; /* Flag: true if local display */
PtAppContext_t app;
PgDisplaySettings_t mode_settings;
PtWidget_t *window; /* used to handle input events */
PhImage_t *image; /* used to display image */
struct {
PdDirectContext_t *direct_context;
PdOffscreenContext_t *offscreen_context;
VidPtr_t dc_ptr;
FRAMEDATA *CurrentFrameData;
FRAMEDATA *FrameData0;
FRAMEDATA *FrameData1;
int current;
long Stride;
long flags;
} ocimage;
PtWidget_t *Window; /* used to handle input events */
PhImage_t *image; /* used to display image */
#ifdef HAVE_OPENGL
PdOpenGLContext_t* OGLContext;
#endif /* HAVE_OPENGL */
struct {
PdDirectContext_t *direct_context;
PdOffscreenContext_t *offscreen_context;
VidPtr_t dc_ptr;
FRAMEDATA *CurrentFrameData;
FRAMEDATA *FrameData0;
FRAMEDATA *FrameData1;
int current;
long Stride;
long flags;
} ocimage;
PhDrawContext_t *ScreenDC; //=NULL;
signed short old_video_mode; //=-1;
signed short old_refresh_rate; //=-1;
PgHWCaps_t graphics_card_caps;
signed short old_video_mode; //=-1;
signed short old_refresh_rate; //=-1;
PgHWCaps_t graphics_card_caps;
PdDirectContext_t *directContext;
PdOffscreenContext_t *Buff[2];
struct _Ph_ctrl* ctrl_channel;
PhGC_t *Pt_GC, *Pg_GC; /* Graphic contexts to switch between Pt and Pg APIs */
PdDirectContext_t *directContext;
PdOffscreenContext_t *Buff[2];
struct _Ph_ctrl* ctrl_channel;
/* The variables used for displaying graphics */
......@@ -113,15 +96,15 @@ struct SDL_PrivateVideoData {
int x;
int y;
} mouse_last;
struct {
int numerator;
int denominator;
int threshold;
} mouse_accel;
int mouse_relative;
WMcursor* BlankCursor;
int mouse_relative;
WMcursor* BlankCursor;
int depth; /* current visual depth (not bpp) */
......@@ -136,40 +119,39 @@ struct SDL_PrivateVideoData {
int blit_queued;
short *iconcolors; /* List of colors used by the icon */
PhEvent_t* event;
PhEvent_t* event;
};
#define local_ph (this->hidden->local_ph)
#define app (this->hidden->app)
#define mode_settings (this->hidden->mode_settings)
#define window (this->hidden->window)
#define directContext (this->hidden->directContext)
#define Buff (this->hidden->Buff)
#define ctrl_channel (this->hidden->ctrl_channel)
#define SDL_Image (this->hidden->image)
#define OCImage (this->hidden->ocimage)
#define old_video_mode (this->hidden->old_video_mode)
#define old_refresh_rate (this->hidden->old_refresh_rate)
#define graphics_card_caps (this->hidden->graphics_card_caps)
#define Pt_GC (this->hidden->Pt_GC)
#define Pg_GC (this->hidden->Pg_GC)
#define local_ph (this->hidden->local_ph)
#define app (this->hidden->app)
#define mode_settings (this->hidden->mode_settings)
#define window (this->hidden->Window)
#define oglctx (this->hidden->OGLContext)
#define directContext (this->hidden->directContext)
#define Buff (this->hidden->Buff)
#define ctrl_channel (this->hidden->ctrl_channel)
#define SDL_Image (this->hidden->image)
#define OCImage (this->hidden->ocimage)
#define old_video_mode (this->hidden->old_video_mode)
#define old_refresh_rate (this->hidden->old_refresh_rate)
#define graphics_card_caps (this->hidden->graphics_card_caps)
/* Old variable names */
#define swap_pixels (this->hidden->swap_pixels)
#define current_w (this->hidden->current_w)
#define current_h (this->hidden->current_h)
#define mouse_last (this->hidden->mouse_last)
#define mouse_accel (this->hidden->mouse_accel)
#define mouse_relative (this->hidden->mouse_relative)
#define saved_mode (this->hidden->saved_mode)
#define saved_view (this->hidden->saved_view)
#define use_vidmode (this->hidden->use_vidmode)
#define currently_fullscreen (this->hidden->currently_fullscreen)
#define switch_waiting (this->hidden->switch_waiting)
#define switch_time (this->hidden->switch_time)
#define blit_queued (this->hidden->blit_queued)
#define SDL_iconcolorIs (this->hidden->iconcolors)
#define event (this->hidden->event)
#define SDL_BlankCursor (this->hidden->BlankCursor)
#define swap_pixels (this->hidden->swap_pixels)
#define current_w (this->hidden->current_w)
#define current_h (this->hidden->current_h)
#define mouse_last (this->hidden->mouse_last)
#define mouse_accel (this->hidden->mouse_accel)
#define mouse_relative (this->hidden->mouse_relative)
#define saved_mode (this->hidden->saved_mode)
#define saved_view (this->hidden->saved_view)
#define use_vidmode (this->hidden->use_vidmode)
#define currently_fullscreen (this->hidden->currently_fullscreen)
#define switch_waiting (this->hidden->switch_waiting)
#define switch_time (this->hidden->switch_time)
#define blit_queued (this->hidden->blit_queued)
#define SDL_iconcolorIs (this->hidden->iconcolors)
#define event (this->hidden->event)
#define SDL_BlankCursor (this->hidden->BlankCursor)
#endif /* _SDL_x11video_h */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment