Commit 74f28333 by Geoff Lang Committed by Commit Bot

GL: Update RenderbufferGL to use ANGLE_GL_TRY.

BUG=angleproject:3020 Change-Id: I9e16b651c5845412dd58b87474490fd92f69223b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1769063Reviewed-by: 's avatarJonah Ryan-Davis <jonahr@google.com> Commit-Queue: Geoff Lang <geofflang@chromium.org>
parent c2fc8bd8
......@@ -91,8 +91,14 @@ TextureImpl *ContextGL::createTexture(const gl::TextureState &state)
RenderbufferImpl *ContextGL::createRenderbuffer(const gl::RenderbufferState &state)
{
return new RenderbufferGL(state, getFunctions(), getFeaturesGL(), getStateManager(),
mRenderer->getBlitter(), getNativeTextureCaps());
const FunctionsGL *functions = getFunctions();
StateManagerGL *stateManager = getStateManager();
GLuint renderbuffer = 0;
functions->genRenderbuffers(1, &renderbuffer);
stateManager->bindRenderbuffer(GL_RENDERBUFFER, renderbuffer);
return new RenderbufferGL(state, renderbuffer);
}
BufferImpl *ContextGL::createBuffer(const gl::BufferState &state)
......
......@@ -23,27 +23,20 @@
namespace rx
{
RenderbufferGL::RenderbufferGL(const gl::RenderbufferState &state,
const FunctionsGL *functions,
const angle::FeaturesGL &features,
StateManagerGL *stateManager,
BlitGL *blitter,
const gl::TextureCapsMap &textureCaps)
: RenderbufferImpl(state),
mFunctions(functions),
mFeatures(features),
mStateManager(stateManager),
mBlitter(blitter),
mTextureCaps(textureCaps),
mRenderbufferID(0)
RenderbufferGL::RenderbufferGL(const gl::RenderbufferState &state, GLuint id)
: RenderbufferImpl(state), mRenderbufferID(id)
{
mFunctions->genRenderbuffers(1, &mRenderbufferID);
mStateManager->bindRenderbuffer(GL_RENDERBUFFER, mRenderbufferID);
}
RenderbufferGL::~RenderbufferGL()
{
mStateManager->deleteRenderbuffer(mRenderbufferID);
ASSERT(mRenderbufferID == 0);
}
void RenderbufferGL::onDestroy(const gl::Context *context)
{
StateManagerGL *stateManager = GetStateManagerGL(context);
stateManager->deleteRenderbuffer(mRenderbufferID);
mRenderbufferID = 0;
}
......@@ -52,12 +45,18 @@ angle::Result RenderbufferGL::setStorage(const gl::Context *context,
size_t width,
size_t height)
{
mStateManager->bindRenderbuffer(GL_RENDERBUFFER, mRenderbufferID);
const FunctionsGL *functions = GetFunctionsGL(context);
StateManagerGL *stateManager = GetStateManagerGL(context);
const angle::FeaturesGL &features = GetFeaturesGL(context);
stateManager->bindRenderbuffer(GL_RENDERBUFFER, mRenderbufferID);
nativegl::RenderbufferFormat renderbufferFormat =
nativegl::GetRenderbufferFormat(mFunctions, mFeatures, internalformat);
mFunctions->renderbufferStorage(GL_RENDERBUFFER, renderbufferFormat.internalFormat,
static_cast<GLsizei>(width), static_cast<GLsizei>(height));
nativegl::GetRenderbufferFormat(functions, features, internalformat);
ANGLE_GL_TRY_ALWAYS_CHECK(
context,
functions->renderbufferStorage(GL_RENDERBUFFER, renderbufferFormat.internalFormat,
static_cast<GLsizei>(width), static_cast<GLsizei>(height)));
mNativeInternalFormat = renderbufferFormat.internalFormat;
......@@ -70,28 +69,19 @@ angle::Result RenderbufferGL::setStorageMultisample(const gl::Context *context,
size_t width,
size_t height)
{
mStateManager->bindRenderbuffer(GL_RENDERBUFFER, mRenderbufferID);
const FunctionsGL *functions = GetFunctionsGL(context);
StateManagerGL *stateManager = GetStateManagerGL(context);
const angle::FeaturesGL &features = GetFeaturesGL(context);
stateManager->bindRenderbuffer(GL_RENDERBUFFER, mRenderbufferID);
nativegl::RenderbufferFormat renderbufferFormat =
nativegl::GetRenderbufferFormat(mFunctions, mFeatures, internalformat);
mFunctions->renderbufferStorageMultisample(
nativegl::GetRenderbufferFormat(functions, features, internalformat);
ANGLE_GL_TRY_ALWAYS_CHECK(
context,
functions->renderbufferStorageMultisample(
GL_RENDERBUFFER, static_cast<GLsizei>(samples), renderbufferFormat.internalFormat,
static_cast<GLsizei>(width), static_cast<GLsizei>(height));
const gl::TextureCaps &formatCaps = mTextureCaps.get(internalformat);
if (samples > formatCaps.getMaxSamples())
{
// Before version 4.2, it is unknown if the specific internal format can support the
// requested number of samples. It is expected that GL_OUT_OF_MEMORY is returned if the
// renderbuffer cannot be created.
GLenum error = GL_NO_ERROR;
do
{
error = mFunctions->getError();
ANGLE_CHECK_GL_ALLOC(GetImplAs<ContextGL>(context), error != GL_OUT_OF_MEMORY);
ASSERT(error == GL_NO_ERROR);
} while (error != GL_NO_ERROR);
}
static_cast<GLsizei>(width), static_cast<GLsizei>(height)));
mNativeInternalFormat = renderbufferFormat.internalFormat;
......@@ -113,7 +103,8 @@ GLuint RenderbufferGL::getRenderbufferID() const
angle::Result RenderbufferGL::initializeContents(const gl::Context *context,
const gl::ImageIndex &imageIndex)
{
return mBlitter->clearRenderbuffer(context, this, mNativeInternalFormat);
BlitGL *blitter = GetBlitGL(context);
return blitter->clearRenderbuffer(context, this, mNativeInternalFormat);
}
GLenum RenderbufferGL::getNativeInternalFormat() const
......
......@@ -31,14 +31,11 @@ class StateManagerGL;
class RenderbufferGL : public RenderbufferImpl
{
public:
RenderbufferGL(const gl::RenderbufferState &state,
const FunctionsGL *functions,
const angle::FeaturesGL &features,
StateManagerGL *stateManager,
BlitGL *blitter,
const gl::TextureCapsMap &textureCaps);
RenderbufferGL(const gl::RenderbufferState &state, GLuint id);
~RenderbufferGL() override;
void onDestroy(const gl::Context *context) override;
angle::Result setStorage(const gl::Context *context,
GLenum internalformat,
size_t width,
......@@ -57,12 +54,6 @@ class RenderbufferGL : public RenderbufferImpl
GLenum getNativeInternalFormat() const;
private:
const FunctionsGL *mFunctions;
const angle::FeaturesGL &mFeatures;
StateManagerGL *mStateManager;
BlitGL *mBlitter;
const gl::TextureCapsMap &mTextureCaps;
GLuint mRenderbufferID;
GLenum mNativeInternalFormat;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment