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
////// FramebufferAttachment Implementation //////
FramebufferAttachment::FramebufferAttachment(GLenum binding)
FramebufferAttachment::FramebufferAttachment(GLenum binding, RefCountObject *resource)
: mBinding(binding)
{
mResource.set(resource);
}
FramebufferAttachment::~FramebufferAttachment()
{
mResource.set(nullptr);
}
GLuint FramebufferAttachment::getRedSize() const
......@@ -71,18 +73,21 @@ GLenum FramebufferAttachment::getColorEncoding() const
return GetInternalFormatInfo(getInternalFormat()).colorEncoding;
}
GLuint FramebufferAttachment::id() const
{
return mResource->id();
}
///// TextureAttachment Implementation ////////
TextureAttachment::TextureAttachment(GLenum binding, Texture *texture, const ImageIndex &index)
: FramebufferAttachment(binding),
: FramebufferAttachment(binding, texture),
mIndex(index)
{
mTexture.set(texture);
}
TextureAttachment::~TextureAttachment()
{
mTexture.set(NULL);
}
GLsizei TextureAttachment::getSamples() const
......@@ -90,24 +95,19 @@ GLsizei TextureAttachment::getSamples() const
return 0;
}
GLuint TextureAttachment::id() const
{
return mTexture->id();
}
GLsizei TextureAttachment::getWidth() const
{
return mTexture->getWidth(mIndex.type, mIndex.mipIndex);
return getTexture()->getWidth(mIndex.type, mIndex.mipIndex);
}
GLsizei TextureAttachment::getHeight() const
{
return mTexture->getHeight(mIndex.type, mIndex.mipIndex);
return getTexture()->getHeight(mIndex.type, mIndex.mipIndex);
}
GLenum TextureAttachment::getInternalFormat() const
{
return mTexture->getInternalFormat(mIndex.type, mIndex.mipIndex);
return getTexture()->getInternalFormat(mIndex.type, mIndex.mipIndex);
}
GLenum TextureAttachment::type() const
......@@ -130,11 +130,6 @@ GLint TextureAttachment::layer() const
return mIndex.layerIndex;
}
Texture *TextureAttachment::getTexture() const
{
return mTexture.get();
}
const ImageIndex *TextureAttachment::getTextureImageIndex() const
{
return &mIndex;
......@@ -143,46 +138,39 @@ const ImageIndex *TextureAttachment::getTextureImageIndex() const
Renderbuffer *TextureAttachment::getRenderbuffer() const
{
UNREACHABLE();
return NULL;
return nullptr;
}
////// RenderbufferAttachment Implementation //////
RenderbufferAttachment::RenderbufferAttachment(GLenum binding, Renderbuffer *renderbuffer)
: FramebufferAttachment(binding)
: FramebufferAttachment(binding, renderbuffer)
{
ASSERT(renderbuffer);
mRenderbuffer.set(renderbuffer);
}
RenderbufferAttachment::~RenderbufferAttachment()
{
mRenderbuffer.set(NULL);
}
GLsizei RenderbufferAttachment::getWidth() const
{
return mRenderbuffer->getWidth();
return getRenderbuffer()->getWidth();
}
GLsizei RenderbufferAttachment::getHeight() const
{
return mRenderbuffer->getHeight();
return getRenderbuffer()->getHeight();
}
GLenum RenderbufferAttachment::getInternalFormat() const
{
return mRenderbuffer->getInternalFormat();
return getRenderbuffer()->getInternalFormat();
}
GLsizei RenderbufferAttachment::getSamples() const
{
return mRenderbuffer->getSamples();
}
GLuint RenderbufferAttachment::id() const
{
return mRenderbuffer->id();
return getRenderbuffer()->getSamples();
}
GLenum RenderbufferAttachment::type() const
......@@ -208,59 +196,46 @@ GLint RenderbufferAttachment::layer() const
Texture *RenderbufferAttachment::getTexture() const
{
UNREACHABLE();
return NULL;
return nullptr;
}
const ImageIndex *RenderbufferAttachment::getTextureImageIndex() const
{
UNREACHABLE();
return NULL;
}
Renderbuffer *RenderbufferAttachment::getRenderbuffer() const
{
return mRenderbuffer.get();
return nullptr;
}
DefaultAttachment::DefaultAttachment(GLenum binding, egl::Surface *surface)
: FramebufferAttachment(binding)
: FramebufferAttachment(binding, surface)
{
mSurface.set(surface);
}
DefaultAttachment::~DefaultAttachment()
{
mSurface.set(nullptr);
}
GLsizei DefaultAttachment::getWidth() const
{
return mSurface->getWidth();
return getSurface()->getWidth();
}
GLsizei DefaultAttachment::getHeight() const
{
return mSurface->getHeight();
return getSurface()->getHeight();
}
GLenum DefaultAttachment::getInternalFormat() const
{
const egl::Config *config = mSurface->getConfig();
const egl::Config *config = getSurface()->getConfig();
return (getBinding() == GL_BACK ? config->renderTargetFormat : config->depthStencilFormat);
}
GLsizei DefaultAttachment::getSamples() const
{
const egl::Config *config = mSurface->getConfig();
const egl::Config *config = getSurface()->getConfig();
return config->samples;
}
GLuint DefaultAttachment::id() const
{
return 0;
}
GLenum DefaultAttachment::type() const
{
return GL_FRAMEBUFFER_DEFAULT;
......@@ -284,19 +259,19 @@ GLint DefaultAttachment::layer() const
Texture *DefaultAttachment::getTexture() const
{
UNREACHABLE();
return NULL;
return nullptr;
}
const ImageIndex *DefaultAttachment::getTextureImageIndex() const
{
UNREACHABLE();
return NULL;
return nullptr;
}
Renderbuffer *DefaultAttachment::getRenderbuffer() const
{
UNREACHABLE();
return NULL;
return nullptr;
}
}
......@@ -10,12 +10,11 @@
#ifndef LIBANGLE_FRAMEBUFFERATTACHMENT_H_
#define LIBANGLE_FRAMEBUFFERATTACHMENT_H_
#include "libANGLE/Texture.h"
#include "libANGLE/RefCountObject.h"
#include "common/angleutils.h"
#include "angle_gl.h"
#include "common/angleutils.h"
#include "libANGLE/Texture.h"
#include "libANGLE/Renderbuffer.h"
#include "libANGLE/Surface.h"
namespace gl
{
......@@ -30,7 +29,7 @@ class Renderbuffer;
class FramebufferAttachment : angle::NonCopyable
{
public:
explicit FramebufferAttachment(GLenum binding);
explicit FramebufferAttachment(GLenum binding, RefCountObject *resource);
virtual ~FramebufferAttachment();
// Helper methods
......@@ -48,13 +47,14 @@ class FramebufferAttachment : angle::NonCopyable
GLenum getBinding() const { return mBinding; }
GLuint id() const;
// Child class interface
virtual GLsizei getWidth() const = 0;
virtual GLsizei getHeight() const = 0;
virtual GLenum getInternalFormat() const = 0;
virtual GLsizei getSamples() const = 0;
virtual GLuint id() const = 0;
virtual GLenum type() const = 0;
virtual GLint mipLevel() const = 0;
virtual GLenum cubeMapFace() const = 0;
......@@ -64,8 +64,9 @@ class FramebufferAttachment : angle::NonCopyable
virtual const ImageIndex *getTextureImageIndex() const = 0;
virtual Renderbuffer *getRenderbuffer() const = 0;
private:
protected:
GLenum mBinding;
BindingPointer<RefCountObject> mResource;
};
class TextureAttachment : public FramebufferAttachment
......@@ -75,7 +76,6 @@ class TextureAttachment : public FramebufferAttachment
virtual ~TextureAttachment();
virtual GLsizei getSamples() const;
virtual GLuint id() const;
virtual GLsizei getWidth() const;
virtual GLsizei getHeight() const;
......@@ -86,12 +86,15 @@ class TextureAttachment : public FramebufferAttachment
virtual GLenum cubeMapFace() const;
virtual GLint layer() const;
virtual Texture *getTexture() const;
virtual const ImageIndex *getTextureImageIndex() const;
virtual Renderbuffer *getRenderbuffer() const;
Texture *getTexture() const override
{
return rx::GetAs<Texture>(mResource.get());
}
private:
BindingPointer<Texture> mTexture;
ImageIndex mIndex;
};
......@@ -107,7 +110,6 @@ class RenderbufferAttachment : public FramebufferAttachment
virtual GLenum getInternalFormat() const;
virtual GLsizei getSamples() const;
virtual GLuint id() const;
virtual GLenum type() const;
virtual GLint mipLevel() const;
virtual GLenum cubeMapFace() const;
......@@ -115,10 +117,11 @@ class RenderbufferAttachment : public FramebufferAttachment
virtual Texture *getTexture() const;
virtual const ImageIndex *getTextureImageIndex() const;
virtual Renderbuffer *getRenderbuffer() const;
private:
BindingPointer<Renderbuffer> mRenderbuffer;
Renderbuffer *getRenderbuffer() const override
{
return rx::GetAs<Renderbuffer>(mResource.get());
}
};
class DefaultAttachment : public FramebufferAttachment
......@@ -133,7 +136,6 @@ class DefaultAttachment : public FramebufferAttachment
virtual GLenum getInternalFormat() const;
virtual GLsizei getSamples() const;
virtual GLuint id() const;
virtual GLenum type() const;
virtual GLint mipLevel() const;
virtual GLenum cubeMapFace() const;
......@@ -143,10 +145,10 @@ class DefaultAttachment : public FramebufferAttachment
virtual const ImageIndex *getTextureImageIndex() const;
virtual Renderbuffer *getRenderbuffer() const;
const egl::Surface *getSurface() const { return mSurface.get(); }
private:
BindingPointer<egl::Surface> mSurface;
const egl::Surface *getSurface() const
{
return rx::GetAs<egl::Surface>(mResource.get());
}
};
}
......
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