mirror of
https://github.com/izzy2lost/ppsspp.git
synced 2026-03-10 12:43:04 -07:00
GPU: Update uniforms w/ consistent render mode too.
This commit is contained in:
@@ -268,9 +268,9 @@ static void SetMatrix4x3(GLRenderManager *render, GLint *uniform, const float *m
|
||||
render->SetUniformM4x4(uniform, m4x4);
|
||||
}
|
||||
|
||||
static inline void ScaleProjMatrix(Matrix4x4 &in) {
|
||||
static inline void ScaleProjMatrix(Matrix4x4 &in, bool useBufferedRendering) {
|
||||
float yOffset = gstate_c.vpYOffset;
|
||||
if (g_Config.iRenderingMode == FB_NON_BUFFERED_MODE) {
|
||||
if (!useBufferedRendering) {
|
||||
// GL upside down is a pain as usual.
|
||||
yOffset = -yOffset;
|
||||
}
|
||||
@@ -284,7 +284,7 @@ void LinkedShader::use(const ShaderID &VSID) {
|
||||
// Note that we no longer track attr masks here - we do it for the input layouts instead.
|
||||
}
|
||||
|
||||
void LinkedShader::UpdateUniforms(u32 vertType, const ShaderID &vsid) {
|
||||
void LinkedShader::UpdateUniforms(u32 vertType, const ShaderID &vsid, bool useBufferedRendering) {
|
||||
u64 dirty = dirtyUniforms & availableUniforms;
|
||||
dirtyUniforms = 0;
|
||||
if (!dirty)
|
||||
@@ -306,8 +306,6 @@ void LinkedShader::UpdateUniforms(u32 vertType, const ShaderID &vsid) {
|
||||
Matrix4x4 flippedMatrix;
|
||||
memcpy(&flippedMatrix, gstate.projMatrix, 16 * sizeof(float));
|
||||
|
||||
bool useBufferedRendering = g_Config.iRenderingMode != FB_NON_BUFFERED_MODE;
|
||||
|
||||
const bool invertedY = useBufferedRendering ? (gstate_c.vpHeight < 0) : (gstate_c.vpHeight > 0);
|
||||
if (invertedY) {
|
||||
flippedMatrix[1] = -flippedMatrix[1];
|
||||
@@ -355,14 +353,13 @@ void LinkedShader::UpdateUniforms(u32 vertType, const ShaderID &vsid) {
|
||||
}
|
||||
}
|
||||
|
||||
ScaleProjMatrix(flippedMatrix);
|
||||
ScaleProjMatrix(flippedMatrix, useBufferedRendering);
|
||||
|
||||
render_->SetUniformM4x4(&u_proj, flippedMatrix.m);
|
||||
}
|
||||
if (dirty & DIRTY_PROJTHROUGHMATRIX)
|
||||
{
|
||||
Matrix4x4 proj_through;
|
||||
bool useBufferedRendering = g_Config.iRenderingMode != FB_NON_BUFFERED_MODE;
|
||||
if (useBufferedRendering) {
|
||||
proj_through.setOrtho(0.0f, gstate_c.curRTWidth, 0.0f, gstate_c.curRTHeight, 0.0f, 1.0f);
|
||||
} else {
|
||||
@@ -486,7 +483,7 @@ void LinkedShader::UpdateUniforms(u32 vertType, const ShaderID &vsid) {
|
||||
}
|
||||
if (dirty & DIRTY_CULLRANGE) {
|
||||
float minValues[4], maxValues[4];
|
||||
CalcCullRange(minValues, maxValues, g_Config.iRenderingMode == FB_NON_BUFFERED_MODE, true);
|
||||
CalcCullRange(minValues, maxValues, !useBufferedRendering, true);
|
||||
SetFloatUniform4(render_, &u_cullRangeMin, minValues);
|
||||
SetFloatUniform4(render_, &u_cullRangeMax, maxValues);
|
||||
}
|
||||
@@ -701,7 +698,7 @@ Shader *ShaderManagerGLES::ApplyVertexShader(int prim, u32 vertType, VShaderID *
|
||||
return vs;
|
||||
}
|
||||
|
||||
LinkedShader *ShaderManagerGLES::ApplyFragmentShader(VShaderID VSID, Shader *vs, u32 vertType, int prim) {
|
||||
LinkedShader *ShaderManagerGLES::ApplyFragmentShader(VShaderID VSID, Shader *vs, u32 vertType, int prim, bool useBufferedRendering) {
|
||||
FShaderID FSID;
|
||||
if (gstate_c.IsDirty(DIRTY_FRAGMENTSHADER_STATE)) {
|
||||
gstate_c.Clean(DIRTY_FRAGMENTSHADER_STATE);
|
||||
@@ -711,7 +708,7 @@ LinkedShader *ShaderManagerGLES::ApplyFragmentShader(VShaderID VSID, Shader *vs,
|
||||
}
|
||||
|
||||
if (lastVShaderSame_ && FSID == lastFSID_) {
|
||||
lastShader_->UpdateUniforms(vertType, VSID);
|
||||
lastShader_->UpdateUniforms(vertType, VSID, useBufferedRendering);
|
||||
return lastShader_;
|
||||
}
|
||||
|
||||
@@ -753,7 +750,7 @@ LinkedShader *ShaderManagerGLES::ApplyFragmentShader(VShaderID VSID, Shader *vs,
|
||||
} else {
|
||||
ls->use(VSID);
|
||||
}
|
||||
ls->UpdateUniforms(vertType, VSID);
|
||||
ls->UpdateUniforms(vertType, VSID, useBufferedRendering);
|
||||
|
||||
lastShader_ = ls;
|
||||
return ls;
|
||||
|
||||
Reference in New Issue
Block a user