mirror of
https://github.com/blawar/GLideN64.git
synced 2024-07-04 10:03:36 +00:00
Add workaround for Adreno issue with glBlitFramebuffer.
Thanks fzurita for problem investigation and found solution.
This commit is contained in:
parent
de32176303
commit
5eddea5baf
|
@ -618,6 +618,7 @@ void FrameBufferList::renderBuffer(u32 _address)
|
|||
return;
|
||||
|
||||
OGLVideo & ogl = video();
|
||||
OGLRender & render = ogl.getRender();
|
||||
GLint srcY0, srcY1, dstY0, dstY1;
|
||||
GLint X0, X1, Xwidth;
|
||||
GLint srcPartHeight = 0;
|
||||
|
@ -649,7 +650,7 @@ void FrameBufferList::renderBuffer(u32 _address)
|
|||
srcY0 = ((_address - pBuffer->m_startAddress) << 1 >> pBuffer->m_size) / (*REG.VI_WIDTH);
|
||||
if (isLowerField) {
|
||||
if (srcY0 > 0)
|
||||
--srcY0;
|
||||
--srcY0;
|
||||
if (dstY0 > 0)
|
||||
--dstY0;
|
||||
}
|
||||
|
@ -685,15 +686,19 @@ void FrameBufferList::renderBuffer(u32 _address)
|
|||
return;
|
||||
}
|
||||
GLint dstCoord[4] = { X0 + hOffset, vOffset + (GLint)(dstY0*dstScaleY), hOffset + X1, vOffset + (GLint)(dstY1*dstScaleY) };
|
||||
#ifdef GLESX
|
||||
if (render.getRenderer() == OGLRender::glrAdreno)
|
||||
dstCoord[0] += 1; // workaround for Adreno's issue with glBindFramebuffer;
|
||||
#endif // GLESX
|
||||
|
||||
ogl.getRender().updateScissor(pBuffer);
|
||||
render.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());
|
||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
|
||||
//glDrawBuffer( GL_BACK );
|
||||
float clearColor[4] = { 0.0f, 0.0f, 0.0f, 0.0f };
|
||||
ogl.getRender().clearColorBuffer(clearColor);
|
||||
render.clearColorBuffer(clearColor);
|
||||
|
||||
GLenum filter = GL_LINEAR;
|
||||
if (config.video.multisampling != 0) {
|
||||
|
|
|
@ -1250,7 +1250,10 @@ void OGLRender::_initExtensions()
|
|||
{
|
||||
LOG(LOG_VERBOSE, "OpenGL version string: %s\n", glGetString(GL_VERSION));
|
||||
LOG(LOG_VERBOSE, "OpenGL vendor: %s\n", glGetString(GL_VENDOR));
|
||||
LOG(LOG_VERBOSE, "OpenGL renderer: %s\n", glGetString(GL_RENDERER));
|
||||
const GLubyte * strRenderer = glGetString(GL_RENDERER);
|
||||
if (strstr((const char*)strRenderer, "Adreno") != NULL)
|
||||
m_oglRenderer = glrAdreno;
|
||||
LOG(LOG_VERBOSE, "OpenGL renderer: %s\n", strRenderer);
|
||||
|
||||
fboFormats.init();
|
||||
|
||||
|
|
|
@ -109,10 +109,16 @@ public:
|
|||
};
|
||||
RENDER_STATE getRenderState() const {return m_renderState;}
|
||||
|
||||
enum OGL_RENDERER {
|
||||
glrOther,
|
||||
glrAdreno
|
||||
};
|
||||
OGL_RENDERER getRenderer() const { return m_oglRenderer; }
|
||||
|
||||
void dropRenderState() {m_renderState = rsNone;}
|
||||
|
||||
private:
|
||||
OGLRender() : m_bImageTexture(false), m_bFlatColors(false) {}
|
||||
OGLRender() : m_oglRenderer(glrOther), m_bImageTexture(false), m_bFlatColors(false) {}
|
||||
OGLRender(const OGLRender &);
|
||||
friend class OGLVideo;
|
||||
|
||||
|
@ -150,6 +156,7 @@ private:
|
|||
};
|
||||
|
||||
RENDER_STATE m_renderState;
|
||||
OGL_RENDERER m_oglRenderer;
|
||||
GLVertex m_rect[4];
|
||||
bool m_bImageTexture;
|
||||
bool m_bFlatColors;
|
||||
|
|
Loading…
Reference in New Issue
Block a user