mirror of
https://github.com/blawar/GLideN64.git
synced 2024-07-04 10:03:36 +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) {
|
if (m_pCurrent->m_FBO.isNotNull() && pDepthBuffer != nullptr) {
|
||||||
pDepthBuffer->initDepthImageTexture(m_pCurrent);
|
pDepthBuffer->initDepthImageTexture(m_pCurrent);
|
||||||
pDepthBuffer->initDepthBufferTexture(m_pCurrent);
|
pDepthBuffer->initDepthBufferTexture(m_pCurrent);
|
||||||
#ifdef USE_DEPTH_RENDERBUFFER
|
|
||||||
// TODO
|
bool goodDepthBufferTexture = false;
|
||||||
if (pDepthBuffer->m_depthRenderbufferWidth == m_pCurrent->m_pTexture->realWidth) {
|
if (gfxContext.isSupported(SpecialFeatures::DepthFramebufferTextures)) {
|
||||||
#else
|
goodDepthBufferTexture = gfxContext.isSupported(SpecialFeatures::WeakBlitFramebuffer) ?
|
||||||
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 :
|
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) {
|
if (goodDepthBufferTexture) {
|
||||||
#endif // USE_DEPTH_RENDERBUFFER
|
|
||||||
m_pCurrent->m_pDepthBuffer = pDepthBuffer;
|
m_pCurrent->m_pDepthBuffer = pDepthBuffer;
|
||||||
pDepthBuffer->setDepthAttachment(m_pCurrent->m_FBO, bufferTarget::DRAW_FRAMEBUFFER);
|
pDepthBuffer->setDepthAttachment(m_pCurrent->m_FBO, bufferTarget::DRAW_FRAMEBUFFER);
|
||||||
if (Context::imageTextures && config.frameBufferEmulation.N64DepthCompare != 0)
|
if (Context::imageTextures && config.frameBufferEmulation.N64DepthCompare != 0)
|
||||||
|
@ -930,16 +932,9 @@ void FrameBufferList::renderBuffer(u32 _address)
|
||||||
vOffset + (s32)(dstY0*dstScaleY),
|
vOffset + (s32)(dstY0*dstScaleY),
|
||||||
hOffset + X1,
|
hOffset + X1,
|
||||||
vOffset + (s32)(dstY1*dstScaleY) };
|
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());
|
gfxContext.bindFramebuffer(bufferTarget::DRAW_FRAMEBUFFER, ObjectHandle());
|
||||||
|
|
||||||
//glDrawBuffer( GL_BACK );
|
|
||||||
float clearColor[4] = { 0.0f, 0.0f, 0.0f, 0.0f };
|
float clearColor[4] = { 0.0f, 0.0f, 0.0f, 0.0f };
|
||||||
drawer.clearColorBuffer(clearColor);
|
drawer.clearColorBuffer(clearColor);
|
||||||
|
|
||||||
|
@ -952,20 +947,15 @@ void FrameBufferList::renderBuffer(u32 _address)
|
||||||
(srcCoord[2] - srcCoord[0]) != (dstCoord[2] - dstCoord[0]) ||
|
(srcCoord[2] - srcCoord[0]) != (dstCoord[2] - dstCoord[0]) ||
|
||||||
(srcCoord[3] - srcCoord[1]) != (dstCoord[3] - dstCoord[1])) {
|
(srcCoord[3] - srcCoord[1]) != (dstCoord[3] - dstCoord[1])) {
|
||||||
pFilteredBuffer->resolveMultisampledTexture(true);
|
pFilteredBuffer->resolveMultisampledTexture(true);
|
||||||
//glBindFramebuffer(GL_READ_FRAMEBUFFER, pFilteredBuffer->m_resolveFBO);
|
|
||||||
readBuffer = ObjectHandle(pFilteredBuffer->m_resolveFBO);
|
readBuffer = ObjectHandle(pFilteredBuffer->m_resolveFBO);
|
||||||
} else {
|
} else {
|
||||||
// glBindFramebuffer(GL_READ_FRAMEBUFFER, pFilteredBuffer->m_FBO);
|
|
||||||
readBuffer = ObjectHandle(pFilteredBuffer->m_FBO);
|
readBuffer = ObjectHandle(pFilteredBuffer->m_FBO);
|
||||||
filter = textureParameters::FILTER_NEAREST;
|
filter = textureParameters::FILTER_NEAREST;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
readBuffer = ObjectHandle(pFilteredBuffer->m_FBO);
|
readBuffer = ObjectHandle(pFilteredBuffer->m_FBO);
|
||||||
// glBindFramebuffer(GL_READ_FRAMEBUFFER, pFilteredBuffer->m_FBO);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
|
|
||||||
|
|
||||||
GraphicsDrawer::BlitOrCopyRectParams blitParams;
|
GraphicsDrawer::BlitOrCopyRectParams blitParams;
|
||||||
blitParams.srcX0 = srcCoord[0];
|
blitParams.srcX0 = srcCoord[0];
|
||||||
blitParams.srcY0 = srcCoord[1];
|
blitParams.srcY0 = srcCoord[1];
|
||||||
|
@ -1000,14 +990,10 @@ void FrameBufferList::renderBuffer(u32 _address)
|
||||||
if (pFilteredBuffer->m_pTexture->frameBufferTexture == CachedTexture::fbMultiSample) {
|
if (pFilteredBuffer->m_pTexture->frameBufferTexture == CachedTexture::fbMultiSample) {
|
||||||
pFilteredBuffer->resolveMultisampledTexture();
|
pFilteredBuffer->resolveMultisampledTexture();
|
||||||
readBuffer = ObjectHandle(pFilteredBuffer->m_resolveFBO);
|
readBuffer = ObjectHandle(pFilteredBuffer->m_resolveFBO);
|
||||||
// glBindFramebuffer(GL_READ_FRAMEBUFFER, pFilteredBuffer->m_resolveFBO);
|
|
||||||
} else {
|
} else {
|
||||||
// glBindFramebuffer(GL_READ_FRAMEBUFFER, pFilteredBuffer->m_FBO);
|
|
||||||
readBuffer = ObjectHandle(pFilteredBuffer->m_FBO);
|
readBuffer = ObjectHandle(pFilteredBuffer->m_FBO);
|
||||||
}
|
}
|
||||||
|
|
||||||
// glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
|
|
||||||
|
|
||||||
pBufferTexture = pFilteredBuffer->m_pTexture;
|
pBufferTexture = pFilteredBuffer->m_pTexture;
|
||||||
|
|
||||||
blitParams.srcX0 = 0;
|
blitParams.srcX0 = 0;
|
||||||
|
@ -1129,8 +1115,6 @@ bool FrameBuffer_CopyDepthBufferChunk(u32 address)
|
||||||
|
|
||||||
void FrameBuffer_CopyFromRDRAM(u32 _address, bool _bCFB)
|
void FrameBuffer_CopyFromRDRAM(u32 _address, bool _bCFB)
|
||||||
{
|
{
|
||||||
// TODO fix me
|
|
||||||
return;
|
|
||||||
RDRAMtoColorBuffer::get().copyFromRDRAM(_address, _bCFB);
|
RDRAMtoColorBuffer::get().copyFromRDRAM(_address, _bCFB);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -301,16 +301,21 @@ public:
|
||||||
return !_glinfo.isGLES2;
|
return !_glinfo.isGLES2;
|
||||||
}
|
}
|
||||||
|
|
||||||
BlitFramebuffersImpl(CachedBindFramebuffer * _bind)
|
BlitFramebuffersImpl(CachedBindFramebuffer * _bind, Renderer _renderer)
|
||||||
: m_bind(_bind) {}
|
: m_bind(_bind)
|
||||||
|
, m_renderer(_renderer) {
|
||||||
|
}
|
||||||
|
|
||||||
bool blitFramebuffers(const graphics::Context::BlitFramebuffersParams & _params) override
|
bool blitFramebuffers(const graphics::Context::BlitFramebuffersParams & _params) override
|
||||||
{
|
{
|
||||||
m_bind->bind(graphics::bufferTarget::READ_FRAMEBUFFER, _params.readBuffer);
|
m_bind->bind(graphics::bufferTarget::READ_FRAMEBUFFER, _params.readBuffer);
|
||||||
m_bind->bind(graphics::bufferTarget::DRAW_FRAMEBUFFER, _params.drawBuffer);
|
m_bind->bind(graphics::bufferTarget::DRAW_FRAMEBUFFER, _params.drawBuffer);
|
||||||
|
|
||||||
|
const s32 adrenoCoordFix = (m_renderer == Renderer::Adreno) ? 1 : 0;
|
||||||
|
|
||||||
glBlitFramebuffer(
|
glBlitFramebuffer(
|
||||||
_params.srcX0, _params.srcY0, _params.srcX1, _params.srcY1,
|
_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)
|
GLbitfield(_params.mask), GLenum(_params.filter)
|
||||||
);
|
);
|
||||||
return !Utils::isGLError();
|
return !Utils::isGLError();
|
||||||
|
@ -318,6 +323,7 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CachedBindFramebuffer * m_bind;
|
CachedBindFramebuffer * m_bind;
|
||||||
|
Renderer m_renderer;
|
||||||
};
|
};
|
||||||
|
|
||||||
class DummyBlitFramebuffers: public BlitFramebuffers
|
class DummyBlitFramebuffers: public BlitFramebuffers
|
||||||
|
@ -501,7 +507,7 @@ AddFramebufferRenderTarget * BufferManipulationObjectFactory::getAddFramebufferR
|
||||||
BlitFramebuffers * BufferManipulationObjectFactory::getBlitFramebuffers() const
|
BlitFramebuffers * BufferManipulationObjectFactory::getBlitFramebuffers() const
|
||||||
{
|
{
|
||||||
if (BlitFramebuffersImpl::Check(m_glInfo))
|
if (BlitFramebuffersImpl::Check(m_glInfo))
|
||||||
return new BlitFramebuffersImpl(m_cachedFunctions.getCachedBindFramebuffer());
|
return new BlitFramebuffersImpl(m_cachedFunctions.getCachedBindFramebuffer(), m_glInfo.renderer);
|
||||||
|
|
||||||
return new DummyBlitFramebuffers;
|
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 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, "%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) {
|
if (isGLES2) {
|
||||||
imageTextures = false;
|
imageTextures = false;
|
||||||
msaa = false;
|
msaa = false;
|
||||||
|
|
|
@ -3,15 +3,21 @@
|
||||||
|
|
||||||
namespace opengl {
|
namespace opengl {
|
||||||
|
|
||||||
struct GLInfo {
|
enum class Renderer {
|
||||||
GLint majorVersion = 0;
|
Adreno,
|
||||||
GLint minorVersion = 0;
|
Other
|
||||||
bool isGLES2 = false;
|
};
|
||||||
bool isGLESX = false;
|
|
||||||
bool imageTextures = false;
|
|
||||||
bool shaderStorage = false;
|
|
||||||
bool msaa = false;
|
|
||||||
|
|
||||||
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