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/stat.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
extern u32 THR_KeyEvent; // value for passing out key events beetwen threads
|
||||||
|
extern bool THR_bShift;
|
||||||
|
|
||||||
#define __inline inline
|
#define __inline inline
|
||||||
|
|
||||||
#if !defined(_MSC_VER) && !defined(HAVE_ALIGNED_MALLOC)
|
#if !defined(_MSC_VER) && !defined(HAVE_ALIGNED_MALLOC)
|
||||||
|
|
|
@ -123,6 +123,8 @@ void SysMessage(char *fmt, ...) {
|
||||||
#else
|
#else
|
||||||
|
|
||||||
GLWindow GLWin;
|
GLWindow GLWin;
|
||||||
|
u32 THR_KeyEvent = 0; // Value for key event processing between threads
|
||||||
|
bool THR_bShift = false;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -251,7 +253,7 @@ void CALLBACK GSreset() {
|
||||||
gs.q = 1;
|
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 & 1 ) memset(&gs.path1, 0, sizeof(gs.path1));
|
||||||
if( mask & 2 ) memset(&gs.path2, 0, sizeof(gs.path2));
|
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()
|
void ProcessMessages()
|
||||||
{
|
{
|
||||||
XEvent event;
|
|
||||||
// KeySym key;
|
XEvent event;
|
||||||
// vector<XEvent> keyevents;
|
// 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
|
if ( THR_KeyEvent ) { // This values was passed from GSKeyEvents witch could be in another thread
|
||||||
while(XCheckTypedEvent(GLWin.dpy, ConfigureNotify, &event)) {
|
int my_KeyEvent = THR_KeyEvent;
|
||||||
if ((event.xconfigure.width != GLWin.width) || (event.xconfigure.height != GLWin.height)) {
|
bool my_bShift = THR_bShift;
|
||||||
ZeroGS::ChangeWindowSize(event.xconfigure.width, event.xconfigure.height);
|
THR_KeyEvent = 0;
|
||||||
GLWin.width = event.xconfigure.width;
|
switch ( my_KeyEvent ) {
|
||||||
GLWin.height = event.xconfigure.height;
|
case XK_F5:
|
||||||
}
|
OnKeyboardF5(my_bShift);
|
||||||
}
|
break;
|
||||||
|
case XK_F6:
|
||||||
// while (XPending(GLWin.dpy) > 0) {
|
OnKeyboardF6(my_bShift);
|
||||||
// XNextEvent(GLWin.dpy, &event);
|
break;
|
||||||
// keyevents.push_back(event);
|
case XK_F7:
|
||||||
//
|
OnKeyboardF7(my_bShift);
|
||||||
// switch (event.type) {
|
break;
|
||||||
// case ConfigureNotify:
|
case XK_F9:
|
||||||
// if ((event.xconfigure.width != GLWin.width) ||
|
OnKeyboardF9(my_bShift);
|
||||||
// (event.xconfigure.height != GLWin.height))
|
break;
|
||||||
// {
|
}
|
||||||
// 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));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // linux
|
#endif // linux
|
||||||
|
@ -1067,6 +1064,7 @@ void _GSgifTransfer(pathInfo *path, u32 *pMem, u32 size)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 3: // GIF_IMAGE (FROM_VFRAM)
|
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)
|
if(gs.imageTransfer >= 0 && gs.imageTransfer <= 1)
|
||||||
{
|
{
|
||||||
|
|
|
@ -49,48 +49,44 @@ extern void OnKeyboardF9(int);
|
||||||
|
|
||||||
void CALLBACK GSkeyEvent(keyEvent *ev)
|
void CALLBACK GSkeyEvent(keyEvent *ev)
|
||||||
{
|
{
|
||||||
static bool bShift = false;
|
//static bool bShift = false;
|
||||||
static bool bAlt = false;
|
static bool bAlt = false;
|
||||||
|
|
||||||
switch(ev->event) {
|
switch(ev->event) {
|
||||||
case KEYPRESS:
|
case KEYPRESS:
|
||||||
switch(ev->key) {
|
switch(ev->key) {
|
||||||
case XK_F5:
|
case XK_F5:
|
||||||
OnKeyboardF5(bShift);
|
case XK_F6:
|
||||||
break;
|
case XK_F7:
|
||||||
case XK_F6:
|
case XK_F9:
|
||||||
OnKeyboardF6(bShift);
|
THR_KeyEvent = ev->key ;
|
||||||
break;
|
break;
|
||||||
case XK_F7:
|
case XK_Escape:
|
||||||
OnKeyboardF7(bShift);
|
break;
|
||||||
break;
|
case XK_Shift_L:
|
||||||
case XK_F9:
|
case XK_Shift_R:
|
||||||
OnKeyboardF9(bShift);
|
//bShift = true;
|
||||||
break;
|
THR_bShift = true;
|
||||||
case XK_Escape:
|
break;
|
||||||
break;
|
case XK_Alt_L:
|
||||||
case XK_Shift_L:
|
case XK_Alt_R:
|
||||||
case XK_Shift_R:
|
bAlt = true;
|
||||||
bShift = true;
|
break;
|
||||||
break;
|
}
|
||||||
case XK_Alt_L:
|
break;
|
||||||
case XK_Alt_R:
|
case KEYRELEASE:
|
||||||
bAlt = true;
|
switch(ev->key) {
|
||||||
break;
|
case XK_Shift_L:
|
||||||
}
|
case XK_Shift_R:
|
||||||
break;
|
//bShift = false;
|
||||||
case KEYRELEASE:
|
THR_bShift = false;
|
||||||
switch(ev->key) {
|
break;
|
||||||
case XK_Shift_L:
|
case XK_Alt_L:
|
||||||
case XK_Shift_R:
|
case XK_Alt_R:
|
||||||
bShift = false;
|
bAlt = false;
|
||||||
break;
|
break;
|
||||||
case XK_Alt_L:
|
}
|
||||||
case XK_Alt_R:
|
}
|
||||||
bAlt = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GtkWidget *Conf;
|
GtkWidget *Conf;
|
||||||
|
|
|
@ -828,27 +828,30 @@ bool ZeroGS::CDepthTarget::Create(const frameInfo& frame)
|
||||||
|
|
||||||
void ZeroGS::CDepthTarget::Destroy()
|
void ZeroGS::CDepthTarget::Destroy()
|
||||||
{
|
{
|
||||||
ResetRenderTarget(1);
|
if ( status ) { // In this case Framebuffer extension is off-use and lead to segfault
|
||||||
glFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, 0 );
|
ResetRenderTarget(1);
|
||||||
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, 0 );
|
glFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, 0 );
|
||||||
GL_REPORT_ERRORD();
|
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, 0 );
|
||||||
|
GL_REPORT_ERRORD();
|
||||||
CRenderTarget::Destroy();
|
|
||||||
|
if( pstencil != 0 ) {
|
||||||
if( pstencil != 0 ) {
|
if( pstencil != pdepth )
|
||||||
|
glDeleteRenderbuffersEXT( 1, &pstencil );
|
||||||
if( pstencil != pdepth )
|
pstencil = 0;
|
||||||
glDeleteRenderbuffersEXT( 1, &pstencil );
|
}
|
||||||
pstencil = 0;
|
|
||||||
}
|
if( pdepth != 0 ) {
|
||||||
if( pdepth != 0 ) {
|
glDeleteRenderbuffersEXT( 1, &pdepth );
|
||||||
glDeleteRenderbuffersEXT( 1, &pdepth );
|
pdepth = 0;
|
||||||
pdepth = 0;
|
}
|
||||||
}
|
GL_REPORT_ERRORD();
|
||||||
|
}
|
||||||
GL_REPORT_ERRORD();
|
|
||||||
|
CRenderTarget::Destroy();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
extern int g_nDepthUsed; // > 0 if depth is used
|
extern int g_nDepthUsed; // > 0 if depth is used
|
||||||
|
|
||||||
void ZeroGS::CDepthTarget::Resolve()
|
void ZeroGS::CDepthTarget::Resolve()
|
||||||
|
|
|
@ -4863,7 +4863,10 @@ void ZeroGS::SetTexVariablesInt(int context, int bilinear, const tex0Info& tex0,
|
||||||
v.y = (float)fh;
|
v.y = (float)fh;
|
||||||
v.z = 1.0f / (float)fw;
|
v.z = 1.0f / (float)fw;
|
||||||
v.w = 1.0f / (float)fh;
|
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 ) {
|
if( m_Blocks[tex0.psm].bpp == 0 ) {
|
||||||
|
|
Loading…
Reference in New Issue