mirror of
https://github.com/blawar/GLideN64.git
synced 2024-07-02 09:03:37 +00:00
Apply scissor for post-processed frame buffer area.
Fixed overexposed areas for games with black boarders.
This commit is contained in:
parent
a567a880fc
commit
05b92c11bb
|
@ -660,6 +660,7 @@ void FrameBufferList::renderBuffer(u32 _address)
|
|||
}
|
||||
GLint dstCoord[4] = { X0 + hOffset, vOffset + (GLint)(dstY0*dstScaleY), hOffset + X1, vOffset + (GLint)(dstY1*dstScaleY) };
|
||||
|
||||
ogl.getRender().updateScissor(pBuffer);
|
||||
PostProcessor::get().process(pBuffer);
|
||||
// glDisable(GL_SCISSOR_TEST) does not affect glBlitFramebuffer, at least on AMD
|
||||
glScissor(0, 0, ogl.getScreenWidth(), ogl.getScreenHeight() + ogl.getHeightOffset());
|
||||
|
|
|
@ -492,23 +492,22 @@ void _adjustScissorX(f32 & _X0, f32 & _X1, float _scale)
|
|||
_X1 = (_X1 - halfX) * _scale + halfX;
|
||||
}
|
||||
|
||||
void OGLRender::_updateScissor() const
|
||||
void OGLRender::updateScissor(FrameBuffer * _pBuffer) const
|
||||
{
|
||||
OGLVideo & ogl = video();
|
||||
f32 scaleX, scaleY;
|
||||
u32 heightOffset, screenHeight;
|
||||
FrameBuffer * pCurrentBuffer = frameBufferList().getCurrent();
|
||||
if (pCurrentBuffer == NULL) {
|
||||
if (_pBuffer == NULL) {
|
||||
scaleX = ogl.getScaleX();
|
||||
scaleY = ogl.getScaleY();
|
||||
heightOffset = ogl.getHeightOffset();
|
||||
screenHeight = VI.height;
|
||||
}
|
||||
else {
|
||||
scaleX = pCurrentBuffer->m_scaleX;
|
||||
scaleY = pCurrentBuffer->m_scaleY;
|
||||
scaleX = _pBuffer->m_scaleX;
|
||||
scaleY = _pBuffer->m_scaleY;
|
||||
heightOffset = 0;
|
||||
screenHeight = (pCurrentBuffer->m_height == 0) ? VI.height : pCurrentBuffer->m_height;
|
||||
screenHeight = (_pBuffer->m_height == 0) ? VI.height : _pBuffer->m_height;
|
||||
}
|
||||
|
||||
float SX0 = gDP.scissor.ulx;
|
||||
|
@ -589,7 +588,7 @@ void OGLRender::_updateStates(RENDER_STATE _renderState) const
|
|||
}
|
||||
|
||||
if (gDP.changed & CHANGED_SCISSOR)
|
||||
_updateScissor();
|
||||
updateScissor(frameBufferList().getCurrent());
|
||||
|
||||
if (gSP.changed & CHANGED_VIEWPORT)
|
||||
_updateViewport();
|
||||
|
|
|
@ -71,6 +71,7 @@ public:
|
|||
SPVertex & getVertex(u32 _v) {return triangles.vertices[_v];}
|
||||
void setDMAVerticesSize(u32 _size) { if (triangles.dmaVertices.size() < _size) triangles.dmaVertices.resize(_size); }
|
||||
SPVertex * getDMAVerticesData() { return triangles.dmaVertices.data(); }
|
||||
void updateScissor(FrameBuffer * _pBuffer) const;
|
||||
|
||||
enum RENDER_STATE {
|
||||
rsNone = 0,
|
||||
|
@ -100,7 +101,6 @@ private:
|
|||
void _setBlendMode() const;
|
||||
void _updateCullFace() const;
|
||||
void _updateViewport() const;
|
||||
void _updateScissor() const;
|
||||
void _updateDepthUpdate() const;
|
||||
void _updateStates(RENDER_STATE _renderState) const;
|
||||
void _prepareDrawTriangle(bool _dma);
|
||||
|
|
|
@ -332,7 +332,6 @@ PostProcessor & PostProcessor::get()
|
|||
void _setGLState(FrameBuffer * _pBuffer) {
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
glDisable(GL_BLEND);
|
||||
glScissor(0, 0, _pBuffer->m_pTexture->realWidth, _pBuffer->m_pTexture->realHeight);
|
||||
|
||||
static const float vert[] =
|
||||
{
|
||||
|
@ -351,7 +350,7 @@ void _setGLState(FrameBuffer * _pBuffer) {
|
|||
glDisableVertexAttribArray(SC_NUMLIGHTS);
|
||||
glViewport(0, 0, video().getWidth(), video().getHeight());
|
||||
gSP.changed |= CHANGED_VIEWPORT | CHANGED_TEXTURE;
|
||||
gDP.changed |= CHANGED_RENDERMODE | CHANGED_SCISSOR;
|
||||
gDP.changed |= CHANGED_RENDERMODE;
|
||||
}
|
||||
|
||||
void PostProcessor::process(FrameBuffer * _pBuffer)
|
||||
|
|
Loading…
Reference in New Issue
Block a user