mirror of https://github.com/PCSX2/pcsx2.git
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:
parent
661c529443
commit
d4804208f3
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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 ) {
|
||||
|
|
Loading…
Reference in New Issue