mirror of
https://github.com/blawar/GLideN64.git
synced 2024-07-02 09:03:37 +00:00
BufferManipulationObjects 2: createRenderbuffer, initRenderbuffer
This commit is contained in:
parent
cf5e9d8ed2
commit
daf6646b97
|
@ -108,6 +108,12 @@ void DepthBuffer::initDepthImageTexture(FrameBuffer * _pBuffer)
|
|||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
glBindTexture(GL_TEXTURE_2D, 0);
|
||||
|
||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
|
||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_depthImageFBO);
|
||||
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_pDepthImageTexture->glName, 0);
|
||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
|
||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, _pBuffer->m_FBO);
|
||||
#else // GRAPHICS_CONTEXT
|
||||
{
|
||||
graphics::Context::InitTextureParams params;
|
||||
|
@ -128,13 +134,19 @@ void DepthBuffer::initDepthImageTexture(FrameBuffer * _pBuffer)
|
|||
params.magFilter = graphics::textureParameters::FILTER_NEAREST;
|
||||
gfxContext.setTextureParameters(params);
|
||||
}
|
||||
{
|
||||
graphics::Context::FrameBufferRenderTarget bufTarget;
|
||||
bufTarget.bufferHandle = graphics::ObjectHandle(m_depthImageFBO);
|
||||
bufTarget.bufferTarget = graphics::bufferTarget::DRAW_FRAMEBUFFER;
|
||||
bufTarget.attachment = graphics::bufferAttachment::COLOR_ATTACHMENT0;
|
||||
bufTarget.textureTarget = graphics::target::TEXTURE_2D;
|
||||
bufTarget.textureHandle = graphics::ObjectHandle(m_pDepthImageTexture->glName);
|
||||
gfxContext.addFrameBufferRenderTarget(bufTarget);
|
||||
}
|
||||
|
||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, _pBuffer->m_FBO);
|
||||
#endif // GRAPHICS_CONTEXT
|
||||
|
||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
|
||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_depthImageFBO);
|
||||
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_pDepthImageTexture->glName, 0);
|
||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
|
||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, _pBuffer->m_FBO);
|
||||
|
||||
depthBufferList().clearBuffer(0, 0, VI.width, VI.height);
|
||||
#endif // GL_IMAGE_TEXTURES_SUPPORT
|
||||
|
@ -239,13 +251,27 @@ void DepthBuffer::_initDepthBufferRenderbuffer(FrameBuffer * _pBuffer)
|
|||
}
|
||||
}
|
||||
|
||||
#ifndef GRAPHICS_CONTEXT
|
||||
glGenRenderbuffers(1, &m_depthRenderbuffer);
|
||||
glBindRenderbuffer(GL_RENDERBUFFER, m_depthRenderbuffer);
|
||||
glRenderbufferStorage(GL_RENDERBUFFER, fboFormats.depthInternalFormat, m_depthRenderbufferWidth, height);
|
||||
#else
|
||||
graphics::ObjectHandle renderbufHandle = gfxContext.createRenderbuffer();
|
||||
m_depthRenderbuffer = GLuint(renderbufHandle);
|
||||
graphics::Context::InitRenderbufferParams params;
|
||||
params.handle = renderbufHandle;
|
||||
params.target = graphics::target::RENDERBUFFER;
|
||||
params.format = fboFormats.depthInternalFormat;
|
||||
params.width = m_depthRenderbufferWidth;
|
||||
params.height = height;
|
||||
gfxContext.initRenderbuffer(params);
|
||||
#endif
|
||||
}
|
||||
|
||||
void DepthBuffer::setDepthAttachment(GLenum _target)
|
||||
void DepthBuffer::setDepthAttachment(GLuint _fbo, GLenum _target)
|
||||
{
|
||||
#ifndef GRAPHICS_CONTEXT
|
||||
|
||||
#ifndef USE_DEPTH_RENDERBUFFER
|
||||
#ifdef GL_MULTISAMPLING_SUPPORT
|
||||
if (config.video.multisampling != 0)
|
||||
|
@ -256,6 +282,24 @@ void DepthBuffer::setDepthAttachment(GLenum _target)
|
|||
#else
|
||||
glFramebufferRenderbuffer(_target, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, m_depthRenderbuffer);
|
||||
#endif
|
||||
|
||||
#else // GRAPHICS_CONTEXT
|
||||
|
||||
graphics::Context::FrameBufferRenderTarget params;
|
||||
params.attachment = graphics::bufferAttachment::DEPTH_ATTACHMENT;
|
||||
params.bufferHandle = graphics::ObjectHandle(_fbo);
|
||||
params.bufferTarget = _target;
|
||||
#ifndef USE_DEPTH_RENDERBUFFER
|
||||
params.textureHandle = graphics::ObjectHandle(m_pDepthBufferTexture->glName);
|
||||
params.textureTarget = config.video.multisampling != 0 ? graphics::target::TEXTURE_2D_MULTISAMPLE : graphics::target::TEXTURE_2D;
|
||||
#else
|
||||
params.textureHandle = graphics::ObjectHandle(m_depthRenderbuffer);
|
||||
params.textureTarget = graphics::target::RENDERBUFFER;
|
||||
#endif // USE_DEPTH_RENDERBUFFER
|
||||
gfxContext.addFrameBufferRenderTarget(params);
|
||||
|
||||
#endif //GRAPHICS_CONTEXT
|
||||
|
||||
m_copied = false;
|
||||
m_resolved = false;
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ struct DepthBuffer
|
|||
CachedTexture * resolveDepthBufferTexture(FrameBuffer * _pBuffer);
|
||||
CachedTexture * copyDepthBufferTexture(FrameBuffer * _pBuffer);
|
||||
|
||||
void setDepthAttachment(GLenum _target);
|
||||
void setDepthAttachment(GLuint _fbo, GLenum _target);
|
||||
void activateDepthBufferTexture(FrameBuffer * _pBuffer);
|
||||
|
||||
void bindDepthImageTexture();
|
||||
|
|
|
@ -871,7 +871,7 @@ void FrameBufferList::attachDepthBuffer()
|
|||
if (pDepthBuffer->m_depthRenderbufferWidth == m_pCurrent->m_pTexture->realWidth) {
|
||||
#endif // USE_DEPTH_RENDERBUFFER
|
||||
m_pCurrent->m_pDepthBuffer = pDepthBuffer;
|
||||
pDepthBuffer->setDepthAttachment(GL_DRAW_FRAMEBUFFER);
|
||||
pDepthBuffer->setDepthAttachment(m_pCurrent->m_FBO, GL_DRAW_FRAMEBUFFER);
|
||||
if (video().getRender().isImageTexturesSupported() && config.frameBufferEmulation.N64DepthCompare != 0)
|
||||
pDepthBuffer->bindDepthImageTexture();
|
||||
} else
|
||||
|
|
|
@ -53,6 +53,16 @@ void Context::deleteFramebuffer(ObjectHandle _name)
|
|||
m_impl->deleteFramebuffer(_name);
|
||||
}
|
||||
|
||||
ObjectHandle Context::createRenderbuffer()
|
||||
{
|
||||
return m_impl->createRenderbuffer();
|
||||
}
|
||||
|
||||
void Context::initRenderbuffer(const InitRenderbufferParams & _params)
|
||||
{
|
||||
m_impl->initRenderbuffer(_params);
|
||||
}
|
||||
|
||||
void Context::addFrameBufferRenderTarget(const FrameBufferRenderTarget & _params)
|
||||
{
|
||||
m_impl->addFrameBufferRenderTarget(_params);
|
||||
|
|
|
@ -57,6 +57,18 @@ namespace graphics {
|
|||
|
||||
void deleteFramebuffer(ObjectHandle _name);
|
||||
|
||||
ObjectHandle createRenderbuffer();
|
||||
|
||||
struct InitRenderbufferParams {
|
||||
ObjectHandle handle;
|
||||
Parameter target;
|
||||
Parameter format;
|
||||
u32 width = 0;
|
||||
u32 height = 0;
|
||||
};
|
||||
|
||||
void initRenderbuffer(const InitRenderbufferParams & _params);
|
||||
|
||||
struct FrameBufferRenderTarget {
|
||||
ObjectHandle bufferHandle;
|
||||
Parameter bufferTarget;
|
||||
|
|
|
@ -19,6 +19,8 @@ namespace graphics {
|
|||
virtual ObjectHandle createFramebuffer() = 0;
|
||||
virtual void deleteFramebuffer(ObjectHandle _name) = 0;
|
||||
virtual void addFrameBufferRenderTarget(const Context::FrameBufferRenderTarget & _params) = 0;
|
||||
virtual ObjectHandle createRenderbuffer() = 0;
|
||||
virtual void initRenderbuffer(const Context::InitRenderbufferParams & _params) = 0;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -39,6 +39,37 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
/*---------------CreateRenderbuffer-------------*/
|
||||
|
||||
class GenRenderbuffer : public CreateRenderbuffer
|
||||
{
|
||||
public:
|
||||
graphics::ObjectHandle createRenderbuffer() override
|
||||
{
|
||||
GLuint renderbuffer;
|
||||
glGenRenderbuffers(1, &renderbuffer);
|
||||
return graphics::ObjectHandle(renderbuffer);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/*---------------InitRenderbuffer-------------*/
|
||||
|
||||
class RenderbufferStorage : public InitRenderbuffer
|
||||
{
|
||||
public:
|
||||
RenderbufferStorage(CachedBindRenderbuffer * _bind) : m_bind(_bind) {}
|
||||
void initRenderbuffer(const graphics::Context::InitRenderbufferParams & _params) override
|
||||
{
|
||||
m_bind->bind(_params.target, _params.handle);
|
||||
glRenderbufferStorage(GLenum(_params.target), GLenum(_params.format), _params.width, _params.height);
|
||||
}
|
||||
|
||||
private:
|
||||
CachedBindRenderbuffer * m_bind;
|
||||
};
|
||||
|
||||
|
||||
/*---------------AddFramebufferTarget-------------*/
|
||||
|
||||
class AddFramebufferTexture2D : public AddFramebufferRenderTarget
|
||||
|
@ -49,11 +80,18 @@ public:
|
|||
void addFrameBufferRenderTarget(const graphics::Context::FrameBufferRenderTarget & _params) override
|
||||
{
|
||||
m_bind->bind(_params.bufferTarget, _params.bufferHandle);
|
||||
glFramebufferTexture2D(GLenum(_params.bufferTarget),
|
||||
GLenum(_params.attachment),
|
||||
GLenum(_params.textureTarget),
|
||||
GLuint(_params.textureHandle),
|
||||
0);
|
||||
if (_params.textureTarget == graphics::target::RENDERBUFFER) {
|
||||
glFramebufferRenderbuffer(GLenum(_params.bufferTarget),
|
||||
GLenum(_params.attachment),
|
||||
GLenum(_params.textureTarget),
|
||||
GLuint(_params.textureHandle));
|
||||
} else {
|
||||
glFramebufferTexture2D(GLenum(_params.bufferTarget),
|
||||
GLenum(_params.attachment),
|
||||
GLenum(_params.textureTarget),
|
||||
GLuint(_params.textureHandle),
|
||||
0);
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
|
@ -102,6 +140,16 @@ CreateFramebufferObject * BufferManipulationObjectFactory::getCreateFramebufferO
|
|||
return new GenFramebuffer;
|
||||
}
|
||||
|
||||
CreateRenderbuffer * BufferManipulationObjectFactory::getCreateRenderbuffer() const
|
||||
{
|
||||
return new GenRenderbuffer;
|
||||
}
|
||||
|
||||
InitRenderbuffer * BufferManipulationObjectFactory::getInitRenderbuffer() const
|
||||
{
|
||||
return new RenderbufferStorage(m_cachedFunctions.geCachedBindRenderbuffer());
|
||||
}
|
||||
|
||||
AddFramebufferRenderTarget * BufferManipulationObjectFactory::getAddFramebufferRenderTarget() const
|
||||
{
|
||||
if (AddNamedFramebufferTexture::Check(m_version))
|
||||
|
|
|
@ -15,6 +15,19 @@ namespace opengl {
|
|||
virtual graphics::ObjectHandle createFramebuffer() = 0;
|
||||
};
|
||||
|
||||
class CreateRenderbuffer
|
||||
{
|
||||
public:
|
||||
virtual ~CreateRenderbuffer() {};
|
||||
virtual graphics::ObjectHandle createRenderbuffer() = 0;
|
||||
};
|
||||
|
||||
class InitRenderbuffer
|
||||
{
|
||||
public:
|
||||
virtual ~InitRenderbuffer() {};
|
||||
virtual void initRenderbuffer(const graphics::Context::InitRenderbufferParams & _params) = 0;
|
||||
};
|
||||
|
||||
class AddFramebufferRenderTarget
|
||||
{
|
||||
|
@ -32,6 +45,10 @@ namespace opengl {
|
|||
|
||||
CreateFramebufferObject * getCreateFramebufferObject() const;
|
||||
|
||||
CreateRenderbuffer * getCreateRenderbuffer() const;
|
||||
|
||||
InitRenderbuffer * getInitRenderbuffer() const;
|
||||
|
||||
AddFramebufferRenderTarget * getAddFramebufferRenderTarget() const;
|
||||
|
||||
private:
|
||||
|
|
|
@ -71,7 +71,8 @@ void CachedActiveTexture::setActiveTexture(u32 _index) {
|
|||
/*---------------CachedFunctions-------------*/
|
||||
|
||||
CachedFunctions::CachedFunctions()
|
||||
: m_bindFramebuffer(glBindFramebuffer) {
|
||||
: m_bindFramebuffer(glBindFramebuffer)
|
||||
, m_bindRenderbuffer(glBindRenderbuffer) {
|
||||
}
|
||||
|
||||
|
||||
|
@ -114,3 +115,8 @@ CachedBindFramebuffer * CachedFunctions::geCachedBindFramebuffer()
|
|||
{
|
||||
return &m_bindFramebuffer;
|
||||
}
|
||||
|
||||
CachedBindRenderbuffer * CachedFunctions::geCachedBindRenderbuffer()
|
||||
{
|
||||
return &m_bindRenderbuffer;
|
||||
}
|
||||
|
|
|
@ -44,6 +44,8 @@ namespace opengl {
|
|||
|
||||
typedef CachedBind<decltype(glBindFramebuffer)> CachedBindFramebuffer;
|
||||
|
||||
typedef CachedBind<decltype(glBindRenderbuffer)> CachedBindRenderbuffer;
|
||||
|
||||
class CachedBindTexture
|
||||
{
|
||||
public:
|
||||
|
@ -87,6 +89,8 @@ namespace opengl {
|
|||
|
||||
CachedBindFramebuffer * geCachedBindFramebuffer();
|
||||
|
||||
CachedBindRenderbuffer * geCachedBindRenderbuffer();
|
||||
|
||||
private:
|
||||
typedef std::unordered_map<u32, CachedEnable> EnableParameters;
|
||||
|
||||
|
@ -94,6 +98,7 @@ namespace opengl {
|
|||
CachedBindTexture m_bindTexture;
|
||||
CachedActiveTexture m_activeTexture;
|
||||
CachedBindFramebuffer m_bindFramebuffer;
|
||||
CachedBindRenderbuffer m_bindRenderbuffer;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -35,6 +35,8 @@ void ContextImpl::init()
|
|||
{
|
||||
BufferManipulationObjectFactory bufferObjectFactory(m_version, *m_cachedFunctions.get());
|
||||
m_createFramebuffer.reset(bufferObjectFactory.getCreateFramebufferObject());
|
||||
m_createRenderbuffer.reset(bufferObjectFactory.getCreateRenderbuffer());
|
||||
m_initRenderbuffer.reset(bufferObjectFactory.getInitRenderbuffer());
|
||||
m_addFramebufferRenderTarget.reset(bufferObjectFactory.getAddFramebufferRenderTarget());
|
||||
}
|
||||
}
|
||||
|
@ -47,6 +49,8 @@ void ContextImpl::destroy()
|
|||
m_set2DTextureParameters.reset(nullptr);
|
||||
|
||||
m_createFramebuffer.reset(nullptr);
|
||||
m_createRenderbuffer.reset(nullptr);
|
||||
m_initRenderbuffer.reset(nullptr);
|
||||
m_addFramebufferRenderTarget.reset(nullptr);
|
||||
}
|
||||
|
||||
|
@ -86,6 +90,16 @@ void ContextImpl::deleteFramebuffer(graphics::ObjectHandle _name)
|
|||
glDeleteFramebuffers(1, &fbo);
|
||||
}
|
||||
|
||||
graphics::ObjectHandle ContextImpl::createRenderbuffer()
|
||||
{
|
||||
return m_createRenderbuffer->createRenderbuffer();
|
||||
}
|
||||
|
||||
void ContextImpl::initRenderbuffer(const graphics::Context::InitRenderbufferParams & _params)
|
||||
{
|
||||
m_initRenderbuffer->initRenderbuffer(_params);
|
||||
}
|
||||
|
||||
void ContextImpl::addFrameBufferRenderTarget(const graphics::Context::FrameBufferRenderTarget & _params)
|
||||
{
|
||||
m_addFramebufferRenderTarget->addFrameBufferRenderTarget(_params);
|
||||
|
|
|
@ -30,6 +30,10 @@ namespace opengl {
|
|||
|
||||
void deleteFramebuffer(graphics::ObjectHandle _name) override;
|
||||
|
||||
graphics::ObjectHandle createRenderbuffer() override;
|
||||
|
||||
void initRenderbuffer(const graphics::Context::InitRenderbufferParams & _params) override;
|
||||
|
||||
void addFrameBufferRenderTarget(const graphics::Context::FrameBufferRenderTarget & _params) override;
|
||||
|
||||
private:
|
||||
|
@ -39,6 +43,8 @@ namespace opengl {
|
|||
std::unique_ptr<Set2DTextureParameters> m_set2DTextureParameters;
|
||||
|
||||
std::unique_ptr<CreateFramebufferObject> m_createFramebuffer;
|
||||
std::unique_ptr<CreateRenderbuffer> m_createRenderbuffer;
|
||||
std::unique_ptr<InitRenderbuffer> m_initRenderbuffer;
|
||||
std::unique_ptr<AddFramebufferRenderTarget> m_addFramebufferRenderTarget;
|
||||
|
||||
GLVersion m_version;
|
||||
|
|
|
@ -28,6 +28,7 @@ namespace graphics {
|
|||
namespace target {
|
||||
Parameter TEXTURE_2D(GL_TEXTURE_2D);
|
||||
Parameter TEXTURE_2D_MULTISAMPLE(GL_TEXTURE_2D_MULTISAMPLE);
|
||||
Parameter RENDERBUFFER(GL_RENDERBUFFER);
|
||||
}
|
||||
|
||||
namespace bufferTarget {
|
||||
|
@ -38,6 +39,7 @@ namespace graphics {
|
|||
|
||||
namespace bufferAttachment {
|
||||
Parameter COLOR_ATTACHMENT0(GL_COLOR_ATTACHMENT0);
|
||||
Parameter DEPTH_ATTACHMENT(GL_DEPTH_ATTACHMENT);
|
||||
}
|
||||
|
||||
namespace enable {
|
||||
|
|
|
@ -17,7 +17,10 @@ namespace graphics {
|
|||
explicit operator s32() const { return static_cast<s32>(m_iparameter); }
|
||||
explicit operator f32() const { return m_fparameter; }
|
||||
|
||||
bool isValid() const { return m_iparameter != INVALID_PARAMETER; };
|
||||
bool isValid() const { return m_iparameter != INVALID_PARAMETER; }
|
||||
|
||||
bool operator==(const Parameter & _other) const { return m_iparameter == _other.m_iparameter; }
|
||||
|
||||
private:
|
||||
union {
|
||||
u32 m_iparameter;
|
||||
|
|
|
@ -28,6 +28,7 @@ namespace graphics {
|
|||
namespace target {
|
||||
extern Parameter TEXTURE_2D;
|
||||
extern Parameter TEXTURE_2D_MULTISAMPLE;
|
||||
extern Parameter RENDERBUFFER;
|
||||
}
|
||||
|
||||
namespace bufferTarget {
|
||||
|
@ -38,6 +39,7 @@ namespace graphics {
|
|||
|
||||
namespace bufferAttachment {
|
||||
extern Parameter COLOR_ATTACHMENT0;
|
||||
extern Parameter DEPTH_ATTACHMENT;
|
||||
}
|
||||
|
||||
namespace enable {
|
||||
|
|
|
@ -386,11 +386,6 @@ OGLRender::TexrectDrawer::TexrectDrawer()
|
|||
|
||||
void OGLRender::TexrectDrawer::init()
|
||||
{
|
||||
// generate a framebuffer
|
||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
|
||||
glGenFramebuffers(1, &m_FBO);
|
||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_FBO);
|
||||
|
||||
m_pTexture = textureCache().addFrameBufferTexture(false);
|
||||
m_pTexture->format = G_IM_FMT_RGBA;
|
||||
m_pTexture->clampS = 1;
|
||||
|
@ -413,6 +408,13 @@ void OGLRender::TexrectDrawer::init()
|
|||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||
glBindTexture(GL_TEXTURE_2D, 0);
|
||||
|
||||
// generate a framebuffer
|
||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
|
||||
glGenFramebuffers(1, &m_FBO);
|
||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_FBO);
|
||||
|
||||
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_pTexture->glName, 0);
|
||||
|
||||
#else // GRAPHICS_CONTEXT
|
||||
|
||||
graphics::Context::InitTextureParams initParams;
|
||||
|
@ -431,9 +433,17 @@ void OGLRender::TexrectDrawer::init()
|
|||
setParams.magFilter = graphics::textureParameters::FILTER_LINEAR;
|
||||
gfxContext.setTextureParameters(setParams);
|
||||
|
||||
graphics::ObjectHandle fboHandle = gfxContext.createFramebuffer();
|
||||
m_FBO = GLuint(fboHandle);
|
||||
graphics::Context::FrameBufferRenderTarget bufTarget;
|
||||
bufTarget.bufferHandle = fboHandle;
|
||||
bufTarget.bufferTarget = graphics::bufferTarget::DRAW_FRAMEBUFFER;
|
||||
bufTarget.attachment = graphics::bufferAttachment::COLOR_ATTACHMENT0;
|
||||
bufTarget.textureTarget = graphics::target::TEXTURE_2D;
|
||||
bufTarget.textureHandle = graphics::ObjectHandle(m_pTexture->glName);
|
||||
gfxContext.addFrameBufferRenderTarget(bufTarget);
|
||||
#endif // GRAPHICS_CONTEXT
|
||||
|
||||
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_pTexture->glName, 0);
|
||||
// check if everything is OK
|
||||
assert(checkFBO());
|
||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
|
||||
|
|
|
@ -2147,7 +2147,7 @@ void _copyDepthBuffer()
|
|||
if (pCopyBufferDepth == nullptr)
|
||||
return;
|
||||
glBindFramebuffer(GL_READ_FRAMEBUFFER, pTmpBuffer->m_FBO);
|
||||
pCopyBufferDepth->setDepthAttachment(GL_READ_FRAMEBUFFER);
|
||||
pCopyBufferDepth->setDepthAttachment(pTmpBuffer->m_FBO, GL_READ_FRAMEBUFFER);
|
||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbList.getCurrent()->m_FBO);
|
||||
OGLVideo & ogl = video();
|
||||
glBlitFramebuffer(
|
||||
|
@ -2157,7 +2157,7 @@ void _copyDepthBuffer()
|
|||
);
|
||||
// Restore objects
|
||||
if (pTmpBuffer->m_pDepthBuffer != nullptr)
|
||||
pTmpBuffer->m_pDepthBuffer->setDepthAttachment(GL_READ_FRAMEBUFFER);
|
||||
pTmpBuffer->m_pDepthBuffer->setDepthAttachment(fbList.getCurrent()->m_FBO, GL_READ_FRAMEBUFFER);
|
||||
glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
|
||||
// Set back current depth buffer
|
||||
dbList.saveBuffer(gDP.depthImageAddress);
|
||||
|
|
Loading…
Reference in New Issue
Block a user