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) ...@@ -91,8 +91,14 @@ TextureImpl *ContextGL::createTexture(const gl::TextureState &state)
RenderbufferImpl *ContextGL::createRenderbuffer(const gl::RenderbufferState &state) RenderbufferImpl *ContextGL::createRenderbuffer(const gl::RenderbufferState &state)
{ {
return new RenderbufferGL(state, getFunctions(), getFeaturesGL(), getStateManager(), const FunctionsGL *functions = getFunctions();
mRenderer->getBlitter(), getNativeTextureCaps()); 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) BufferImpl *ContextGL::createBuffer(const gl::BufferState &state)
......
...@@ -23,27 +23,20 @@ ...@@ -23,27 +23,20 @@
namespace rx namespace rx
{ {
RenderbufferGL::RenderbufferGL(const gl::RenderbufferState &state, RenderbufferGL::RenderbufferGL(const gl::RenderbufferState &state, GLuint id)
const FunctionsGL *functions, : RenderbufferImpl(state), mRenderbufferID(id)
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)
{ {
mFunctions->genRenderbuffers(1, &mRenderbufferID);
mStateManager->bindRenderbuffer(GL_RENDERBUFFER, mRenderbufferID);
} }
RenderbufferGL::~RenderbufferGL() RenderbufferGL::~RenderbufferGL()
{ {
mStateManager->deleteRenderbuffer(mRenderbufferID); ASSERT(mRenderbufferID == 0);
}
void RenderbufferGL::onDestroy(const gl::Context *context)
{
StateManagerGL *stateManager = GetStateManagerGL(context);
stateManager->deleteRenderbuffer(mRenderbufferID);
mRenderbufferID = 0; mRenderbufferID = 0;
} }
...@@ -52,12 +45,18 @@ angle::Result RenderbufferGL::setStorage(const gl::Context *context, ...@@ -52,12 +45,18 @@ angle::Result RenderbufferGL::setStorage(const gl::Context *context,
size_t width, size_t width,
size_t height) 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::RenderbufferFormat renderbufferFormat =
nativegl::GetRenderbufferFormat(mFunctions, mFeatures, internalformat); nativegl::GetRenderbufferFormat(functions, features, internalformat);
mFunctions->renderbufferStorage(GL_RENDERBUFFER, renderbufferFormat.internalFormat, ANGLE_GL_TRY_ALWAYS_CHECK(
static_cast<GLsizei>(width), static_cast<GLsizei>(height)); context,
functions->renderbufferStorage(GL_RENDERBUFFER, renderbufferFormat.internalFormat,
static_cast<GLsizei>(width), static_cast<GLsizei>(height)));
mNativeInternalFormat = renderbufferFormat.internalFormat; mNativeInternalFormat = renderbufferFormat.internalFormat;
...@@ -70,28 +69,19 @@ angle::Result RenderbufferGL::setStorageMultisample(const gl::Context *context, ...@@ -70,28 +69,19 @@ angle::Result RenderbufferGL::setStorageMultisample(const gl::Context *context,
size_t width, size_t width,
size_t height) 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::RenderbufferFormat renderbufferFormat =
nativegl::GetRenderbufferFormat(mFunctions, mFeatures, internalformat); nativegl::GetRenderbufferFormat(functions, features, internalformat);
mFunctions->renderbufferStorageMultisample( ANGLE_GL_TRY_ALWAYS_CHECK(
GL_RENDERBUFFER, static_cast<GLsizei>(samples), renderbufferFormat.internalFormat, context,
static_cast<GLsizei>(width), static_cast<GLsizei>(height)); functions->renderbufferStorageMultisample(
GL_RENDERBUFFER, static_cast<GLsizei>(samples), renderbufferFormat.internalFormat,
const gl::TextureCaps &formatCaps = mTextureCaps.get(internalformat); static_cast<GLsizei>(width), static_cast<GLsizei>(height)));
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);
}
mNativeInternalFormat = renderbufferFormat.internalFormat; mNativeInternalFormat = renderbufferFormat.internalFormat;
...@@ -113,7 +103,8 @@ GLuint RenderbufferGL::getRenderbufferID() const ...@@ -113,7 +103,8 @@ GLuint RenderbufferGL::getRenderbufferID() const
angle::Result RenderbufferGL::initializeContents(const gl::Context *context, angle::Result RenderbufferGL::initializeContents(const gl::Context *context,
const gl::ImageIndex &imageIndex) const gl::ImageIndex &imageIndex)
{ {
return mBlitter->clearRenderbuffer(context, this, mNativeInternalFormat); BlitGL *blitter = GetBlitGL(context);
return blitter->clearRenderbuffer(context, this, mNativeInternalFormat);
} }
GLenum RenderbufferGL::getNativeInternalFormat() const GLenum RenderbufferGL::getNativeInternalFormat() const
......
...@@ -31,14 +31,11 @@ class StateManagerGL; ...@@ -31,14 +31,11 @@ class StateManagerGL;
class RenderbufferGL : public RenderbufferImpl class RenderbufferGL : public RenderbufferImpl
{ {
public: public:
RenderbufferGL(const gl::RenderbufferState &state, RenderbufferGL(const gl::RenderbufferState &state, GLuint id);
const FunctionsGL *functions,
const angle::FeaturesGL &features,
StateManagerGL *stateManager,
BlitGL *blitter,
const gl::TextureCapsMap &textureCaps);
~RenderbufferGL() override; ~RenderbufferGL() override;
void onDestroy(const gl::Context *context) override;
angle::Result setStorage(const gl::Context *context, angle::Result setStorage(const gl::Context *context,
GLenum internalformat, GLenum internalformat,
size_t width, size_t width,
...@@ -57,12 +54,6 @@ class RenderbufferGL : public RenderbufferImpl ...@@ -57,12 +54,6 @@ class RenderbufferGL : public RenderbufferImpl
GLenum getNativeInternalFormat() const; GLenum getNativeInternalFormat() const;
private: private:
const FunctionsGL *mFunctions;
const angle::FeaturesGL &mFeatures;
StateManagerGL *mStateManager;
BlitGL *mBlitter;
const gl::TextureCapsMap &mTextureCaps;
GLuint mRenderbufferID; GLuint mRenderbufferID;
GLenum mNativeInternalFormat; 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