mirror of
https://github.com/blawar/GLideN64.git
synced 2024-07-04 10:03:36 +00:00
Remove VI emulation code, which can't be tested for now.
Star Wars Ep. 1 Racer (E) is fixed.
This commit is contained in:
parent
8733c2b3e7
commit
5eac0797f0
|
@ -331,15 +331,15 @@ void FrameBufferList::renderBuffer(u32 _address)
|
||||||
|
|
||||||
if (_SHIFTR( *REG.VI_H_START, 0, 10 ) == 0) // H width is zero. Don't draw
|
if (_SHIFTR( *REG.VI_H_START, 0, 10 ) == 0) // H width is zero. Don't draw
|
||||||
return;
|
return;
|
||||||
|
|
||||||
FrameBuffer *pBuffer = findBuffer(_address);
|
FrameBuffer *pBuffer = findBuffer(_address);
|
||||||
if (pBuffer == NULL)
|
if (pBuffer == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
OGLVideo & ogl = video();
|
OGLVideo & ogl = video();
|
||||||
GLint srcY0, srcY1, dstY0, dstY1;
|
GLint srcY0, srcY1, dstY0, dstY1;
|
||||||
GLint partHeight = 0;
|
GLint partHeight = 0;
|
||||||
dstY0 = 1;
|
|
||||||
const u32 vStart = _SHIFTR( *REG.VI_V_START, 17, 9 );
|
const u32 vStart = _SHIFTR( *REG.VI_V_START, 17, 9 );
|
||||||
const u32 vEnd = _SHIFTR( *REG.VI_V_START, 1, 9 );
|
|
||||||
bool isLowerField = false;
|
bool isLowerField = false;
|
||||||
if ((*REG.VI_STATUS & 0x40) != 0) {
|
if ((*REG.VI_STATUS & 0x40) != 0) {
|
||||||
const bool isPAL = (*REG.VI_V_SYNC & 0x3ff) > 550;
|
const bool isPAL = (*REG.VI_V_SYNC & 0x3ff) > 550;
|
||||||
|
@ -347,11 +347,6 @@ void FrameBufferList::renderBuffer(u32 _address)
|
||||||
}
|
}
|
||||||
vStartPrev = vStart;
|
vStartPrev = vStart;
|
||||||
|
|
||||||
const float viScaleY = ogl.getHeight() / (float)VI.vHeight;
|
|
||||||
|
|
||||||
if (vStart > VI.vStart)
|
|
||||||
dstY0 += vStart - VI.vStart;
|
|
||||||
dstY1 = dstY0 + vEnd - vStart;
|
|
||||||
srcY0 = ((_address - pBuffer->m_startAddress) << 1 >> pBuffer->m_size) / (*REG.VI_WIDTH);
|
srcY0 = ((_address - pBuffer->m_startAddress) << 1 >> pBuffer->m_size) / (*REG.VI_WIDTH);
|
||||||
if (isLowerField)
|
if (isLowerField)
|
||||||
--srcY0;
|
--srcY0;
|
||||||
|
@ -360,7 +355,11 @@ void FrameBufferList::renderBuffer(u32 _address)
|
||||||
if (srcY1 > VI.height) {
|
if (srcY1 > VI.height) {
|
||||||
partHeight = srcY1 - VI.height;
|
partHeight = srcY1 - VI.height;
|
||||||
srcY1 = VI.height;
|
srcY1 = VI.height;
|
||||||
dstY1 -= partHeight;
|
dstY0 = 1;
|
||||||
|
dstY1 = dstY0 + VI.real_height - partHeight;
|
||||||
|
} else {
|
||||||
|
dstY0 = srcY0;
|
||||||
|
dstY1 = srcY1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// glDisable(GL_SCISSOR_TEST) does not affect glBlitFramebuffer, at least on AMD
|
// glDisable(GL_SCISSOR_TEST) does not affect glBlitFramebuffer, at least on AMD
|
||||||
|
@ -371,9 +370,10 @@ void FrameBufferList::renderBuffer(u32 _address)
|
||||||
//glDrawBuffer( GL_BACK );
|
//glDrawBuffer( GL_BACK );
|
||||||
float clearColor[4] = {0.0f, 0.0f, 0.0f, 0.0f};
|
float clearColor[4] = {0.0f, 0.0f, 0.0f, 0.0f};
|
||||||
ogl.getRender().clearColorBuffer(clearColor);
|
ogl.getRender().clearColorBuffer(clearColor);
|
||||||
|
const float scaleY = ogl.getScaleY();
|
||||||
glBlitFramebuffer(
|
glBlitFramebuffer(
|
||||||
0, (GLint)(srcY0*ogl.getScaleY()), ogl.getWidth(), (GLint)(srcY1*ogl.getScaleY()),
|
0, (GLint)(srcY0*scaleY), ogl.getWidth(), (GLint)(srcY1*scaleY),
|
||||||
0, ogl.getHeightOffset() + (GLint)(dstY0*viScaleY), ogl.getWidth(), ogl.getHeightOffset() + (GLint)(dstY1*viScaleY),
|
0, ogl.getHeightOffset() + (GLint)(dstY0*scaleY), ogl.getWidth(), ogl.getHeightOffset() + (GLint)(dstY1*scaleY),
|
||||||
GL_COLOR_BUFFER_BIT, GL_LINEAR
|
GL_COLOR_BUFFER_BIT, GL_LINEAR
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -387,8 +387,8 @@ void FrameBufferList::renderBuffer(u32 _address)
|
||||||
dstY1 = dstY0 + partHeight;
|
dstY1 = dstY0 + partHeight;
|
||||||
glBindFramebuffer(GL_READ_FRAMEBUFFER, pBuffer->m_FBO);
|
glBindFramebuffer(GL_READ_FRAMEBUFFER, pBuffer->m_FBO);
|
||||||
glBlitFramebuffer(
|
glBlitFramebuffer(
|
||||||
0, (GLint)(srcY0*ogl.getScaleY()), ogl.getWidth(), (GLint)(srcY1*ogl.getScaleY()),
|
0, (GLint)(srcY0*scaleY), ogl.getWidth(), (GLint)(srcY1*scaleY),
|
||||||
0, ogl.getHeightOffset() + (GLint)(dstY0*viScaleY), ogl.getWidth(), ogl.getHeightOffset() + (GLint)(dstY1*viScaleY),
|
0, ogl.getHeightOffset() + (GLint)(dstY0*scaleY), ogl.getWidth(), ogl.getHeightOffset() + (GLint)(dstY1*scaleY),
|
||||||
GL_COLOR_BUFFER_BIT, GL_LINEAR
|
GL_COLOR_BUFFER_BIT, GL_LINEAR
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
11
VI.cpp
11
VI.cpp
|
@ -17,7 +17,8 @@ void VI_UpdateSize()
|
||||||
const f32 xScale = _FIXED2FLOAT( _SHIFTR( *REG.VI_X_SCALE, 0, 12 ), 10 );
|
const f32 xScale = _FIXED2FLOAT( _SHIFTR( *REG.VI_X_SCALE, 0, 12 ), 10 );
|
||||||
// f32 xOffset = _FIXED2FLOAT( _SHIFTR( *REG.VI_X_SCALE, 16, 12 ), 10 );
|
// f32 xOffset = _FIXED2FLOAT( _SHIFTR( *REG.VI_X_SCALE, 16, 12 ), 10 );
|
||||||
|
|
||||||
const f32 yScale = _FIXED2FLOAT( _SHIFTR( *REG.VI_Y_SCALE, 0, 12 ), 10 );
|
const u32 vScale = _SHIFTR(*REG.VI_Y_SCALE, 0, 12);
|
||||||
|
const f32 yScale = _FIXED2FLOAT(vScale, 10);
|
||||||
// f32 yOffset = _FIXED2FLOAT( _SHIFTR( *REG.VI_Y_SCALE, 16, 12 ), 10 );
|
// f32 yOffset = _FIXED2FLOAT( _SHIFTR( *REG.VI_Y_SCALE, 16, 12 ), 10 );
|
||||||
|
|
||||||
const u32 hEnd = _SHIFTR( *REG.VI_H_START, 0, 10 );
|
const u32 hEnd = _SHIFTR( *REG.VI_H_START, 0, 10 );
|
||||||
|
@ -35,12 +36,6 @@ void VI_UpdateSize()
|
||||||
VI.real_height = (vEnd - vStart) * yScale;
|
VI.real_height = (vEnd - vStart) * yScale;
|
||||||
VI.height = VI.real_height*1.0126582f;
|
VI.height = VI.real_height*1.0126582f;
|
||||||
|
|
||||||
if (VI.vStart == 0) {
|
|
||||||
VI.vStart = vStart;
|
|
||||||
VI.vEnd = vEnd;
|
|
||||||
VI.vHeight = VI.height;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (VI.width == 0.0f)
|
if (VI.width == 0.0f)
|
||||||
VI.width = *REG.VI_WIDTH;
|
VI.width = *REG.VI_WIDTH;
|
||||||
if (VI.height == 0.0f)
|
if (VI.height == 0.0f)
|
||||||
|
@ -58,8 +53,6 @@ void VI_UpdateScreen()
|
||||||
if (ogl.changeWindow())
|
if (ogl.changeWindow())
|
||||||
return;
|
return;
|
||||||
ogl.saveScreenshot();
|
ogl.saveScreenshot();
|
||||||
if (((*REG.VI_STATUS)&3) == 0)
|
|
||||||
VI.vStart = VI.vEnd = 0;
|
|
||||||
|
|
||||||
if (config.frameBufferEmulation.enable) {
|
if (config.frameBufferEmulation.enable) {
|
||||||
const bool bCFB = !config.frameBufferEmulation.ignoreCFB && (gSP.changed&CHANGED_CPU_FB_WRITE) == CHANGED_CPU_FB_WRITE;
|
const bool bCFB = !config.frameBufferEmulation.ignoreCFB && (gSP.changed&CHANGED_CPU_FB_WRITE) == CHANGED_CPU_FB_WRITE;
|
||||||
|
|
4
VI.h
4
VI.h
|
@ -7,14 +7,12 @@ struct VIInfo
|
||||||
u32 width;
|
u32 width;
|
||||||
u32 height, real_height;
|
u32 height, real_height;
|
||||||
f32 rwidth, rheight;
|
f32 rwidth, rheight;
|
||||||
u32 vStart, vEnd, vHeight;
|
|
||||||
u32 lastOrigin;
|
u32 lastOrigin;
|
||||||
bool interlaced;
|
bool interlaced;
|
||||||
|
|
||||||
VIInfo() :
|
VIInfo() :
|
||||||
width(0), height(0), real_height(0),
|
width(0), height(0), real_height(0),
|
||||||
vStart(0), vEnd(0), vHeight(0), lastOrigin(0),
|
lastOrigin(0), interlaced(false)
|
||||||
interlaced(false)
|
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user