Commit cd69f1c9 by Geoff Lang

Implement RenderbufferGL.

BUG=angleproject:886 Change-Id: I7480943d678b2cdf6e997c3f8316acdef32f5f0d Reviewed-on: https://chromium-review.googlesource.com/260889Reviewed-by: 's avatarKenneth Russell <kbr@chromium.org> Reviewed-by: 's avatarBrandon Jones <bajones@chromium.org> Tested-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent a08e1bd0
...@@ -72,6 +72,11 @@ rx::RenderbufferImpl *Renderbuffer::getImplementation() ...@@ -72,6 +72,11 @@ rx::RenderbufferImpl *Renderbuffer::getImplementation()
return mRenderbuffer; return mRenderbuffer;
} }
const rx::RenderbufferImpl *Renderbuffer::getImplementation() const
{
return mRenderbuffer;
}
GLsizei Renderbuffer::getWidth() const GLsizei Renderbuffer::getWidth() const
{ {
return mWidth; return mWidth;
......
...@@ -42,6 +42,7 @@ class Renderbuffer : public RefCountObject ...@@ -42,6 +42,7 @@ class Renderbuffer : public RefCountObject
Error setStorageMultisample(size_t samples, GLenum internalformat, size_t width, size_t height); Error setStorageMultisample(size_t samples, GLenum internalformat, size_t width, size_t height);
rx::RenderbufferImpl *getImplementation(); rx::RenderbufferImpl *getImplementation();
const rx::RenderbufferImpl *getImplementation() const;
GLsizei getWidth() const; GLsizei getWidth() const;
GLsizei getHeight() const; GLsizei getHeight() const;
......
...@@ -74,14 +74,11 @@ static void BindFramebufferAttachment(const FunctionsGL *functions, GLenum attac ...@@ -74,14 +74,11 @@ static void BindFramebufferAttachment(const FunctionsGL *functions, GLenum attac
} }
else if (attachment->type() == GL_RENDERBUFFER) else if (attachment->type() == GL_RENDERBUFFER)
{ {
// TODO: support RenderbufferGL const gl::Renderbuffer *renderbuffer = GetAs<gl::RenderbufferAttachment>(attachment)->getRenderbuffer();
UNIMPLEMENTED(); const RenderbufferGL *renderbufferGL = GetImplAs<RenderbufferGL>(renderbuffer);
//const gl::Renderbuffer *renderbuffer = GetAs<gl::RenderbufferAttachment>(attachment)->getRenderbuffer(); functions->framebufferRenderbuffer(GL_FRAMEBUFFER, attachmentPoint, GL_RENDERBUFFER,
//const RenderbufferGL *renderbufferGL = GetImplAs<RenderbufferGL>(renderbuffer); renderbufferGL->getRenderbufferID());
//functions->framebufferRenderbuffer(GL_FRAMEBUFFER, attachmentPoint, GL_RENDERBUFFER,
// renderbufferGL->getRenderbufferID());
} }
else else
{ {
......
...@@ -9,27 +9,48 @@ ...@@ -9,27 +9,48 @@
#include "libANGLE/renderer/gl/RenderbufferGL.h" #include "libANGLE/renderer/gl/RenderbufferGL.h"
#include "common/debug.h" #include "common/debug.h"
#include "libANGLE/angletypes.h"
#include "libANGLE/renderer/gl/FunctionsGL.h"
#include "libANGLE/renderer/gl/StateManagerGL.h"
namespace rx namespace rx
{ {
RenderbufferGL::RenderbufferGL() RenderbufferGL::RenderbufferGL(const FunctionsGL *functions, StateManagerGL *stateManager)
: RenderbufferImpl() : RenderbufferImpl(),
{} mFunctions(functions),
mStateManager(stateManager),
mRenderbufferID(0)
{
mFunctions->genRenderbuffers(1, &mRenderbufferID);
}
RenderbufferGL::~RenderbufferGL() RenderbufferGL::~RenderbufferGL()
{} {
if (mRenderbufferID != 0)
{
mFunctions->deleteRenderbuffers(1, &mRenderbufferID);
mRenderbufferID = 0;
}
}
gl::Error RenderbufferGL::setStorage(GLenum internalformat, size_t width, size_t height) gl::Error RenderbufferGL::setStorage(GLenum internalformat, size_t width, size_t height)
{ {
UNIMPLEMENTED(); mStateManager->bindRenderbuffer(GL_RENDERBUFFER, mRenderbufferID);
return gl::Error(GL_INVALID_OPERATION); mFunctions->renderbufferStorage(GL_RENDERBUFFER, internalformat, width, height);
return gl::Error(GL_NO_ERROR);
} }
gl::Error RenderbufferGL::setStorageMultisample(size_t samples, GLenum internalformat, size_t width, size_t height) gl::Error RenderbufferGL::setStorageMultisample(size_t samples, GLenum internalformat, size_t width, size_t height)
{ {
UNIMPLEMENTED(); mStateManager->bindRenderbuffer(GL_RENDERBUFFER, mRenderbufferID);
return gl::Error(GL_INVALID_OPERATION); mFunctions->renderbufferStorageMultisample(GL_RENDERBUFFER, samples, internalformat, width, height);
return gl::Error(GL_NO_ERROR);
}
GLuint RenderbufferGL::getRenderbufferID() const
{
return mRenderbufferID;
} }
} }
...@@ -14,17 +14,27 @@ ...@@ -14,17 +14,27 @@
namespace rx namespace rx
{ {
class FunctionsGL;
class StateManagerGL;
class RenderbufferGL : public RenderbufferImpl class RenderbufferGL : public RenderbufferImpl
{ {
public: public:
RenderbufferGL(); RenderbufferGL(const FunctionsGL *functions, StateManagerGL *stateManager);
~RenderbufferGL() override; ~RenderbufferGL() override;
virtual gl::Error setStorage(GLenum internalformat, size_t width, size_t height) override; virtual gl::Error setStorage(GLenum internalformat, size_t width, size_t height) override;
virtual gl::Error setStorageMultisample(size_t samples, GLenum internalformat, size_t width, size_t height) override; virtual gl::Error setStorageMultisample(size_t samples, GLenum internalformat, size_t width, size_t height) override;
GLuint getRenderbufferID() const;
private: private:
DISALLOW_COPY_AND_ASSIGN(RenderbufferGL); DISALLOW_COPY_AND_ASSIGN(RenderbufferGL);
const FunctionsGL *mFunctions;
StateManagerGL *mStateManager;
GLuint mRenderbufferID;
}; };
} }
......
...@@ -130,7 +130,7 @@ TextureImpl *RendererGL::createTexture(GLenum target) ...@@ -130,7 +130,7 @@ TextureImpl *RendererGL::createTexture(GLenum target)
RenderbufferImpl *RendererGL::createRenderbuffer() RenderbufferImpl *RendererGL::createRenderbuffer()
{ {
return new RenderbufferGL(); return new RenderbufferGL(mFunctions, mStateManager);
} }
BufferImpl *RendererGL::createBuffer() BufferImpl *RendererGL::createBuffer()
......
...@@ -30,6 +30,7 @@ StateManagerGL::StateManagerGL(const FunctionsGL *functions, const gl::Caps &ren ...@@ -30,6 +30,7 @@ StateManagerGL::StateManagerGL(const FunctionsGL *functions, const gl::Caps &ren
mUnpackAlignment(4), mUnpackAlignment(4),
mUnpackRowLength(0), mUnpackRowLength(0),
mFramebuffers(), mFramebuffers(),
mRenderbuffer(0),
mScissor(0, 0, 0, 0), mScissor(0, 0, 0, 0),
mViewport(0, 0, 0, 0), mViewport(0, 0, 0, 0),
mClearColor(0.0f, 0.0f, 0.0f, 0.0f), mClearColor(0.0f, 0.0f, 0.0f, 0.0f),
...@@ -122,6 +123,16 @@ void StateManagerGL::bindFramebuffer(GLenum type, GLuint framebuffer) ...@@ -122,6 +123,16 @@ void StateManagerGL::bindFramebuffer(GLenum type, GLuint framebuffer)
} }
} }
void StateManagerGL::bindRenderbuffer(GLenum type, GLuint renderbuffer)
{
ASSERT(type == GL_RENDERBUFFER);
if (mRenderbuffer != renderbuffer)
{
mRenderbuffer = renderbuffer;
mFunctions->bindRenderbuffer(type, mRenderbuffer);
}
}
void StateManagerGL::setClearState(const gl::State &state, GLbitfield mask) void StateManagerGL::setClearState(const gl::State &state, GLbitfield mask)
{ {
// Only apply the state required to do a clear // Only apply the state required to do a clear
......
...@@ -40,6 +40,7 @@ class StateManagerGL ...@@ -40,6 +40,7 @@ class StateManagerGL
void bindTexture(GLenum type, GLuint texture); void bindTexture(GLenum type, GLuint texture);
void setPixelUnpackState(GLint alignment, GLint rowLength); void setPixelUnpackState(GLint alignment, GLint rowLength);
void bindFramebuffer(GLenum type, GLuint framebuffer); void bindFramebuffer(GLenum type, GLuint framebuffer);
void bindRenderbuffer(GLenum type, GLuint renderbuffer);
void setClearState(const gl::State &state, GLbitfield mask); void setClearState(const gl::State &state, GLbitfield mask);
...@@ -74,6 +75,7 @@ class StateManagerGL ...@@ -74,6 +75,7 @@ class StateManagerGL
GLint mUnpackRowLength; GLint mUnpackRowLength;
std::map<GLenum, GLuint> mFramebuffers; std::map<GLenum, GLuint> mFramebuffers;
GLuint mRenderbuffer;
gl::Rectangle mScissor; gl::Rectangle mScissor;
gl::Rectangle mViewport; gl::Rectangle mViewport;
......
...@@ -39,7 +39,7 @@ void GenerateCaps(const FunctionsGL *functions, gl::Caps *caps, gl::TextureCapsM ...@@ -39,7 +39,7 @@ void GenerateCaps(const FunctionsGL *functions, gl::Caps *caps, gl::TextureCapsM
caps->maxCubeMapTextureSize = QuerySingleGLInt(functions, GL_MAX_CUBE_MAP_TEXTURE_SIZE); caps->maxCubeMapTextureSize = QuerySingleGLInt(functions, GL_MAX_CUBE_MAP_TEXTURE_SIZE);
caps->maxArrayTextureLayers = QuerySingleGLInt(functions, GL_MAX_ARRAY_TEXTURE_LAYERS); caps->maxArrayTextureLayers = QuerySingleGLInt(functions, GL_MAX_ARRAY_TEXTURE_LAYERS);
caps->maxLODBias = 2.0f; caps->maxLODBias = 2.0f;
caps->maxRenderbufferSize = 2048; caps->maxRenderbufferSize = QuerySingleGLInt(functions, GL_MAX_RENDERBUFFER_SIZE);
caps->maxDrawBuffers = QuerySingleGLInt(functions, GL_MAX_DRAW_BUFFERS); caps->maxDrawBuffers = QuerySingleGLInt(functions, GL_MAX_DRAW_BUFFERS);
caps->maxColorAttachments = QuerySingleGLInt(functions, GL_MAX_COLOR_ATTACHMENTS); caps->maxColorAttachments = QuerySingleGLInt(functions, GL_MAX_COLOR_ATTACHMENTS);
caps->maxViewportWidth = caps->max2DTextureSize; caps->maxViewportWidth = caps->max2DTextureSize;
......
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