make swap_buffers parameter take effect for subsequent frame, instead of previous frame, contrary to intuition and good sense. fixes some dual screen games which have been w/z broken for ages
This commit is contained in:
parent
ccff2d3149
commit
08714ea7f2
|
@ -25,6 +25,12 @@
|
||||||
|
|
||||||
//#define FLUSHMODE_HACK
|
//#define FLUSHMODE_HACK
|
||||||
|
|
||||||
|
//---------------
|
||||||
|
//TODO TODO TODO TODO
|
||||||
|
//make up mind once and for all whether fog, toon, etc. should reside in memory buffers (for easier handling in MMU)
|
||||||
|
//if they do, then we need to copy them out in doFlush!!!
|
||||||
|
//---------------
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
@ -1944,8 +1950,7 @@ void gfx3d_execute3D()
|
||||||
void gfx3d_glFlush(u32 v)
|
void gfx3d_glFlush(u32 v)
|
||||||
{
|
{
|
||||||
//printf("-------------FLUSH------------- (vcount=%d\n",nds.VCount);
|
//printf("-------------FLUSH------------- (vcount=%d\n",nds.VCount);
|
||||||
gfx3d.state.sortmode = BIT0(v);
|
gfx3d.state.pendingFlushCommand = v;
|
||||||
gfx3d.state.wbuffer = BIT1(v);
|
|
||||||
#if 0
|
#if 0
|
||||||
if (isSwapBuffers)
|
if (isSwapBuffers)
|
||||||
{
|
{
|
||||||
|
@ -2007,8 +2012,12 @@ static void gfx3d_doFlush()
|
||||||
gfx3d.state.enableFog = BIT7(control);
|
gfx3d.state.enableFog = BIT7(control);
|
||||||
gfx3d.state.enableClearImage = BIT14(control);
|
gfx3d.state.enableClearImage = BIT14(control);
|
||||||
gfx3d.state.fogShift = (control>>8)&0xF;
|
gfx3d.state.fogShift = (control>>8)&0xF;
|
||||||
|
gfx3d.state.sortmode = BIT0(gfx3d.state.activeFlushCommand);
|
||||||
|
gfx3d.state.wbuffer = BIT1(gfx3d.state.activeFlushCommand);
|
||||||
|
|
||||||
gfx3d.renderState = gfx3d.state;
|
gfx3d.renderState = gfx3d.state;
|
||||||
|
|
||||||
|
gfx3d.state.activeFlushCommand = gfx3d.state.pendingFlushCommand;
|
||||||
|
|
||||||
int polycount = polylist->count;
|
int polycount = polylist->count;
|
||||||
|
|
||||||
|
@ -2308,6 +2317,8 @@ SFORMAT SF_GFX3D[]={
|
||||||
{ "GST3", 4, 32, gfx3d.state.rgbToonTable},
|
{ "GST3", 4, 32, gfx3d.state.rgbToonTable},
|
||||||
{ "GSST", 4, 128, &gfx3d.state.shininessTable[0]},
|
{ "GSST", 4, 128, &gfx3d.state.shininessTable[0]},
|
||||||
{ "GSSI", 4, 1, &shininessInd},
|
{ "GSSI", 4, 1, &shininessInd},
|
||||||
|
{ "GSAF", 4, 1, &gfx3d.state.activeFlushCommand},
|
||||||
|
{ "GSPF", 4, 1, &gfx3d.state.pendingFlushCommand},
|
||||||
//------------------------
|
//------------------------
|
||||||
{ "GTST", 4, 1, &triStripToggle},
|
{ "GTST", 4, 1, &triStripToggle},
|
||||||
{ "GTVC", 4, 1, &tempVertInfo.count},
|
{ "GTVC", 4, 1, &tempVertInfo.count},
|
||||||
|
|
|
@ -311,6 +311,8 @@ struct GFX3D_State
|
||||||
, fogOffset(0)
|
, fogOffset(0)
|
||||||
, fogShift(0)
|
, fogShift(0)
|
||||||
, invalidateToon(true)
|
, invalidateToon(true)
|
||||||
|
, activeFlushCommand(0)
|
||||||
|
, pendingFlushCommand(0)
|
||||||
{
|
{
|
||||||
for(u32 i=0;i<ARRAY_SIZE(shininessTable);i++)
|
for(u32 i=0;i<ARRAY_SIZE(shininessTable);i++)
|
||||||
shininessTable[i] = 0;
|
shininessTable[i] = 0;
|
||||||
|
@ -328,6 +330,8 @@ struct GFX3D_State
|
||||||
|
|
||||||
BOOL wbuffer, sortmode;
|
BOOL wbuffer, sortmode;
|
||||||
u8 alphaTestRef;
|
u8 alphaTestRef;
|
||||||
|
u32 activeFlushCommand;
|
||||||
|
u32 pendingFlushCommand;
|
||||||
|
|
||||||
u32 clearDepth;
|
u32 clearDepth;
|
||||||
u32 clearColor;
|
u32 clearColor;
|
||||||
|
|
Loading…
Reference in New Issue