Add Zeydlitz's OGL patch to ZeroGS, plus the fix from issue 4.

git-svn-id: http://pcsx2-playground.googlecode.com/svn/trunk@486 a6443dda-0b58-4228-96e9-037be469359c
This commit is contained in:
arcum42 2008-12-24 11:55:51 +00:00 committed by Gregory Hainaut
parent 661c529443
commit d4804208f3
5 changed files with 99 additions and 96 deletions

View File

@ -49,6 +49,9 @@ extern HWND GShwnd;
#include <sys/stat.h>
#include <sys/types.h>
extern u32 THR_KeyEvent; // value for passing out key events beetwen threads
extern bool THR_bShift;
#define __inline inline
#if !defined(_MSC_VER) && !defined(HAVE_ALIGNED_MALLOC)

View File

@ -123,6 +123,8 @@ void SysMessage(char *fmt, ...) {
#else
GLWindow GLWin;
u32 THR_KeyEvent = 0; // Value for key event processing between threads
bool THR_bShift = false;
#endif
@ -251,7 +253,7 @@ void CALLBACK GSreset() {
gs.q = 1;
}
void CALLBACK GSgifSoftReset(int mask)
void CALLBACK GSgifSoftReset(u32 mask)
{
if( mask & 1 ) memset(&gs.path1, 0, sizeof(gs.path1));
if( mask & 2 ) memset(&gs.path2, 0, sizeof(gs.path2));
@ -644,41 +646,36 @@ s32 CALLBACK GSopen(void *pDsp, char *Title, int multithread)
void ProcessMessages()
{
XEvent event;
// KeySym key;
// vector<XEvent> keyevents;
XEvent event;
// check resizing
while(XCheckTypedEvent(GLWin.dpy, ConfigureNotify, &event)) {
if ((event.xconfigure.width != GLWin.width) || (event.xconfigure.height != GLWin.height)) {
ZeroGS::ChangeWindowSize(event.xconfigure.width, event.xconfigure.height);
GLWin.width = event.xconfigure.width;
GLWin.height = event.xconfigure.height;
}
}
// check resizing
while(XCheckTypedEvent(GLWin.dpy, ConfigureNotify, &event)) {
if ((event.xconfigure.width != GLWin.width) || (event.xconfigure.height != GLWin.height)) {
ZeroGS::ChangeWindowSize(event.xconfigure.width, event.xconfigure.height);
GLWin.width = event.xconfigure.width;
GLWin.height = event.xconfigure.height;
}
}
// while (XPending(GLWin.dpy) > 0) {
// XNextEvent(GLWin.dpy, &event);
// keyevents.push_back(event);
//
// switch (event.type) {
// case ConfigureNotify:
// if ((event.xconfigure.width != GLWin.width) ||
// (event.xconfigure.height != GLWin.height))
// {
// ZeroGS::ChangeWindowSize(event.xconfigure.width, event.xconfigure.height);
// GLWin.width = event.xconfigure.width;
// GLWin.height = event.xconfigure.height;
// }
// break;
// default:
// break;
// }
// }
//
// // push back all the key events for the PAD plugins, etc
// for(vector<XEvent>::iterator it = keyevents.begin(); it != keyevents.end(); ++it)
// XPutBackEvent(GLWin.dpy, &(*it));
if ( THR_KeyEvent ) { // This values was passed from GSKeyEvents witch could be in another thread
int my_KeyEvent = THR_KeyEvent;
bool my_bShift = THR_bShift;
THR_KeyEvent = 0;
switch ( my_KeyEvent ) {
case XK_F5:
OnKeyboardF5(my_bShift);
break;
case XK_F6:
OnKeyboardF6(my_bShift);
break;
case XK_F7:
OnKeyboardF7(my_bShift);
break;
case XK_F9:
OnKeyboardF9(my_bShift);
break;
}
}
}
#endif // linux
@ -1067,6 +1064,7 @@ void _GSgifTransfer(pathInfo *path, u32 *pMem, u32 size)
break;
}
case 3: // GIF_IMAGE (FROM_VFRAM)
case 4: // Used in the DirectX version, so we'll use it here too.
{
if(gs.imageTransfer >= 0 && gs.imageTransfer <= 1)
{

View File

@ -49,48 +49,44 @@ extern void OnKeyboardF9(int);
void CALLBACK GSkeyEvent(keyEvent *ev)
{
static bool bShift = false;
static bool bAlt = false;
//static bool bShift = false;
static bool bAlt = false;
switch(ev->event) {
case KEYPRESS:
switch(ev->key) {
case XK_F5:
OnKeyboardF5(bShift);
break;
case XK_F6:
OnKeyboardF6(bShift);
break;
case XK_F7:
OnKeyboardF7(bShift);
break;
case XK_F9:
OnKeyboardF9(bShift);
break;
case XK_Escape:
break;
case XK_Shift_L:
case XK_Shift_R:
bShift = true;
break;
case XK_Alt_L:
case XK_Alt_R:
bAlt = true;
break;
}
break;
case KEYRELEASE:
switch(ev->key) {
case XK_Shift_L:
case XK_Shift_R:
bShift = false;
break;
case XK_Alt_L:
case XK_Alt_R:
bAlt = false;
break;
}
}
switch(ev->event) {
case KEYPRESS:
switch(ev->key) {
case XK_F5:
case XK_F6:
case XK_F7:
case XK_F9:
THR_KeyEvent = ev->key ;
break;
case XK_Escape:
break;
case XK_Shift_L:
case XK_Shift_R:
//bShift = true;
THR_bShift = true;
break;
case XK_Alt_L:
case XK_Alt_R:
bAlt = true;
break;
}
break;
case KEYRELEASE:
switch(ev->key) {
case XK_Shift_L:
case XK_Shift_R:
//bShift = false;
THR_bShift = false;
break;
case XK_Alt_L:
case XK_Alt_R:
bAlt = false;
break;
}
}
}
GtkWidget *Conf;

View File

@ -828,27 +828,30 @@ bool ZeroGS::CDepthTarget::Create(const frameInfo& frame)
void ZeroGS::CDepthTarget::Destroy()
{
ResetRenderTarget(1);
glFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, 0 );
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, 0 );
GL_REPORT_ERRORD();
CRenderTarget::Destroy();
if( pstencil != 0 ) {
if( pstencil != pdepth )
glDeleteRenderbuffersEXT( 1, &pstencil );
pstencil = 0;
}
if( pdepth != 0 ) {
glDeleteRenderbuffersEXT( 1, &pdepth );
pdepth = 0;
}
GL_REPORT_ERRORD();
if ( status ) { // In this case Framebuffer extension is off-use and lead to segfault
ResetRenderTarget(1);
glFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, 0 );
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, 0 );
GL_REPORT_ERRORD();
if( pstencil != 0 ) {
if( pstencil != pdepth )
glDeleteRenderbuffersEXT( 1, &pstencil );
pstencil = 0;
}
if( pdepth != 0 ) {
glDeleteRenderbuffersEXT( 1, &pdepth );
pdepth = 0;
}
GL_REPORT_ERRORD();
}
CRenderTarget::Destroy();
}
extern int g_nDepthUsed; // > 0 if depth is used
void ZeroGS::CDepthTarget::Resolve()

View File

@ -4863,7 +4863,10 @@ void ZeroGS::SetTexVariablesInt(int context, int bilinear, const tex0Info& tex0,
v.y = (float)fh;
v.z = 1.0f / (float)fw;
v.w = 1.0f / (float)fh;
cgGLSetParameter4fv(pfragment->fRealTexDims, v);
if (pfragment->fRealTexDims)
cgGLSetParameter4fv(pfragment->fRealTexDims, v);
else
cgGLSetParameter4fv(cgGetNamedParameter(pfragment->prog,"g_fRealTexDims"),v);
}
if( m_Blocks[tex0.psm].bpp == 0 ) {