mirror of
https://github.com/blawar/GLideN64.git
synced 2024-07-02 09:03:37 +00:00
Fix some TODO issues in FrameBuffer.cpp
This commit is contained in:
parent
602e1dd859
commit
c9f98d175c
|
@ -773,15 +773,17 @@ void FrameBufferList::attachDepthBuffer()
|
|||
if (m_pCurrent->m_FBO.isNotNull() && pDepthBuffer != nullptr) {
|
||||
pDepthBuffer->initDepthImageTexture(m_pCurrent);
|
||||
pDepthBuffer->initDepthBufferTexture(m_pCurrent);
|
||||
#ifdef USE_DEPTH_RENDERBUFFER
|
||||
// TODO
|
||||
if (pDepthBuffer->m_depthRenderbufferWidth == m_pCurrent->m_pTexture->realWidth) {
|
||||
#else
|
||||
const bool goodDepthBufferTexture = gfxContext.isSupported(SpecialFeatures::WeakBlitFramebuffer) ?
|
||||
pDepthBuffer->m_pDepthBufferTexture->realWidth == m_pCurrent->m_pTexture->realWidth :
|
||||
pDepthBuffer->m_pDepthBufferTexture->realWidth >= m_pCurrent->m_pTexture->realWidth;
|
||||
|
||||
bool goodDepthBufferTexture = false;
|
||||
if (gfxContext.isSupported(SpecialFeatures::DepthFramebufferTextures)) {
|
||||
goodDepthBufferTexture = gfxContext.isSupported(SpecialFeatures::WeakBlitFramebuffer) ?
|
||||
pDepthBuffer->m_pDepthBufferTexture->realWidth == m_pCurrent->m_pTexture->realWidth :
|
||||
pDepthBuffer->m_pDepthBufferTexture->realWidth >= m_pCurrent->m_pTexture->realWidth;
|
||||
} else {
|
||||
goodDepthBufferTexture = pDepthBuffer->m_depthRenderbufferWidth == m_pCurrent->m_pTexture->realWidth;
|
||||
}
|
||||
|
||||
if (goodDepthBufferTexture) {
|
||||
#endif // USE_DEPTH_RENDERBUFFER
|
||||
m_pCurrent->m_pDepthBuffer = pDepthBuffer;
|
||||
pDepthBuffer->setDepthAttachment(m_pCurrent->m_FBO, bufferTarget::DRAW_FRAMEBUFFER);
|
||||
if (Context::imageTextures && config.frameBufferEmulation.N64DepthCompare != 0)
|
||||
|
@ -930,16 +932,9 @@ void FrameBufferList::renderBuffer(u32 _address)
|
|||
vOffset + (s32)(dstY0*dstScaleY),
|
||||
hOffset + X1,
|
||||
vOffset + (s32)(dstY1*dstScaleY) };
|
||||
#if 0 //def GLESX
|
||||
// TODO fix me
|
||||
if (render.getRenderer() == OGLRender::glrAdreno)
|
||||
dstCoord[0] += 1; // workaround for Adreno's issue with glBindFramebuffer;
|
||||
#endif // GLESX
|
||||
|
||||
// glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
|
||||
gfxContext.bindFramebuffer(bufferTarget::DRAW_FRAMEBUFFER, ObjectHandle());
|
||||
|
||||
//glDrawBuffer( GL_BACK );
|
||||
float clearColor[4] = { 0.0f, 0.0f, 0.0f, 0.0f };
|
||||
drawer.clearColorBuffer(clearColor);
|
||||
|
||||
|
@ -952,20 +947,15 @@ void FrameBufferList::renderBuffer(u32 _address)
|
|||
(srcCoord[2] - srcCoord[0]) != (dstCoord[2] - dstCoord[0]) ||
|
||||
(srcCoord[3] - srcCoord[1]) != (dstCoord[3] - dstCoord[1])) {
|
||||
pFilteredBuffer->resolveMultisampledTexture(true);
|
||||
//glBindFramebuffer(GL_READ_FRAMEBUFFER, pFilteredBuffer->m_resolveFBO);
|
||||
readBuffer = ObjectHandle(pFilteredBuffer->m_resolveFBO);
|
||||
} else {
|
||||
// glBindFramebuffer(GL_READ_FRAMEBUFFER, pFilteredBuffer->m_FBO);
|
||||
readBuffer = ObjectHandle(pFilteredBuffer->m_FBO);
|
||||
filter = textureParameters::FILTER_NEAREST;
|
||||
}
|
||||
} else {
|
||||
readBuffer = ObjectHandle(pFilteredBuffer->m_FBO);
|
||||
// glBindFramebuffer(GL_READ_FRAMEBUFFER, pFilteredBuffer->m_FBO);
|
||||
}
|
||||
|
||||
// glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
|
||||
|
||||
GraphicsDrawer::BlitOrCopyRectParams blitParams;
|
||||
blitParams.srcX0 = srcCoord[0];
|
||||
blitParams.srcY0 = srcCoord[1];
|
||||
|
@ -1000,14 +990,10 @@ void FrameBufferList::renderBuffer(u32 _address)
|
|||
if (pFilteredBuffer->m_pTexture->frameBufferTexture == CachedTexture::fbMultiSample) {
|
||||
pFilteredBuffer->resolveMultisampledTexture();
|
||||
readBuffer = ObjectHandle(pFilteredBuffer->m_resolveFBO);
|
||||
// glBindFramebuffer(GL_READ_FRAMEBUFFER, pFilteredBuffer->m_resolveFBO);
|
||||
} else {
|
||||
// glBindFramebuffer(GL_READ_FRAMEBUFFER, pFilteredBuffer->m_FBO);
|
||||
readBuffer = ObjectHandle(pFilteredBuffer->m_FBO);
|
||||
}
|
||||
|
||||
// glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
|
||||
|
||||
pBufferTexture = pFilteredBuffer->m_pTexture;
|
||||
|
||||
blitParams.srcX0 = 0;
|
||||
|
@ -1129,8 +1115,6 @@ bool FrameBuffer_CopyDepthBufferChunk(u32 address)
|
|||
|
||||
void FrameBuffer_CopyFromRDRAM(u32 _address, bool _bCFB)
|
||||
{
|
||||
// TODO fix me
|
||||
return;
|
||||
RDRAMtoColorBuffer::get().copyFromRDRAM(_address, _bCFB);
|
||||
}
|
||||
|
||||
|
|
|
@ -301,16 +301,21 @@ public:
|
|||
return !_glinfo.isGLES2;
|
||||
}
|
||||
|
||||
BlitFramebuffersImpl(CachedBindFramebuffer * _bind)
|
||||
: m_bind(_bind) {}
|
||||
BlitFramebuffersImpl(CachedBindFramebuffer * _bind, Renderer _renderer)
|
||||
: m_bind(_bind)
|
||||
, m_renderer(_renderer) {
|
||||
}
|
||||
|
||||
bool blitFramebuffers(const graphics::Context::BlitFramebuffersParams & _params) override
|
||||
{
|
||||
m_bind->bind(graphics::bufferTarget::READ_FRAMEBUFFER, _params.readBuffer);
|
||||
m_bind->bind(graphics::bufferTarget::DRAW_FRAMEBUFFER, _params.drawBuffer);
|
||||
|
||||
const s32 adrenoCoordFix = (m_renderer == Renderer::Adreno) ? 1 : 0;
|
||||
|
||||
glBlitFramebuffer(
|
||||
_params.srcX0, _params.srcY0, _params.srcX1, _params.srcY1,
|
||||
_params.dstX0, _params.dstY0, _params.dstX1, _params.dstY1,
|
||||
adrenoCoordFix +_params.dstX0, _params.dstY0, _params.dstX1, _params.dstY1,
|
||||
GLbitfield(_params.mask), GLenum(_params.filter)
|
||||
);
|
||||
return !Utils::isGLError();
|
||||
|
@ -318,6 +323,7 @@ public:
|
|||
|
||||
private:
|
||||
CachedBindFramebuffer * m_bind;
|
||||
Renderer m_renderer;
|
||||
};
|
||||
|
||||
class DummyBlitFramebuffers: public BlitFramebuffers
|
||||
|
@ -501,7 +507,7 @@ AddFramebufferRenderTarget * BufferManipulationObjectFactory::getAddFramebufferR
|
|||
BlitFramebuffers * BufferManipulationObjectFactory::getBlitFramebuffers() const
|
||||
{
|
||||
if (BlitFramebuffersImpl::Check(m_glInfo))
|
||||
return new BlitFramebuffersImpl(m_cachedFunctions.getCachedBindFramebuffer());
|
||||
return new BlitFramebuffersImpl(m_cachedFunctions.getCachedBindFramebuffer(), m_glInfo.renderer);
|
||||
|
||||
return new DummyBlitFramebuffers;
|
||||
}
|
||||
|
|
|
@ -20,6 +20,13 @@ void GLInfo::init() {
|
|||
LOG(LOG_VERBOSE, "%s major version: %d\n", isGLESX ? "OpenGL ES" : "OpenGL", majorVersion);
|
||||
LOG(LOG_VERBOSE, "%s minor version: %d\n", isGLESX ? "OpenGL ES" : "OpenGL", minorVersion);
|
||||
|
||||
|
||||
LOG(LOG_VERBOSE, "OpenGL vendor: %s\n", glGetString(GL_VENDOR));
|
||||
const GLubyte * strRenderer = glGetString(GL_RENDERER);
|
||||
if (strstr((const char*)strRenderer, "Adreno") != nullptr)
|
||||
renderer = Renderer::Adreno;
|
||||
LOG(LOG_VERBOSE, "OpenGL renderer: %s\n", strRenderer);
|
||||
|
||||
if (isGLES2) {
|
||||
imageTextures = false;
|
||||
msaa = false;
|
||||
|
|
|
@ -3,15 +3,21 @@
|
|||
|
||||
namespace opengl {
|
||||
|
||||
struct GLInfo {
|
||||
GLint majorVersion = 0;
|
||||
GLint minorVersion = 0;
|
||||
bool isGLES2 = false;
|
||||
bool isGLESX = false;
|
||||
bool imageTextures = false;
|
||||
bool shaderStorage = false;
|
||||
bool msaa = false;
|
||||
enum class Renderer {
|
||||
Adreno,
|
||||
Other
|
||||
};
|
||||
|
||||
void init();
|
||||
};
|
||||
struct GLInfo {
|
||||
GLint majorVersion = 0;
|
||||
GLint minorVersion = 0;
|
||||
bool isGLES2 = false;
|
||||
bool isGLESX = false;
|
||||
bool imageTextures = false;
|
||||
bool shaderStorage = false;
|
||||
bool msaa = false;
|
||||
Renderer renderer = Renderer::Other;
|
||||
|
||||
void init();
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user