Commit dbd1cb0c authored by Sam Lantinga's avatar Sam Lantinga

Date: Sat, 30 Aug 2003 16:28:10 +0300

From: "Mike Gorchak"
Subject: Re: SDL 1.2.6

- minor changes about shared library building under QNX6 into README.QNX
- added forgotten libSDLmain.a into distribution, SDL.qpg.in
- added header guards to the all headers.
- fixed fullscreen double buffered mode.
- fixed Photon crashes after/during using fullscreen OpenGL modes.
- added GL_MakeCurrent function.
- added SDL_VIDEOEXPOSE event, when OpenGL window have been resized
- added more HAVE_OPENGL checks to avoid dead code compilation without using OpenGL
- finished code reorganization (began into previous patches).

--HG--
extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%40702
parent 22bedf99
......@@ -77,7 +77,8 @@ Shared library building:
script you must manually delete the libtool.m4 stuff from the acinclu-
de.m4 file (it comes after the ESD detection code up to the end of the
file), because the libtool stuff in the acinclude.m4 file is very old
and doesn't know anything about QNX. Just remove it and run autogen.sh.
and doesn't know anything about QNX. Just remove it, then run
"libtoolize --force --copy" and after that run autogen.sh.
======================================================================
Some building issues:
......
......@@ -30,6 +30,7 @@
<QPG:Add filetype="symlink" file="libSDL-1.0.so.0" install="/opt/lib/" linkto="libSDL-1.2.so.0"/>
<QPG:Add permissions="0644" file="./src/.libs/libSDL.a" install="/opt/lib/"/>
<QPG:Add permissions="0644" file="./src/.libs/libSDL.lai" install="/opt/lib/libSDL.la"/>
<QPG:Add permissions="0644" file="./src/main/libSDLmain.a" install="/opt/lib/"/>
<QPG:Add permissions="0644" file="./include/*.h" install="/opt/include/SDL/"/>
<QPG:Add permissions="0755" file="./sdl-config" install="/opt/bin/"/>
<QPG:Add permissions="0644" file="./BUGS" install="/usr/doc/SDL12/"/>
......
......@@ -20,10 +20,13 @@
slouken@libsdl.org
*/
#ifndef __SDL_PH_EVENTS_H__
#define __SDL_PH_EVENTS_H__
#ifdef SAVE_RCSID
static char rcsid =
"@(#) $Id$";
#endif
#endif /* SAVE_RCSID */
#include "SDL_ph_video.h"
......@@ -32,3 +35,5 @@ static char rcsid =
/* Functions to be exported */
extern void ph_InitOSKeymap(_THIS);
extern void ph_PumpEvents(_THIS);
#endif /* __SDL_PH_EVENTS_H__ */
......@@ -186,13 +186,6 @@ int ph_SetupOCImage(_THIS, SDL_Surface *screen)
return 0;
}
int ph_SetupOpenGLImage(_THIS, SDL_Surface* screen)
{
this->UpdateRects = ph_OpenGLUpdate;
return 0;
}
int ph_SetupFullScreenImage(_THIS, SDL_Surface* screen)
{
OCImage.flags = screen->flags;
......@@ -210,7 +203,7 @@ int ph_SetupFullScreenImage(_THIS, SDL_Surface* screen)
PgGetPalette(syspalph);
}
OCImage.offscreen_context = PdCreateOffscreenContext(0, 0, 0, Pg_OSC_MAIN_DISPLAY);
OCImage.offscreen_context = PdCreateOffscreenContext(0, 0, 0, Pg_OSC_MAIN_DISPLAY | Pg_OSC_MEM_PAGE_ALIGN | Pg_OSC_CRTC_SAFE);
if (OCImage.offscreen_context == NULL)
{
SDL_SetError("ph_SetupFullScreenImage(): PdCreateOffscreenContext() function failed !\n");
......@@ -219,7 +212,7 @@ int ph_SetupFullScreenImage(_THIS, SDL_Surface* screen)
if ((screen->flags & SDL_DOUBLEBUF) == SDL_DOUBLEBUF)
{
OCImage.offscreen_backcontext = PdDupOffscreenContext(OCImage.offscreen_context, Pg_OSC_CRTC_SAFE);
OCImage.offscreen_backcontext = PdDupOffscreenContext(OCImage.offscreen_context, Pg_OSC_CRTC_SAFE | Pg_OSC_MEM_PAGE_ALIGN);
if (OCImage.offscreen_backcontext == NULL)
{
SDL_SetError("ph_SetupFullScreenImage(): PdCreateOffscreenContext(back) function failed !\n");
......@@ -272,8 +265,122 @@ int ph_SetupFullScreenImage(_THIS, SDL_Surface* screen)
return 0;
}
void ph_DestroyImage(_THIS, SDL_Surface *screen)
#ifdef HAVE_OPENGL
static int ph_SetupOpenGLContext(_THIS, int width, int height, int bpp, Uint32 flags)
{
PhDim_t dim;
uint64_t OGLAttrib[PH_OGL_MAX_ATTRIBS];
int exposepost=0;
int OGLargc;
dim.w=width;
dim.h=height;
if ((oglctx!=NULL) && (oglflags==flags) && (oglbpp==bpp))
{
PdOpenGLContextResize(oglctx, &dim);
PhDCSetCurrent(oglctx);
return 0;
}
else
{
if (oglctx!=NULL)
{
PhDCSetCurrent(NULL);
PhDCRelease(oglctx);
oglctx=NULL;
exposepost=1;
}
}
OGLargc=0;
if (this->gl_config.depth_size)
{
OGLAttrib[OGLargc++]=PHOGL_ATTRIB_DEPTH_BITS;
OGLAttrib[OGLargc++]=this->gl_config.depth_size;
}
if (this->gl_config.stencil_size)
{
OGLAttrib[OGLargc++]=PHOGL_ATTRIB_STENCIL_BITS;
OGLAttrib[OGLargc++]=this->gl_config.stencil_size;
}
OGLAttrib[OGLargc++]=PHOGL_ATTRIB_FORCE_SW;
if (flags & SDL_FULLSCREEN)
{
OGLAttrib[OGLargc++]=PHOGL_ATTRIB_FULLSCREEN;
OGLAttrib[OGLargc++]=PHOGL_ATTRIB_DIRECT;
OGLAttrib[OGLargc++]=PHOGL_ATTRIB_FULLSCREEN_BEST;
OGLAttrib[OGLargc++]=PHOGL_ATTRIB_FULLSCREEN_CENTER;
}
OGLAttrib[OGLargc++]=PHOGL_ATTRIB_NONE;
if (this->gl_config.double_buffer)
{
oglctx=PdCreateOpenGLContext(2, &dim, 0, OGLAttrib);
}
else
{
oglctx=PdCreateOpenGLContext(1, &dim, 0, OGLAttrib);
}
if (oglctx==NULL)
{
SDL_SetError("ph_SetupOpenGLContext(): cannot create OpenGL context !\n");
return (-1);
}
PhDCSetCurrent(oglctx);
PtFlush();
oglflags=flags;
oglbpp=bpp;
if (exposepost!=0)
{
/* OpenGL context has been recreated, so report about this fact */
SDL_PrivateExpose();
}
return 0;
}
int ph_SetupOpenGLImage(_THIS, SDL_Surface* screen)
{
this->UpdateRects = ph_OpenGLUpdate;
screen->pixels=NULL;
screen->pitch=NULL;
if (ph_SetupOpenGLContext(this, screen->w, screen->h, screen->format->BitsPerPixel, screen->flags)!=0)
{
screen->flags &= ~SDL_OPENGL;
return -1;
}
return 0;
}
#endif /* HAVE_OPENGL */
void ph_DestroyImage(_THIS, SDL_Surface* screen)
{
#ifdef HAVE_OPENGL
if ((screen->flags & SDL_OPENGL)==SDL_OPENGL)
{
if (oglctx)
{
PhDCSetCurrent(NULL);
PhDCRelease(oglctx);
oglctx=NULL;
oglflags=0;
oglbpp=0;
}
return;
}
#endif /* HAVE_OPENGL */
if (currently_fullscreen)
{
/* if we right now in 8bpp fullscreen we must release palette */
......@@ -320,10 +427,16 @@ void ph_DestroyImage(_THIS, SDL_Surface *screen)
}
}
int ph_SetupUpdateFunction(_THIS, SDL_Surface *screen, Uint32 flags)
int ph_SetupUpdateFunction(_THIS, SDL_Surface* screen, Uint32 flags)
{
ph_DestroyImage(this, screen);
#ifdef HAVE_OPENGL
if ((flags & SDL_OPENGL)==SDL_OPENGL)
{
return ph_SetupOpenGLImage(this, screen);
}
#endif /* HAVE_OPENGL */
if ((flags & SDL_FULLSCREEN)==SDL_FULLSCREEN)
{
return ph_SetupFullScreenImage(this, screen);
......@@ -332,43 +445,31 @@ int ph_SetupUpdateFunction(_THIS, SDL_Surface *screen, Uint32 flags)
{
return ph_SetupOCImage(this, screen);
}
if ((flags & SDL_OPENGL)==SDL_OPENGL)
{
return ph_SetupOpenGLImage(this, screen);
}
return ph_SetupImage(this, screen);
}
int ph_AllocHWSurface(_THIS, SDL_Surface *surface)
int ph_AllocHWSurface(_THIS, SDL_Surface* surface)
{
return(-1);
}
void ph_FreeHWSurface(_THIS, SDL_Surface *surface)
void ph_FreeHWSurface(_THIS, SDL_Surface* surface)
{
return;
}
int ph_FlipHWSurface(_THIS, SDL_Surface *screen)
int ph_FlipHWSurface(_THIS, SDL_Surface* screen)
{
PhArea_t area;
area.pos.x=0;
area.pos.y=0;
area.size.w=screen->w;
area.size.h=screen->h;
if ((screen->flags & SDL_FULLSCREEN) == SDL_FULLSCREEN)
{
PgWaitHWIdle();
if (OCImage.current==0)
{
PgSwapDisplay(OCImage.offscreen_context, 0);
OCImage.current=1;
screen->pitch = OCImage.offscreen_backcontext->pitch;
screen->pixels = OCImage.FrameData1;
// memcpy(OCImage.FrameData1, OCImage.FrameData0, OCImage.offscreen_context->shared_size);
PgContextBlitArea(OCImage.offscreen_context, &area, OCImage.offscreen_backcontext, &area);
PhDCSetCurrent(OCImage.offscreen_backcontext);
PgFlush();
}
......@@ -378,8 +479,6 @@ int ph_FlipHWSurface(_THIS, SDL_Surface *screen)
OCImage.current=0;
screen->pitch = OCImage.offscreen_context->pitch;
screen->pixels = OCImage.FrameData0;
// memcpy(OCImage.FrameData0, OCImage.FrameData1, OCImage.offscreen_context->shared_size);
PgContextBlitArea(OCImage.offscreen_backcontext, &area, OCImage.offscreen_context, &area);
PhDCSetCurrent(OCImage.offscreen_context);
PgFlush();
}
......@@ -397,12 +496,14 @@ void ph_UnlockHWSurface(_THIS, SDL_Surface *surface)
return;
}
#ifdef HAVE_OPENGL
void ph_OpenGLUpdate(_THIS, int numrects, SDL_Rect* rects)
{
this->GL_SwapBuffers(this);
return;
}
#endif /* HAVE_OPENGL */
void ph_NormalUpdate(_THIS, int numrects, SDL_Rect *rects)
{
......
......@@ -20,16 +20,20 @@
slouken@libsdl.org
*/
#ifndef __SDL_PH_IMAGE_H__
#define __SDL_PH_IMAGE_H__
#ifdef SAVE_RCSID
static char rcsid =
"@(#) $Id$";
#endif
#endif /* SAVE_RCSID */
#include "SDL_events_c.h"
#include "SDL_ph_video.h"
extern int ph_SetupImage(_THIS, SDL_Surface *screen);
extern void ph_DestroyImage(_THIS, SDL_Surface *screen);
extern int ph_SetupUpdateFunction(_THIS, SDL_Surface *screen, Uint32 flags);
extern int ph_SetupImage(_THIS, SDL_Surface* screen);
extern void ph_DestroyImage(_THIS, SDL_Surface* screen);
extern int ph_SetupUpdateFunction(_THIS, SDL_Surface* screen, Uint32 flags);
extern int ph_AllocHWSurface(_THIS, SDL_Surface *surface);
extern void ph_FreeHWSurface(_THIS, SDL_Surface *surface);
......@@ -41,3 +45,5 @@ extern void ph_NormalUpdate(_THIS, int numrects, SDL_Rect *rects);
extern void ph_OCUpdate(_THIS, int numrects, SDL_Rect *rects);
extern void ph_OCDCUpdate(_THIS, int numrects, SDL_Rect *rects);
extern void ph_OpenGLUpdate(_THIS, int numrects, SDL_Rect *rects);
#endif /* __SDL_PH_IMAGE_H__ */
......@@ -20,14 +20,13 @@
slouken@libsdl.org
*/
#ifndef __SDL_PH_MODES_H__
#define __SDL_PH_MODES_H__
#ifdef SAVE_RCSID
static char rcsid =
"@(#) $Id$";
#endif
#ifndef _PH_MODES_INCLUDED_
#define _PH_MODES_INCLUDED_
#endif /* SAVE_RCSID */
#include "SDL_ph_video.h"
......@@ -42,4 +41,4 @@ extern int ph_GetVideoMode(int width, int height, int bpp);
extern int get_mode_any_format(int width, int height, int bpp);
extern int ph_ToggleFullScreen(_THIS, int on);
#endif /* _PH_MODES_INCLUDED_ */
#endif /* __SDL_PH_MODES_H__ */
......@@ -120,10 +120,10 @@ WMcursor *ph_CreateWMCursor(_THIS, Uint8 *data, Uint8 *mask, int w, int h, int h
PhCursorDef_t ph_GetWMPhCursor(WMcursor *cursor)
{
return(*cursor->ph_cursor);
return (*cursor->ph_cursor);
}
int ph_ShowWMCursor(_THIS, WMcursor *cursor)
int ph_ShowWMCursor(_THIS, WMcursor* cursor)
{
PtArg_t args[3];
int nargs = 0;
......@@ -137,7 +137,15 @@ int ph_ShowWMCursor(_THIS, WMcursor *cursor)
/* looks like photon can't draw mouse cursor in direct mode */
if ((this->screen->flags & SDL_FULLSCREEN) == SDL_FULLSCREEN)
{
return (0);
/* disable the fake mouse in the fullscreen OpenGL mode */
if ((this->screen->flags & SDL_OPENGL) == SDL_OPENGL)
{
cursor=NULL;
}
else
{
return (0);
}
}
/* Set the photon cursor, or blank if cursor is NULL */
......@@ -167,6 +175,7 @@ int ph_ShowWMCursor(_THIS, WMcursor *cursor)
return (1);
}
void ph_WarpWMCursor(_THIS, Uint16 x, Uint16 y)
{
short abs_x, abs_y;
......@@ -190,3 +199,31 @@ void ph_CheckMouseMode(_THIS)
mouse_relative = 0;
}
}
void ph_UpdateMouse(_THIS)
{
PhCursorInfo_t phcursor;
short abs_x;
short abs_y;
/* Lock the event thread, in multi-threading environments */
SDL_Lock_EventThread();
/* synchronizing photon mouse cursor position and SDL mouse position, if cursor appears over window. */
PtGetAbsPosition(window, &abs_x, &abs_y);
PhQueryCursor(PhInputGroup(NULL), &phcursor);
if (((phcursor.pos.x >= abs_x) && (phcursor.pos.x <= abs_x + this->screen->w)) &&
((phcursor.pos.y >= abs_y) && (phcursor.pos.y <= abs_y + this->screen->h)))
{
SDL_PrivateAppActive(1, SDL_APPMOUSEFOCUS);
SDL_PrivateMouseMotion(0, 0, phcursor.pos.x-abs_x, phcursor.pos.y-abs_y);
}
else
{
SDL_PrivateAppActive(0, SDL_APPMOUSEFOCUS);
}
/* Unlock the event thread, in multi-threading environments */
SDL_Unlock_EventThread();
}
......@@ -20,10 +20,13 @@
slouken@libsdl.org
*/
#ifndef __SDL_PH_MOUSE_H__
#define __SDL_PH_MOUSE_H__
#ifdef SAVE_RCSID
static char rcsid =
"@(#) $Id$";
#endif
#endif /* SAVE_RCSID */
#include "SDL_ph_video.h"
......@@ -35,3 +38,6 @@ extern PhCursorDef_t ph_GetWMPhCursor(WMcursor *cursor);
extern int ph_ShowWMCursor(_THIS, WMcursor *cursor);
extern void ph_WarpWMCursor(_THIS, Uint16 x, Uint16 y);
extern void ph_CheckMouseMode(_THIS);
extern void ph_UpdateMouse(_THIS);
#endif /* __SDL_PH_MOUSE_H__ */
......@@ -50,21 +50,18 @@ static char rcsid =
#include "SDL_phyuv_c.h"
#include "blank_cursor.h"
static int ph_VideoInit(_THIS, SDL_PixelFormat *vformat);
static SDL_Surface *ph_SetVideoMode(_THIS, SDL_Surface *current,
int width, int height, int bpp, Uint32 flags);
static int ph_SetColors(_THIS, int firstcolor, int ncolors, SDL_Color *colors);
static int ph_VideoInit(_THIS, SDL_PixelFormat *vformat);
static SDL_Surface *ph_SetVideoMode(_THIS, SDL_Surface *current, int width, int height, int bpp, Uint32 flags);
static int ph_SetColors(_THIS, int firstcolor, int ncolors, SDL_Color *colors);
static void ph_VideoQuit(_THIS);
static void ph_DeleteDevice(SDL_VideoDevice *device);
static void ph_UpdateMouse(_THIS);
#ifdef HAVE_OPENGL
static int ph_SetupOpenGLContext(_THIS, int width, int height, int bpp, Uint32 flags);
static void ph_GL_SwapBuffers(_THIS);
static int ph_GL_GetAttribute(_THIS, SDL_GLattr attrib, int* value);
static int ph_GL_LoadLibrary(_THIS, const char* path);
static void ph_GL_SwapBuffers(_THIS);
static int ph_GL_GetAttribute(_THIS, SDL_GLattr attrib, int* value);
static int ph_GL_LoadLibrary(_THIS, const char* path);
static void* ph_GL_GetProcAddress(_THIS, const char* proc);
static int ph_GL_MakeCurrent(_THIS);
#endif /* HAVE_OPENGL */
static int ph_Available(void)
......@@ -132,18 +129,20 @@ static SDL_VideoDevice *ph_CreateDevice(int devindex)
device->CreateWMCursor = ph_CreateWMCursor;
device->ShowWMCursor = ph_ShowWMCursor;
device->WarpWMCursor = ph_WarpWMCursor;
device->MoveWMCursor = NULL;
device->CheckMouseMode = ph_CheckMouseMode;
device->InitOSKeymap = ph_InitOSKeymap;
device->PumpEvents = ph_PumpEvents;
/* OpenGL support. */
device->GL_MakeCurrent = NULL;
#ifdef HAVE_OPENGL
device->GL_MakeCurrent = ph_GL_MakeCurrent;
device->GL_SwapBuffers = ph_GL_SwapBuffers;
device->GL_GetAttribute = ph_GL_GetAttribute;
device->GL_LoadLibrary = ph_GL_LoadLibrary;
device->GL_GetProcAddress = ph_GL_GetProcAddress;
#else
device->GL_MakeCurrent = NULL;
device->GL_SwapBuffers = NULL;
device->GL_GetAttribute = NULL;
device->GL_LoadLibrary = NULL;
......@@ -313,8 +312,11 @@ static int ph_VideoInit(_THIS, SDL_PixelFormat *vformat)
window=NULL;
desktoppal=SDLPH_PAL_NONE;
#ifdef HAVE_OPENGL
oglctx=NULL;
oglflags=0;
oglbpp=0;
#endif /* HAVE_OPENGL */
old_video_mode=-1;
......@@ -428,21 +430,10 @@ static SDL_Surface *ph_SetVideoMode(_THIS, SDL_Surface *current,
}
#ifdef HAVE_OPENGL
if (current->flags & SDL_OPENGL)
if ((current->flags & SDL_OPENGL)==SDL_OPENGL)
{
/* ph_SetupOpenGLContext creates also window as need */
if (ph_SetupOpenGLContext(this, width, height, bpp, flags)==0)
{
ph_SetupUpdateFunction(this, current, flags);
}
else
{
/* if context creation fail, report no OpenGL to high level */
current->flags &= ~SDL_OPENGL;
return NULL;
}
#else
if (current->flags & SDL_OPENGL) /* if no built-in OpenGL support */
if ((current->flags & SDL_OPENGL)==SDL_OPENGL) /* if no built-in OpenGL support */
{
SDL_SetError("ph_SetVideoMode(): no OpenGL support, try to recompile library.\n");
current->flags &= ~SDL_OPENGL;
......@@ -528,10 +519,6 @@ static SDL_Surface *ph_SetVideoMode(_THIS, SDL_Surface *current,
static void ph_VideoQuit(_THIS)
{
#ifdef HAVE_OPENGL
PhRegion_t region_info;
#endif /* HAVE_OPENGL */
/* restore palette */
if (desktopbpp==8)
{
......@@ -542,22 +529,6 @@ static void ph_VideoQuit(_THIS)
ph_DestroyImage(this, SDL_VideoSurface);
#ifdef HAVE_OPENGL
/* prevent double SEGFAULT during parachute mode */
if (this->screen)
{
if (((this->screen->flags & SDL_FULLSCREEN)==SDL_FULLSCREEN) &&
((this->screen->flags & SDL_OPENGL)==SDL_OPENGL))
{
region_info.cursor_type=Ph_CURSOR_POINTER;
region_info.rid=PtWidgetRid(window);
PhRegionChange(Ph_REGION_CURSOR, 0, &region_info, NULL, NULL);
}
}
PtFlush();
#endif /* HAVE_OPENGL */
if (window)
{
PtUnrealizeWidget(window);
......@@ -565,15 +536,6 @@ static void ph_VideoQuit(_THIS)
window=NULL;
}
#ifdef HAVE_OPENGL
if (oglctx)
{
PhDCSetCurrent(NULL);
PhDCRelease(oglctx);
oglctx=NULL;
}
#endif /* HAVE_OPENGL */
if (event!=NULL)
{
free(event);
......@@ -638,82 +600,13 @@ static int ph_SetColors(_THIS, int firstcolor, int ncolors, SDL_Color *colors)
#ifdef HAVE_OPENGL
int ph_SetupOpenGLContext(_THIS, int width, int height, int bpp, Uint32 flags)
{
PhDim_t dim;
uint64_t OGLAttrib[PH_OGL_MAX_ATTRIBS];
int OGLargc;
dim.w=width;
dim.h=height;
if (oglctx!=NULL)
{
PhDCSetCurrent(NULL);
PhDCRelease(oglctx);
oglctx=NULL;
}
OGLargc=0;
if (this->gl_config.depth_size)
{
OGLAttrib[OGLargc++]=PHOGL_ATTRIB_DEPTH_BITS;
OGLAttrib[OGLargc++]=this->gl_config.depth_size;
}
if (this->gl_config.stencil_size)
{
OGLAttrib[OGLargc++]=PHOGL_ATTRIB_STENCIL_BITS;
OGLAttrib[OGLargc++]=this->gl_config.stencil_size;
}
OGLAttrib[OGLargc++]=PHOGL_ATTRIB_FORCE_SW;
if (flags & SDL_FULLSCREEN)
{
OGLAttrib[OGLargc++]=PHOGL_ATTRIB_FULLSCREEN;
OGLAttrib[OGLargc++]=PHOGL_ATTRIB_DIRECT;
OGLAttrib[OGLargc++]=PHOGL_ATTRIB_FULLSCREEN_BEST;
OGLAttrib[OGLargc++]=PHOGL_ATTRIB_FULLSCREEN_CENTER;
}
OGLAttrib[OGLargc++]=PHOGL_ATTRIB_NONE;
if (this->gl_config.double_buffer)
{
oglctx=PdCreateOpenGLContext(2, &dim, 0, OGLAttrib);
}
else
{
oglctx=PdCreateOpenGLContext(1, &dim, 0, OGLAttrib);
}
if (oglctx==NULL)
{
SDL_SetError("ph_SetupOpenGLContext(): cannot create OpenGL context !\n");
return (-1);
}
PhDCSetCurrent(oglctx);
/* disable mouse for fullscreen */
if (flags & SDL_FULLSCREEN)
{
PhRegion_t region_info;
region_info.cursor_type=Ph_CURSOR_NONE;
region_info.rid=PtWidgetRid(window);
PhRegionChange(Ph_REGION_CURSOR, 0, &region_info, NULL, NULL);
}
PtFlush();
return 0;
}
void ph_GL_SwapBuffers(_THIS)
static void ph_GL_SwapBuffers(_THIS)
{
PgSetRegion(PtWidgetRid(window));
PdOpenGLContextSwapBuffers(oglctx);
}
int ph_GL_GetAttribute(_THIS, SDL_GLattr attrib, int* value)
static int ph_GL_GetAttribute(_THIS, SDL_GLattr attrib, int* value)
{
switch (attrib)
{
......@@ -733,44 +626,29 @@ int ph_GL_GetAttribute(_THIS, SDL_GLattr attrib, int* value)
return 0;
}
int ph_GL_LoadLibrary(_THIS, const char* path)
static int ph_GL_LoadLibrary(_THIS, const char* path)
{
/* if code compiled with HAVE_OPENGL, the library already linked */
/* if code compiled with HAVE_OPENGL, that mean that library already linked */
this->gl_config.driver_loaded = 1;
return 0;
}
void* ph_GL_GetProcAddress(_THIS, const char* proc)
static void* ph_GL_GetProcAddress(_THIS, const char* proc)
{
return NULL;
}
#endif /* HAVE_OPENGL */
static void ph_UpdateMouse(_THIS)
static int ph_GL_MakeCurrent(_THIS)
{
PhCursorInfo_t phcursor;
short abs_x;
short abs_y;
/* Lock the event thread, in multi-threading environments */
SDL_Lock_EventThread();
PgSetRegion(PtWidgetRid(window));
/* synchronizing photon mouse cursor position and SDL mouse position, if cursor appears over window. */
PtGetAbsPosition(window, &abs_x, &abs_y);
PhQueryCursor(PhInputGroup(NULL), &phcursor);
if (((phcursor.pos.x >= abs_x) && (phcursor.pos.x <= abs_x + this->screen->w)) &&
((phcursor.pos.y >= abs_y) && (phcursor.pos.y <= abs_y + this->screen->h)))
{
SDL_PrivateAppActive(1, SDL_APPMOUSEFOCUS);
SDL_PrivateMouseMotion(0, 0, phcursor.pos.x-abs_x, phcursor.pos.y-abs_y);
}
else
if (oglctx!=NULL)
{
SDL_PrivateAppActive(0, SDL_APPMOUSEFOCUS);
PhDCSetCurrent(oglctx);
}
/* Unlock the event thread, in multi-threading environments */
SDL_Unlock_EventThread();
return 0;
}
#endif /* HAVE_OPENGL */
......@@ -46,9 +46,9 @@
typedef struct
{
unsigned char* Y;
unsigned char* V;
unsigned char* U;
unsigned char* Y;
unsigned char* V;
unsigned char* U;
} FRAMEDATA;
/* Mask values for SDL_ReallocFormat() */
......@@ -68,6 +68,8 @@ struct SDL_PrivateVideoData {
PhImage_t *image; /* used to display image */
#ifdef HAVE_OPENGL
PdOpenGLContext_t* OGLContext; /* OpenGL context */
Uint32 OGLFlags; /* OpenGL flags */
Uint32 OGLBPP; /* OpenGL bpp */
#endif /* HAVE_OPENGL */
PgColor_t savedpal[_Pg_MAX_PALETTE];
PgColor_t syspalph[_Pg_MAX_PALETTE];
......@@ -82,8 +84,8 @@ struct SDL_PrivateVideoData {
unsigned char* CurrentFrameData;
unsigned char* FrameData0;
unsigned char* FrameData1;
int current;
long flags;
Uint32 current;
Uint32 flags;
} ocimage;
PgHWCaps_t graphics_card_caps; /* Graphics card caps at the moment of start */
......@@ -94,9 +96,9 @@ struct SDL_PrivateVideoData {
int mouse_relative;
WMcursor* BlankCursor;
int depth; /* current visual depth (not bpp) */
int desktopbpp; /* bpp of desktop at the moment of start */
int desktoppal; /* palette mode emulation or system */
Uint32 depth; /* current visual depth (not bpp) */
Uint32 desktopbpp; /* bpp of desktop at the moment of start */
Uint32 desktoppal; /* palette mode emulation or system */
int currently_fullscreen;
int currently_hided; /* 1 - window hided (minimazed), 0 - normal */
......@@ -107,7 +109,6 @@ struct SDL_PrivateVideoData {
#define mode_settings (this->hidden->mode_settings)
#define window (this->hidden->Window)
#define oglctx (this->hidden->OGLContext)
#define SDL_Image (this->hidden->image)
#define OCImage (this->hidden->ocimage)
#define old_video_mode (this->hidden->old_video_mode)
......@@ -122,9 +123,13 @@ struct SDL_PrivateVideoData {
#define event (this->hidden->event)
#define current_overlay (this->hidden->overlay)
#define desktop_mode (this->hidden->desktop_mode)
/* Old variable names */
#define mouse_relative (this->hidden->mouse_relative)
#define SDL_BlankCursor (this->hidden->BlankCursor)
#ifdef HAVE_OPENGL
#define oglctx (this->hidden->OGLContext)
#define oglflags (this->hidden->OGLFlags)
#define oglbpp (this->hidden->OGLBPP)
#endif /* HAVE_OPENGL */
#endif /* __SDL_PH_VIDEO_H__ */
......@@ -20,10 +20,13 @@
slouken@libsdl.org
*/
#ifndef __SDL_PH_WM_H__
#define __SDL_PH_WM_H__
#ifdef SAVE_RCSID
static char rcsid =
"@(#) $Id$";
#endif
#endif /* SAVE_RCSID */
#include "SDL_ph_video.h"
......@@ -35,3 +38,4 @@ extern SDL_GrabMode ph_GrabInputNoLock(_THIS, SDL_GrabMode mode);
extern SDL_GrabMode ph_GrabInput(_THIS, SDL_GrabMode mode);
extern int ph_GetWMInfo(_THIS, SDL_SysWMinfo *info);
#endif /* __SDL_PH_WM_H__ */
......@@ -20,10 +20,14 @@
slouken@libsdl.org
*/
#ifndef __SDL_PH_YUV_H__
#define __SDL_PH_YUV_H__
#ifdef SAVE_RCSID
static char rcsid =
"@(#) $Id$";
#endif
#endif /* SAVE_RCSID */
/* This is the photon implementation of YUV video overlays */
......@@ -59,3 +63,5 @@ extern int ph_LockYUVOverlay(_THIS, SDL_Overlay* overlay);
extern void ph_UnlockYUVOverlay(_THIS, SDL_Overlay* overlay);
extern int ph_DisplayYUVOverlay(_THIS, SDL_Overlay* overlay, SDL_Rect* dstrect);
extern void ph_FreeYUVOverlay(_THIS, SDL_Overlay* overlay);
#endif /* __SDL_PH_YUV_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