diff options
author | Tobias Hunger <tobias.hunger@qt.io> | 2019-04-16 16:32:08 +0200 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@qt.io> | 2019-04-16 16:32:08 +0200 |
commit | 6630937e63ae5797487b86743a7733c8ae5cc42c (patch) | |
tree | 3d53dacf6430f9099e1fb20835881205de674961 /src/3rdparty/angle/src/libANGLE/Renderbuffer.cpp | |
parent | 37ed6dae00640f9cc980ffda05347c12a7eb5d7e (diff) | |
parent | c7af193d2e49e9f10b86262e63d8d13abf72b5cf (diff) |
Merge commit 'dev' into 'wip/cmake-merge'
Change-Id: I176c40d031be26a1dd1cf08843e448a660598783
Diffstat (limited to 'src/3rdparty/angle/src/libANGLE/Renderbuffer.cpp')
-rw-r--r-- | src/3rdparty/angle/src/libANGLE/Renderbuffer.cpp | 147 |
1 files changed, 99 insertions, 48 deletions
diff --git a/src/3rdparty/angle/src/libANGLE/Renderbuffer.cpp b/src/3rdparty/angle/src/libANGLE/Renderbuffer.cpp index 161fbea797..8310f1abda 100644 --- a/src/3rdparty/angle/src/libANGLE/Renderbuffer.cpp +++ b/src/3rdparty/angle/src/libANGLE/Renderbuffer.cpp @@ -25,11 +25,24 @@ Renderbuffer::Renderbuffer(rx::RenderbufferImpl *impl, GLuint id) mLabel(), mWidth(0), mHeight(0), - mInternalFormat(GL_RGBA4), - mSamples(0) + mFormat(GL_RGBA4), + mSamples(0), + mInitState(InitState::MayNeedInit) { } +Error Renderbuffer::onDestroy(const Context *context) +{ + ANGLE_TRY(orphanImages(context)); + + if (mRenderbuffer) + { + ANGLE_TRY(mRenderbuffer->onDestroy(context)); + } + + return NoError(); +} + Renderbuffer::~Renderbuffer() { SafeDelete(mRenderbuffer); @@ -45,70 +58,70 @@ const std::string &Renderbuffer::getLabel() const return mLabel; } -Error Renderbuffer::setStorage(GLenum internalformat, size_t width, size_t height) +Error Renderbuffer::setStorage(const Context *context, + GLenum internalformat, + size_t width, + size_t height) { - orphanImages(); + ANGLE_TRY(orphanImages(context)); - Error error = mRenderbuffer->setStorage(internalformat, width, height); - if (error.isError()) - { - return error; - } + ANGLE_TRY(mRenderbuffer->setStorage(context, internalformat, width, height)); mWidth = static_cast<GLsizei>(width); mHeight = static_cast<GLsizei>(height); - mInternalFormat = internalformat; + mFormat = Format(internalformat); mSamples = 0; - return Error(GL_NO_ERROR); + mInitState = InitState::MayNeedInit; + mDirtyChannel.signal(mInitState); + + return NoError(); } -Error Renderbuffer::setStorageMultisample(size_t samples, GLenum internalformat, size_t width, size_t height) +Error Renderbuffer::setStorageMultisample(const Context *context, + size_t samples, + GLenum internalformat, + size_t width, + size_t height) { - orphanImages(); + ANGLE_TRY(orphanImages(context)); - Error error = mRenderbuffer->setStorageMultisample(samples, internalformat, width, height); - if (error.isError()) - { - return error; - } + ANGLE_TRY( + mRenderbuffer->setStorageMultisample(context, samples, internalformat, width, height)); mWidth = static_cast<GLsizei>(width); mHeight = static_cast<GLsizei>(height); - mInternalFormat = internalformat; + mFormat = Format(internalformat); mSamples = static_cast<GLsizei>(samples); - return Error(GL_NO_ERROR); + mInitState = InitState::MayNeedInit; + mDirtyChannel.signal(mInitState); + + return NoError(); } -Error Renderbuffer::setStorageEGLImageTarget(egl::Image *image) +Error Renderbuffer::setStorageEGLImageTarget(const Context *context, egl::Image *image) { - orphanImages(); + ANGLE_TRY(orphanImages(context)); - Error error = mRenderbuffer->setStorageEGLImageTarget(image); - if (error.isError()) - { - return error; - } + ANGLE_TRY(mRenderbuffer->setStorageEGLImageTarget(context, image)); - setTargetImage(image); + setTargetImage(context, image); mWidth = static_cast<GLsizei>(image->getWidth()); mHeight = static_cast<GLsizei>(image->getHeight()); - mInternalFormat = image->getInternalFormat(); + mFormat = Format(image->getFormat()); mSamples = 0; - return Error(GL_NO_ERROR); -} + mInitState = image->sourceInitState(); + mDirtyChannel.signal(mInitState); -rx::RenderbufferImpl *Renderbuffer::getImplementation() -{ - ASSERT(mRenderbuffer); - return mRenderbuffer; + return NoError(); } -const rx::RenderbufferImpl *Renderbuffer::getImplementation() const +rx::RenderbufferImpl *Renderbuffer::getImplementation() const { + ASSERT(mRenderbuffer); return mRenderbuffer; } @@ -122,9 +135,9 @@ GLsizei Renderbuffer::getHeight() const return mHeight; } -GLenum Renderbuffer::getInternalFormat() const +const Format &Renderbuffer::getFormat() const { - return mInternalFormat; + return mFormat; } GLsizei Renderbuffer::getSamples() const @@ -134,42 +147,42 @@ GLsizei Renderbuffer::getSamples() const GLuint Renderbuffer::getRedSize() const { - return GetInternalFormatInfo(mInternalFormat).redBits; + return mFormat.info->redBits; } GLuint Renderbuffer::getGreenSize() const { - return GetInternalFormatInfo(mInternalFormat).greenBits; + return mFormat.info->greenBits; } GLuint Renderbuffer::getBlueSize() const { - return GetInternalFormatInfo(mInternalFormat).blueBits; + return mFormat.info->blueBits; } GLuint Renderbuffer::getAlphaSize() const { - return GetInternalFormatInfo(mInternalFormat).alphaBits; + return mFormat.info->alphaBits; } GLuint Renderbuffer::getDepthSize() const { - return GetInternalFormatInfo(mInternalFormat).depthBits; + return mFormat.info->depthBits; } GLuint Renderbuffer::getStencilSize() const { - return GetInternalFormatInfo(mInternalFormat).stencilBits; + return mFormat.info->stencilBits; } -void Renderbuffer::onAttach() +void Renderbuffer::onAttach(const Context *context) { addRef(); } -void Renderbuffer::onDetach() +void Renderbuffer::onDetach(const Context *context) { - release(); + release(context); } GLuint Renderbuffer::getId() const @@ -177,8 +190,46 @@ GLuint Renderbuffer::getId() const return id(); } -Extents Renderbuffer::getAttachmentSize(const FramebufferAttachment::Target & /*target*/) const +Extents Renderbuffer::getAttachmentSize(const gl::ImageIndex & /*imageIndex*/) const { return Extents(mWidth, mHeight, 1); } + +const Format &Renderbuffer::getAttachmentFormat(GLenum /*binding*/, + const ImageIndex & /*imageIndex*/) const +{ + return getFormat(); +} +GLsizei Renderbuffer::getAttachmentSamples(const ImageIndex & /*imageIndex*/) const +{ + return getSamples(); } + +InitState Renderbuffer::initState(const gl::ImageIndex & /*imageIndex*/) const +{ + if (isEGLImageTarget()) + { + return sourceEGLImageInitState(); + } + + return mInitState; +} + +void Renderbuffer::setInitState(const gl::ImageIndex & /*imageIndex*/, InitState initState) +{ + if (isEGLImageTarget()) + { + setSourceEGLImageInitState(initState); + } + else + { + mInitState = initState; + } +} + +rx::FramebufferAttachmentObjectImpl *Renderbuffer::getAttachmentImpl() const +{ + return mRenderbuffer; +} + +} // namespace gl |