* fix build error
* make betterer polygon splitting an option * add GL_LEQUAL depth test for 'equal' mode, might help
This commit is contained in:
parent
abccc44eec
commit
e7025abcdc
|
@ -37,6 +37,8 @@ char DSiBIOS7Path[1024];
|
||||||
char DSiFirmwarePath[1024];
|
char DSiFirmwarePath[1024];
|
||||||
char DSiNANDPath[1024];
|
char DSiNANDPath[1024];
|
||||||
|
|
||||||
|
int RandomizeMAC;
|
||||||
|
|
||||||
#ifdef JIT_ENABLED
|
#ifdef JIT_ENABLED
|
||||||
int JIT_Enable = false;
|
int JIT_Enable = false;
|
||||||
int JIT_MaxBlockSize = 32;
|
int JIT_MaxBlockSize = 32;
|
||||||
|
|
|
@ -79,6 +79,7 @@ typedef struct
|
||||||
bool Soft_Threaded;
|
bool Soft_Threaded;
|
||||||
|
|
||||||
int GL_ScaleFactor;
|
int GL_ScaleFactor;
|
||||||
|
bool GL_BetterPolygons;
|
||||||
|
|
||||||
} RenderSettings;
|
} RenderSettings;
|
||||||
|
|
||||||
|
|
|
@ -113,7 +113,7 @@ GLuint TexMemID;
|
||||||
GLuint TexPalMemID;
|
GLuint TexPalMemID;
|
||||||
|
|
||||||
int ScaleFactor;
|
int ScaleFactor;
|
||||||
bool Antialias;
|
bool BetterPolygons;
|
||||||
int ScreenW, ScreenH;
|
int ScreenW, ScreenH;
|
||||||
|
|
||||||
GLuint FramebufferTex[8];
|
GLuint FramebufferTex[8];
|
||||||
|
@ -405,6 +405,7 @@ void SetRenderSettings(GPU::RenderSettings& settings)
|
||||||
int scale = settings.GL_ScaleFactor;
|
int scale = settings.GL_ScaleFactor;
|
||||||
|
|
||||||
ScaleFactor = scale;
|
ScaleFactor = scale;
|
||||||
|
BetterPolygons = settings.GL_BetterPolygons;
|
||||||
|
|
||||||
ScreenW = 256 * scale;
|
ScreenW = 256 * scale;
|
||||||
ScreenH = 192 * scale;
|
ScreenH = 192 * scale;
|
||||||
|
@ -635,7 +636,7 @@ void BuildPolygons(RendererPolygon* polygons, int npolys)
|
||||||
{
|
{
|
||||||
rp->PrimType = GL_TRIANGLES;
|
rp->PrimType = GL_TRIANGLES;
|
||||||
|
|
||||||
if (false)
|
if (!BetterPolygons)
|
||||||
{
|
{
|
||||||
// regular triangle-splitting
|
// regular triangle-splitting
|
||||||
|
|
||||||
|
@ -835,6 +836,10 @@ void RenderSceneChunk(int y, int h)
|
||||||
|
|
||||||
GLboolean fogenable = (RenderDispCnt & (1<<7)) ? GL_TRUE : GL_FALSE;
|
GLboolean fogenable = (RenderDispCnt & (1<<7)) ? GL_TRUE : GL_FALSE;
|
||||||
|
|
||||||
|
// TODO: proper 'equal' depth test!
|
||||||
|
// (has margin of +-0x200 in Z-buffer mode, +-0xFF in W-buffer mode)
|
||||||
|
// for now we're using GL_LEQUAL to make it work to some extent
|
||||||
|
|
||||||
// pass 1: opaque pixels
|
// pass 1: opaque pixels
|
||||||
|
|
||||||
UseRenderShader(flags);
|
UseRenderShader(flags);
|
||||||
|
@ -853,8 +858,10 @@ void RenderSceneChunk(int y, int h)
|
||||||
|
|
||||||
if (rp->PolyData->IsShadowMask) { i++; continue; }
|
if (rp->PolyData->IsShadowMask) { i++; continue; }
|
||||||
|
|
||||||
// zorp
|
if (rp->PolyData->Attr & (1<<14))
|
||||||
glDepthFunc(GL_LESS);
|
glDepthFunc(GL_LEQUAL);
|
||||||
|
else
|
||||||
|
glDepthFunc(GL_LESS);
|
||||||
|
|
||||||
u32 polyattr = rp->PolyData->Attr;
|
u32 polyattr = rp->PolyData->Attr;
|
||||||
u32 polyid = (polyattr >> 24) & 0x3F;
|
u32 polyid = (polyattr >> 24) & 0x3F;
|
||||||
|
@ -939,8 +946,10 @@ void RenderSceneChunk(int y, int h)
|
||||||
{
|
{
|
||||||
UseRenderShader(flags | RenderFlag_Trans);
|
UseRenderShader(flags | RenderFlag_Trans);
|
||||||
|
|
||||||
// zorp
|
if (rp->PolyData->Attr & (1<<14))
|
||||||
glDepthFunc(GL_LESS);
|
glDepthFunc(GL_LEQUAL);
|
||||||
|
else
|
||||||
|
glDepthFunc(GL_LESS);
|
||||||
|
|
||||||
u32 polyattr = rp->PolyData->Attr;
|
u32 polyattr = rp->PolyData->Attr;
|
||||||
u32 polyid = (polyattr >> 24) & 0x3F;
|
u32 polyid = (polyattr >> 24) & 0x3F;
|
||||||
|
@ -1030,8 +1039,10 @@ void RenderSceneChunk(int y, int h)
|
||||||
if (!(polyattr & (1<<15))) transfog = fogenable;
|
if (!(polyattr & (1<<15))) transfog = fogenable;
|
||||||
else transfog = GL_FALSE;
|
else transfog = GL_FALSE;
|
||||||
|
|
||||||
// zorp
|
if (rp->PolyData->Attr & (1<<14))
|
||||||
glDepthFunc(GL_LESS);
|
glDepthFunc(GL_LEQUAL);
|
||||||
|
else
|
||||||
|
glDepthFunc(GL_LESS);
|
||||||
|
|
||||||
if (rp->PolyData->IsShadow)
|
if (rp->PolyData->IsShadow)
|
||||||
{
|
{
|
||||||
|
|
|
@ -51,7 +51,7 @@ int _3DRenderer;
|
||||||
int Threaded3D;
|
int Threaded3D;
|
||||||
|
|
||||||
int GL_ScaleFactor;
|
int GL_ScaleFactor;
|
||||||
int GL_Antialias;
|
int GL_BetterPolygons;
|
||||||
|
|
||||||
int LimitFPS;
|
int LimitFPS;
|
||||||
int AudioSync;
|
int AudioSync;
|
||||||
|
@ -143,7 +143,7 @@ ConfigEntry PlatformConfigFile[] =
|
||||||
{"Threaded3D", 0, &Threaded3D, 1, NULL, 0},
|
{"Threaded3D", 0, &Threaded3D, 1, NULL, 0},
|
||||||
|
|
||||||
{"GL_ScaleFactor", 0, &GL_ScaleFactor, 1, NULL, 0},
|
{"GL_ScaleFactor", 0, &GL_ScaleFactor, 1, NULL, 0},
|
||||||
{"GL_Antialias", 0, &GL_Antialias, 0, NULL, 0},
|
{"GL_BetterPolygons", 0, &GL_BetterPolygons, 0, NULL, 0},
|
||||||
|
|
||||||
{"LimitFPS", 0, &LimitFPS, 0, NULL, 0},
|
{"LimitFPS", 0, &LimitFPS, 0, NULL, 0},
|
||||||
{"AudioSync", 0, &AudioSync, 1, NULL, 0},
|
{"AudioSync", 0, &AudioSync, 1, NULL, 0},
|
||||||
|
|
|
@ -64,7 +64,7 @@ extern int _3DRenderer;
|
||||||
extern int Threaded3D;
|
extern int Threaded3D;
|
||||||
|
|
||||||
extern int GL_ScaleFactor;
|
extern int GL_ScaleFactor;
|
||||||
extern int GL_Antialias;
|
extern int GL_BetterPolygons;
|
||||||
|
|
||||||
extern int LimitFPS;
|
extern int LimitFPS;
|
||||||
extern int AudioSync;
|
extern int AudioSync;
|
||||||
|
|
|
@ -167,3 +167,10 @@ void VideoSettingsDialog::on_cbxGLResolution_currentIndexChanged(int idx)
|
||||||
|
|
||||||
emit updateVideoSettings(false);
|
emit updateVideoSettings(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VideoSettingsDialog::on_cbBetterPolygons_stateChanged(int state)
|
||||||
|
{
|
||||||
|
Config::GL_BetterPolygons = (state != 0);
|
||||||
|
|
||||||
|
emit updateVideoSettings(false);
|
||||||
|
}
|
||||||
|
|
|
@ -64,6 +64,7 @@ private slots:
|
||||||
void on_sbVSyncInterval_valueChanged(int val);
|
void on_sbVSyncInterval_valueChanged(int val);
|
||||||
|
|
||||||
void on_cbxGLResolution_currentIndexChanged(int idx);
|
void on_cbxGLResolution_currentIndexChanged(int idx);
|
||||||
|
void on_cbBetterPolygons_stateChanged(int state);
|
||||||
|
|
||||||
void on_cbSoftwareThreaded_stateChanged(int state);
|
void on_cbSoftwareThreaded_stateChanged(int state);
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>482</width>
|
<width>482</width>
|
||||||
<height>237</height>
|
<height>244</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
|
@ -43,6 +43,16 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QCheckBox" name="cbBetterPolygons">
|
||||||
|
<property name="whatsThis">
|
||||||
|
<string><html><head/><body><p>Enabling this may help reduce distortion on quads and more complex polygons, but may also reduce performance.</p></body></html></string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Improved polygon splitting</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
|
|
@ -405,8 +405,11 @@ void EmuThread::run()
|
||||||
videoRenderer = hasOGL ? Config::_3DRenderer : 0;
|
videoRenderer = hasOGL ? Config::_3DRenderer : 0;
|
||||||
|
|
||||||
videoSettingsDirty = false;
|
videoSettingsDirty = false;
|
||||||
|
|
||||||
videoSettings.Soft_Threaded = Config::Threaded3D != 0;
|
videoSettings.Soft_Threaded = Config::Threaded3D != 0;
|
||||||
videoSettings.GL_ScaleFactor = Config::GL_ScaleFactor;
|
videoSettings.GL_ScaleFactor = Config::GL_ScaleFactor;
|
||||||
|
videoSettings.GL_BetterPolygons = Config::GL_BetterPolygons;
|
||||||
|
|
||||||
GPU::SetRenderSettings(videoRenderer, videoSettings);
|
GPU::SetRenderSettings(videoRenderer, videoSettings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue