GeometryShaderManager: Set the constants within the callbacks.
This commit is contained in:
parent
3d9dfad6a2
commit
1af3d8447a
|
@ -12,9 +12,6 @@
|
|||
#include "VideoCommon/VideoConfig.h"
|
||||
#include "VideoCommon/XFMemory.h"
|
||||
|
||||
// track changes
|
||||
static bool s_projection_changed, s_viewport_changed, s_lineptwidth_changed;
|
||||
|
||||
static const int LINE_PT_TEX_OFFSETS[8] = {
|
||||
0, 16, 8, 4, 2, 1, 1, 1
|
||||
};
|
||||
|
@ -35,72 +32,47 @@ void GeometryShaderManager::Shutdown()
|
|||
|
||||
void GeometryShaderManager::Dirty()
|
||||
{
|
||||
s_projection_changed = true;
|
||||
s_viewport_changed = true;
|
||||
s_lineptwidth_changed = true;
|
||||
SetViewportChanged();
|
||||
SetProjectionChanged();
|
||||
SetLinePtWidthChanged();
|
||||
|
||||
SetTexCoordChanged(0);
|
||||
SetTexCoordChanged(1);
|
||||
SetTexCoordChanged(2);
|
||||
SetTexCoordChanged(3);
|
||||
SetTexCoordChanged(4);
|
||||
SetTexCoordChanged(5);
|
||||
SetTexCoordChanged(6);
|
||||
SetTexCoordChanged(7);
|
||||
|
||||
dirty = true;
|
||||
}
|
||||
|
||||
// Syncs the shader constant buffers with xfmem
|
||||
void GeometryShaderManager::SetConstants()
|
||||
{
|
||||
if (s_lineptwidth_changed)
|
||||
{
|
||||
constants.lineptparams[2] = bpmem.lineptwidth.linesize / 6.f;
|
||||
constants.lineptparams[3] = bpmem.lineptwidth.pointsize / 6.f;
|
||||
constants.texoffset[2] = LINE_PT_TEX_OFFSETS[bpmem.lineptwidth.lineoff];
|
||||
constants.texoffset[3] = LINE_PT_TEX_OFFSETS[bpmem.lineptwidth.pointoff];
|
||||
}
|
||||
|
||||
if (s_viewport_changed)
|
||||
{
|
||||
constants.lineptparams[0] = 2.0f * xfmem.viewport.wd;
|
||||
constants.lineptparams[1] = -2.0f * xfmem.viewport.ht;
|
||||
}
|
||||
|
||||
if (s_projection_changed)
|
||||
{
|
||||
s_projection_changed = false;
|
||||
|
||||
if (g_ActiveConfig.iStereoMode > 0 && xfmem.projection.type == GX_PERSPECTIVE)
|
||||
{
|
||||
float offset = (g_ActiveConfig.iStereoSeparation / 1000.0f) * (g_ActiveConfig.iStereoSeparationPercent / 100.0f);
|
||||
constants.stereoparams[0] = (g_ActiveConfig.bStereoSwapEyes) ? offset : -offset;
|
||||
constants.stereoparams[1] = (g_ActiveConfig.bStereoSwapEyes) ? -offset : offset;
|
||||
constants.stereoparams[2] = (g_ActiveConfig.iStereoConvergence / 10.0f) * (g_ActiveConfig.iStereoConvergencePercent / 100.0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
constants.stereoparams[0] = constants.stereoparams[1] = 0;
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < 8; i++)
|
||||
SetTexCoordChanged(i);
|
||||
|
||||
dirty = true;
|
||||
}
|
||||
|
||||
void GeometryShaderManager::SetViewportChanged()
|
||||
{
|
||||
s_viewport_changed = true;
|
||||
constants.lineptparams[0] = 2.0f * xfmem.viewport.wd;
|
||||
constants.lineptparams[1] = -2.0f * xfmem.viewport.ht;
|
||||
dirty = true;
|
||||
}
|
||||
|
||||
void GeometryShaderManager::SetProjectionChanged()
|
||||
{
|
||||
s_projection_changed = true;
|
||||
if (g_ActiveConfig.iStereoMode > 0 && xfmem.projection.type == GX_PERSPECTIVE)
|
||||
{
|
||||
float offset = (g_ActiveConfig.iStereoSeparation / 1000.0f) * (g_ActiveConfig.iStereoSeparationPercent / 100.0f);
|
||||
constants.stereoparams[0] = (g_ActiveConfig.bStereoSwapEyes) ? offset : -offset;
|
||||
constants.stereoparams[1] = (g_ActiveConfig.bStereoSwapEyes) ? -offset : offset;
|
||||
constants.stereoparams[2] = (g_ActiveConfig.iStereoConvergence / 10.0f) * (g_ActiveConfig.iStereoConvergencePercent / 100.0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
constants.stereoparams[0] = constants.stereoparams[1] = 0;
|
||||
}
|
||||
|
||||
dirty = true;
|
||||
}
|
||||
|
||||
void GeometryShaderManager::SetLinePtWidthChanged()
|
||||
{
|
||||
s_lineptwidth_changed = true;
|
||||
constants.lineptparams[2] = bpmem.lineptwidth.linesize / 6.f;
|
||||
constants.lineptparams[3] = bpmem.lineptwidth.pointsize / 6.f;
|
||||
constants.texoffset[2] = LINE_PT_TEX_OFFSETS[bpmem.lineptwidth.lineoff];
|
||||
constants.texoffset[3] = LINE_PT_TEX_OFFSETS[bpmem.lineptwidth.pointoff];
|
||||
dirty = true;
|
||||
}
|
||||
|
||||
void GeometryShaderManager::SetTexCoordChanged(u8 texmapid)
|
||||
|
|
|
@ -18,9 +18,6 @@ public:
|
|||
static void Shutdown();
|
||||
static void DoState(PointerWrap &p);
|
||||
|
||||
// constant management
|
||||
static void SetConstants();
|
||||
|
||||
static void SetViewportChanged();
|
||||
static void SetProjectionChanged();
|
||||
static void SetLinePtWidthChanged();
|
||||
|
|
|
@ -224,7 +224,6 @@ void VertexManager::Flush()
|
|||
// set global constants
|
||||
VertexShaderManager::SetConstants();
|
||||
PixelShaderManager::SetConstants();
|
||||
GeometryShaderManager::SetConstants();
|
||||
|
||||
bool useDstAlpha = !g_ActiveConfig.bDstAlphaPass &&
|
||||
bpmem.dstalpha.enable &&
|
||||
|
|
Loading…
Reference in New Issue