Commit 7f67b030 by Jamie Madill

Move resource storage to attachment base.

We can use GetAs() to retrieve the corresponding API object. BUG=angleproject:963 Change-Id: I472e13664e45f9f05621dea3d28135d4e833fb3d Reviewed-on: https://chromium-review.googlesource.com/263485Reviewed-by: 's avatarKenneth Russell <kbr@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Tested-by: 's avatarJamie Madill <jmadill@chromium.org>
parent 4ef3c241
...@@ -22,13 +22,15 @@ namespace gl ...@@ -22,13 +22,15 @@ namespace gl
////// FramebufferAttachment Implementation ////// ////// FramebufferAttachment Implementation //////
FramebufferAttachment::FramebufferAttachment(GLenum binding) FramebufferAttachment::FramebufferAttachment(GLenum binding, RefCountObject *resource)
: mBinding(binding) : mBinding(binding)
{ {
mResource.set(resource);
} }
FramebufferAttachment::~FramebufferAttachment() FramebufferAttachment::~FramebufferAttachment()
{ {
mResource.set(nullptr);
} }
GLuint FramebufferAttachment::getRedSize() const GLuint FramebufferAttachment::getRedSize() const
...@@ -71,18 +73,21 @@ GLenum FramebufferAttachment::getColorEncoding() const ...@@ -71,18 +73,21 @@ GLenum FramebufferAttachment::getColorEncoding() const
return GetInternalFormatInfo(getInternalFormat()).colorEncoding; return GetInternalFormatInfo(getInternalFormat()).colorEncoding;
} }
GLuint FramebufferAttachment::id() const
{
return mResource->id();
}
///// TextureAttachment Implementation //////// ///// TextureAttachment Implementation ////////
TextureAttachment::TextureAttachment(GLenum binding, Texture *texture, const ImageIndex &index) TextureAttachment::TextureAttachment(GLenum binding, Texture *texture, const ImageIndex &index)
: FramebufferAttachment(binding), : FramebufferAttachment(binding, texture),
mIndex(index) mIndex(index)
{ {
mTexture.set(texture);
} }
TextureAttachment::~TextureAttachment() TextureAttachment::~TextureAttachment()
{ {
mTexture.set(NULL);
} }
GLsizei TextureAttachment::getSamples() const GLsizei TextureAttachment::getSamples() const
...@@ -90,24 +95,19 @@ GLsizei TextureAttachment::getSamples() const ...@@ -90,24 +95,19 @@ GLsizei TextureAttachment::getSamples() const
return 0; return 0;
} }
GLuint TextureAttachment::id() const
{
return mTexture->id();
}
GLsizei TextureAttachment::getWidth() const GLsizei TextureAttachment::getWidth() const
{ {
return mTexture->getWidth(mIndex.type, mIndex.mipIndex); return getTexture()->getWidth(mIndex.type, mIndex.mipIndex);
} }
GLsizei TextureAttachment::getHeight() const GLsizei TextureAttachment::getHeight() const
{ {
return mTexture->getHeight(mIndex.type, mIndex.mipIndex); return getTexture()->getHeight(mIndex.type, mIndex.mipIndex);
} }
GLenum TextureAttachment::getInternalFormat() const GLenum TextureAttachment::getInternalFormat() const
{ {
return mTexture->getInternalFormat(mIndex.type, mIndex.mipIndex); return getTexture()->getInternalFormat(mIndex.type, mIndex.mipIndex);
} }
GLenum TextureAttachment::type() const GLenum TextureAttachment::type() const
...@@ -130,11 +130,6 @@ GLint TextureAttachment::layer() const ...@@ -130,11 +130,6 @@ GLint TextureAttachment::layer() const
return mIndex.layerIndex; return mIndex.layerIndex;
} }
Texture *TextureAttachment::getTexture() const
{
return mTexture.get();
}
const ImageIndex *TextureAttachment::getTextureImageIndex() const const ImageIndex *TextureAttachment::getTextureImageIndex() const
{ {
return &mIndex; return &mIndex;
...@@ -143,46 +138,39 @@ const ImageIndex *TextureAttachment::getTextureImageIndex() const ...@@ -143,46 +138,39 @@ const ImageIndex *TextureAttachment::getTextureImageIndex() const
Renderbuffer *TextureAttachment::getRenderbuffer() const Renderbuffer *TextureAttachment::getRenderbuffer() const
{ {
UNREACHABLE(); UNREACHABLE();
return NULL; return nullptr;
} }
////// RenderbufferAttachment Implementation ////// ////// RenderbufferAttachment Implementation //////
RenderbufferAttachment::RenderbufferAttachment(GLenum binding, Renderbuffer *renderbuffer) RenderbufferAttachment::RenderbufferAttachment(GLenum binding, Renderbuffer *renderbuffer)
: FramebufferAttachment(binding) : FramebufferAttachment(binding, renderbuffer)
{ {
ASSERT(renderbuffer); ASSERT(renderbuffer);
mRenderbuffer.set(renderbuffer);
} }
RenderbufferAttachment::~RenderbufferAttachment() RenderbufferAttachment::~RenderbufferAttachment()
{ {
mRenderbuffer.set(NULL);
} }
GLsizei RenderbufferAttachment::getWidth() const GLsizei RenderbufferAttachment::getWidth() const
{ {
return mRenderbuffer->getWidth(); return getRenderbuffer()->getWidth();
} }
GLsizei RenderbufferAttachment::getHeight() const GLsizei RenderbufferAttachment::getHeight() const
{ {
return mRenderbuffer->getHeight(); return getRenderbuffer()->getHeight();
} }
GLenum RenderbufferAttachment::getInternalFormat() const GLenum RenderbufferAttachment::getInternalFormat() const
{ {
return mRenderbuffer->getInternalFormat(); return getRenderbuffer()->getInternalFormat();
} }
GLsizei RenderbufferAttachment::getSamples() const GLsizei RenderbufferAttachment::getSamples() const
{ {
return mRenderbuffer->getSamples(); return getRenderbuffer()->getSamples();
}
GLuint RenderbufferAttachment::id() const
{
return mRenderbuffer->id();
} }
GLenum RenderbufferAttachment::type() const GLenum RenderbufferAttachment::type() const
...@@ -208,59 +196,46 @@ GLint RenderbufferAttachment::layer() const ...@@ -208,59 +196,46 @@ GLint RenderbufferAttachment::layer() const
Texture *RenderbufferAttachment::getTexture() const Texture *RenderbufferAttachment::getTexture() const
{ {
UNREACHABLE(); UNREACHABLE();
return NULL; return nullptr;
} }
const ImageIndex *RenderbufferAttachment::getTextureImageIndex() const const ImageIndex *RenderbufferAttachment::getTextureImageIndex() const
{ {
UNREACHABLE(); UNREACHABLE();
return NULL; return nullptr;
}
Renderbuffer *RenderbufferAttachment::getRenderbuffer() const
{
return mRenderbuffer.get();
} }
DefaultAttachment::DefaultAttachment(GLenum binding, egl::Surface *surface) DefaultAttachment::DefaultAttachment(GLenum binding, egl::Surface *surface)
: FramebufferAttachment(binding) : FramebufferAttachment(binding, surface)
{ {
mSurface.set(surface);
} }
DefaultAttachment::~DefaultAttachment() DefaultAttachment::~DefaultAttachment()
{ {
mSurface.set(nullptr);
} }
GLsizei DefaultAttachment::getWidth() const GLsizei DefaultAttachment::getWidth() const
{ {
return mSurface->getWidth(); return getSurface()->getWidth();
} }
GLsizei DefaultAttachment::getHeight() const GLsizei DefaultAttachment::getHeight() const
{ {
return mSurface->getHeight(); return getSurface()->getHeight();
} }
GLenum DefaultAttachment::getInternalFormat() const GLenum DefaultAttachment::getInternalFormat() const
{ {
const egl::Config *config = mSurface->getConfig(); const egl::Config *config = getSurface()->getConfig();
return (getBinding() == GL_BACK ? config->renderTargetFormat : config->depthStencilFormat); return (getBinding() == GL_BACK ? config->renderTargetFormat : config->depthStencilFormat);
} }
GLsizei DefaultAttachment::getSamples() const GLsizei DefaultAttachment::getSamples() const
{ {
const egl::Config *config = mSurface->getConfig(); const egl::Config *config = getSurface()->getConfig();
return config->samples; return config->samples;
} }
GLuint DefaultAttachment::id() const
{
return 0;
}
GLenum DefaultAttachment::type() const GLenum DefaultAttachment::type() const
{ {
return GL_FRAMEBUFFER_DEFAULT; return GL_FRAMEBUFFER_DEFAULT;
...@@ -284,19 +259,19 @@ GLint DefaultAttachment::layer() const ...@@ -284,19 +259,19 @@ GLint DefaultAttachment::layer() const
Texture *DefaultAttachment::getTexture() const Texture *DefaultAttachment::getTexture() const
{ {
UNREACHABLE(); UNREACHABLE();
return NULL; return nullptr;
} }
const ImageIndex *DefaultAttachment::getTextureImageIndex() const const ImageIndex *DefaultAttachment::getTextureImageIndex() const
{ {
UNREACHABLE(); UNREACHABLE();
return NULL; return nullptr;
} }
Renderbuffer *DefaultAttachment::getRenderbuffer() const Renderbuffer *DefaultAttachment::getRenderbuffer() const
{ {
UNREACHABLE(); UNREACHABLE();
return NULL; return nullptr;
} }
} }
...@@ -10,12 +10,11 @@ ...@@ -10,12 +10,11 @@
#ifndef LIBANGLE_FRAMEBUFFERATTACHMENT_H_ #ifndef LIBANGLE_FRAMEBUFFERATTACHMENT_H_
#define LIBANGLE_FRAMEBUFFERATTACHMENT_H_ #define LIBANGLE_FRAMEBUFFERATTACHMENT_H_
#include "libANGLE/Texture.h"
#include "libANGLE/RefCountObject.h"
#include "common/angleutils.h"
#include "angle_gl.h" #include "angle_gl.h"
#include "common/angleutils.h"
#include "libANGLE/Texture.h"
#include "libANGLE/Renderbuffer.h"
#include "libANGLE/Surface.h"
namespace gl namespace gl
{ {
...@@ -30,7 +29,7 @@ class Renderbuffer; ...@@ -30,7 +29,7 @@ class Renderbuffer;
class FramebufferAttachment : angle::NonCopyable class FramebufferAttachment : angle::NonCopyable
{ {
public: public:
explicit FramebufferAttachment(GLenum binding); explicit FramebufferAttachment(GLenum binding, RefCountObject *resource);
virtual ~FramebufferAttachment(); virtual ~FramebufferAttachment();
// Helper methods // Helper methods
...@@ -48,13 +47,14 @@ class FramebufferAttachment : angle::NonCopyable ...@@ -48,13 +47,14 @@ class FramebufferAttachment : angle::NonCopyable
GLenum getBinding() const { return mBinding; } GLenum getBinding() const { return mBinding; }
GLuint id() const;
// Child class interface // Child class interface
virtual GLsizei getWidth() const = 0; virtual GLsizei getWidth() const = 0;
virtual GLsizei getHeight() const = 0; virtual GLsizei getHeight() const = 0;
virtual GLenum getInternalFormat() const = 0; virtual GLenum getInternalFormat() const = 0;
virtual GLsizei getSamples() const = 0; virtual GLsizei getSamples() const = 0;
virtual GLuint id() const = 0;
virtual GLenum type() const = 0; virtual GLenum type() const = 0;
virtual GLint mipLevel() const = 0; virtual GLint mipLevel() const = 0;
virtual GLenum cubeMapFace() const = 0; virtual GLenum cubeMapFace() const = 0;
...@@ -64,8 +64,9 @@ class FramebufferAttachment : angle::NonCopyable ...@@ -64,8 +64,9 @@ class FramebufferAttachment : angle::NonCopyable
virtual const ImageIndex *getTextureImageIndex() const = 0; virtual const ImageIndex *getTextureImageIndex() const = 0;
virtual Renderbuffer *getRenderbuffer() const = 0; virtual Renderbuffer *getRenderbuffer() const = 0;
private: protected:
GLenum mBinding; GLenum mBinding;
BindingPointer<RefCountObject> mResource;
}; };
class TextureAttachment : public FramebufferAttachment class TextureAttachment : public FramebufferAttachment
...@@ -75,7 +76,6 @@ class TextureAttachment : public FramebufferAttachment ...@@ -75,7 +76,6 @@ class TextureAttachment : public FramebufferAttachment
virtual ~TextureAttachment(); virtual ~TextureAttachment();
virtual GLsizei getSamples() const; virtual GLsizei getSamples() const;
virtual GLuint id() const;
virtual GLsizei getWidth() const; virtual GLsizei getWidth() const;
virtual GLsizei getHeight() const; virtual GLsizei getHeight() const;
...@@ -86,12 +86,15 @@ class TextureAttachment : public FramebufferAttachment ...@@ -86,12 +86,15 @@ class TextureAttachment : public FramebufferAttachment
virtual GLenum cubeMapFace() const; virtual GLenum cubeMapFace() const;
virtual GLint layer() const; virtual GLint layer() const;
virtual Texture *getTexture() const;
virtual const ImageIndex *getTextureImageIndex() const; virtual const ImageIndex *getTextureImageIndex() const;
virtual Renderbuffer *getRenderbuffer() const; virtual Renderbuffer *getRenderbuffer() const;
Texture *getTexture() const override
{
return rx::GetAs<Texture>(mResource.get());
}
private: private:
BindingPointer<Texture> mTexture;
ImageIndex mIndex; ImageIndex mIndex;
}; };
...@@ -107,7 +110,6 @@ class RenderbufferAttachment : public FramebufferAttachment ...@@ -107,7 +110,6 @@ class RenderbufferAttachment : public FramebufferAttachment
virtual GLenum getInternalFormat() const; virtual GLenum getInternalFormat() const;
virtual GLsizei getSamples() const; virtual GLsizei getSamples() const;
virtual GLuint id() const;
virtual GLenum type() const; virtual GLenum type() const;
virtual GLint mipLevel() const; virtual GLint mipLevel() const;
virtual GLenum cubeMapFace() const; virtual GLenum cubeMapFace() const;
...@@ -115,10 +117,11 @@ class RenderbufferAttachment : public FramebufferAttachment ...@@ -115,10 +117,11 @@ class RenderbufferAttachment : public FramebufferAttachment
virtual Texture *getTexture() const; virtual Texture *getTexture() const;
virtual const ImageIndex *getTextureImageIndex() const; virtual const ImageIndex *getTextureImageIndex() const;
virtual Renderbuffer *getRenderbuffer() const;
private: Renderbuffer *getRenderbuffer() const override
BindingPointer<Renderbuffer> mRenderbuffer; {
return rx::GetAs<Renderbuffer>(mResource.get());
}
}; };
class DefaultAttachment : public FramebufferAttachment class DefaultAttachment : public FramebufferAttachment
...@@ -133,7 +136,6 @@ class DefaultAttachment : public FramebufferAttachment ...@@ -133,7 +136,6 @@ class DefaultAttachment : public FramebufferAttachment
virtual GLenum getInternalFormat() const; virtual GLenum getInternalFormat() const;
virtual GLsizei getSamples() const; virtual GLsizei getSamples() const;
virtual GLuint id() const;
virtual GLenum type() const; virtual GLenum type() const;
virtual GLint mipLevel() const; virtual GLint mipLevel() const;
virtual GLenum cubeMapFace() const; virtual GLenum cubeMapFace() const;
...@@ -143,10 +145,10 @@ class DefaultAttachment : public FramebufferAttachment ...@@ -143,10 +145,10 @@ class DefaultAttachment : public FramebufferAttachment
virtual const ImageIndex *getTextureImageIndex() const; virtual const ImageIndex *getTextureImageIndex() const;
virtual Renderbuffer *getRenderbuffer() const; virtual Renderbuffer *getRenderbuffer() const;
const egl::Surface *getSurface() const { return mSurface.get(); } const egl::Surface *getSurface() const
{
private: return rx::GetAs<egl::Surface>(mResource.get());
BindingPointer<egl::Surface> mSurface; }
}; };
} }
......
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