1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-07-02 09:03:37 +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:
Sergey Lipskiy 2014-09-27 22:27:32 +07:00
parent 8733c2b3e7
commit 5eac0797f0
3 changed files with 15 additions and 24 deletions

View File

@ -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
return;
FrameBuffer *pBuffer = findBuffer(_address);
if (pBuffer == NULL)
return;
OGLVideo & ogl = video();
GLint srcY0, srcY1, dstY0, dstY1;
GLint partHeight = 0;
dstY0 = 1;
const u32 vStart = _SHIFTR( *REG.VI_V_START, 17, 9 );
const u32 vEnd = _SHIFTR( *REG.VI_V_START, 1, 9 );
bool isLowerField = false;
if ((*REG.VI_STATUS & 0x40) != 0) {
const bool isPAL = (*REG.VI_V_SYNC & 0x3ff) > 550;
@ -347,11 +347,6 @@ void FrameBufferList::renderBuffer(u32 _address)
}
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);
if (isLowerField)
--srcY0;
@ -360,7 +355,11 @@ void FrameBufferList::renderBuffer(u32 _address)
if (srcY1 > VI.height) {
partHeight = 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
@ -371,9 +370,10 @@ void FrameBufferList::renderBuffer(u32 _address)
//glDrawBuffer( GL_BACK );
float clearColor[4] = {0.0f, 0.0f, 0.0f, 0.0f};
ogl.getRender().clearColorBuffer(clearColor);
const float scaleY = ogl.getScaleY();
glBlitFramebuffer(
0, (GLint)(srcY0*ogl.getScaleY()), ogl.getWidth(), (GLint)(srcY1*ogl.getScaleY()),
0, ogl.getHeightOffset() + (GLint)(dstY0*viScaleY), ogl.getWidth(), ogl.getHeightOffset() + (GLint)(dstY1*viScaleY),
0, (GLint)(srcY0*scaleY), ogl.getWidth(), (GLint)(srcY1*scaleY),
0, ogl.getHeightOffset() + (GLint)(dstY0*scaleY), ogl.getWidth(), ogl.getHeightOffset() + (GLint)(dstY1*scaleY),
GL_COLOR_BUFFER_BIT, GL_LINEAR
);
@ -387,8 +387,8 @@ void FrameBufferList::renderBuffer(u32 _address)
dstY1 = dstY0 + partHeight;
glBindFramebuffer(GL_READ_FRAMEBUFFER, pBuffer->m_FBO);
glBlitFramebuffer(
0, (GLint)(srcY0*ogl.getScaleY()), ogl.getWidth(), (GLint)(srcY1*ogl.getScaleY()),
0, ogl.getHeightOffset() + (GLint)(dstY0*viScaleY), ogl.getWidth(), ogl.getHeightOffset() + (GLint)(dstY1*viScaleY),
0, (GLint)(srcY0*scaleY), ogl.getWidth(), (GLint)(srcY1*scaleY),
0, ogl.getHeightOffset() + (GLint)(dstY0*scaleY), ogl.getWidth(), ogl.getHeightOffset() + (GLint)(dstY1*scaleY),
GL_COLOR_BUFFER_BIT, GL_LINEAR
);
}

11
VI.cpp
View File

@ -17,7 +17,8 @@ void VI_UpdateSize()
const f32 xScale = _FIXED2FLOAT( _SHIFTR( *REG.VI_X_SCALE, 0, 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 );
const u32 hEnd = _SHIFTR( *REG.VI_H_START, 0, 10 );
@ -35,12 +36,6 @@ void VI_UpdateSize()
VI.real_height = (vEnd - vStart) * yScale;
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)
VI.width = *REG.VI_WIDTH;
if (VI.height == 0.0f)
@ -58,8 +53,6 @@ void VI_UpdateScreen()
if (ogl.changeWindow())
return;
ogl.saveScreenshot();
if (((*REG.VI_STATUS)&3) == 0)
VI.vStart = VI.vEnd = 0;
if (config.frameBufferEmulation.enable) {
const bool bCFB = !config.frameBufferEmulation.ignoreCFB && (gSP.changed&CHANGED_CPU_FB_WRITE) == CHANGED_CPU_FB_WRITE;

4
VI.h
View File

@ -7,14 +7,12 @@ struct VIInfo
u32 width;
u32 height, real_height;
f32 rwidth, rheight;
u32 vStart, vEnd, vHeight;
u32 lastOrigin;
bool interlaced;
VIInfo() :
width(0), height(0), real_height(0),
vStart(0), vEnd(0), vHeight(0), lastOrigin(0),
interlaced(false)
lastOrigin(0), interlaced(false)
{}
};