1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-07-07 03:13:49 +00:00

Replace _SHIFTR( *REG.VI_H_START, 0, 10 ) == 0 check by VI.width == 0 one

Fixed glError in Knockout Kings 2000. The game sets h_start==h_end at start,
thus VI.width is zero but *REG.VI_H_START is not.
This commit is contained in:
Sergey Lipskiy 2014-10-03 16:51:12 +07:00
parent 75bf4004cb
commit f637e91f22
2 changed files with 6 additions and 6 deletions

View File

@ -172,7 +172,7 @@ FrameBuffer * FrameBufferList::findTmpBuffer(u32 _address)
void FrameBufferList::saveBuffer(u32 _address, u16 _format, u16 _size, u16 _width, u16 _height, bool _cfb) void FrameBufferList::saveBuffer(u32 _address, u16 _format, u16 _size, u16 _width, u16 _height, bool _cfb)
{ {
if (_SHIFTR(*REG.VI_H_START, 0, 10) == 0) // H width is zero. Don't save if (VI.width == 0) // H width is zero. Don't save
return; return;
OGLVideo & ogl = video(); OGLVideo & ogl = video();
m_drawBuffer = GL_FRAMEBUFFER; m_drawBuffer = GL_FRAMEBUFFER;
@ -332,7 +332,7 @@ void FrameBufferList::renderBuffer(u32 _address)
{ {
static u32 vStartPrev = 0; static u32 vStartPrev = 0;
if (_SHIFTR( *REG.VI_H_START, 0, 10 ) == 0) // H width is zero. Don't draw if (VI.width == 0) // H width is zero. Don't draw
return; return;
FrameBuffer *pBuffer = findBuffer(_address); FrameBuffer *pBuffer = findBuffer(_address);
@ -407,7 +407,7 @@ void FrameBufferList::renderBuffer(u32 _address)
void FrameBufferList::renderBuffer(u32 _address) void FrameBufferList::renderBuffer(u32 _address)
{ {
if (_SHIFTR( *REG.VI_H_START, 0, 10 ) == 0) // H width is zero. Don't draw if (VI.width == 0) // H width is zero. Don't draw
return; return;
FrameBuffer *pBuffer = findBuffer(_address); FrameBuffer *pBuffer = findBuffer(_address);
if (pBuffer == NULL) if (pBuffer == NULL)
@ -556,7 +556,7 @@ void FrameBufferToRDRAM::Destroy() {
} }
void FrameBufferToRDRAM::CopyToRDRAM( u32 address, bool bSync ) { void FrameBufferToRDRAM::CopyToRDRAM( u32 address, bool bSync ) {
if (_SHIFTR(*REG.VI_H_START, 0, 10) == 0) // H width is zero. Don't copy if (VI.width == 0) // H width is zero. Don't copy
return; return;
FrameBuffer *pBuffer = frameBufferList().findBuffer(address); FrameBuffer *pBuffer = frameBufferList().findBuffer(address);
if (pBuffer == NULL) if (pBuffer == NULL)
@ -696,7 +696,7 @@ void DepthBufferToRDRAM::Destroy() {
} }
void DepthBufferToRDRAM::CopyToRDRAM( u32 address) { void DepthBufferToRDRAM::CopyToRDRAM( u32 address) {
if (_SHIFTR(*REG.VI_H_START, 0, 10) == 0) // H width is zero. Don't copy if (VI.width == 0) // H width is zero. Don't copy
return; return;
FrameBuffer *pBuffer = frameBufferList().findBuffer(address); FrameBuffer *pBuffer = frameBufferList().findBuffer(address);
if (pBuffer == NULL || pBuffer->m_pDepthBuffer == NULL) if (pBuffer == NULL || pBuffer->m_pDepthBuffer == NULL)

2
VI.cpp
View File

@ -93,7 +93,7 @@ void VI_UpdateScreen()
VI_UpdateSize(); VI_UpdateSize();
ogl.updateScale(); ogl.updateScale();
const u32 size = *REG.VI_STATUS & 3; const u32 size = *REG.VI_STATUS & 3;
if (VI.height > 0 && size > G_IM_SIZ_8b && _SHIFTR( *REG.VI_H_START, 0, 10 ) > 0) if (VI.height > 0 && size > G_IM_SIZ_8b && VI.width > 0)
frameBufferList().saveBuffer(*REG.VI_ORIGIN, G_IM_FMT_RGBA, size, VI.width, VI.height, true); frameBufferList().saveBuffer(*REG.VI_ORIGIN, G_IM_FMT_RGBA, size, VI.width, VI.height, true);
} }
} }