Commit 526a89d0 by Alexis Hetu Committed by Alexis Hétu

Fixed setting Renderbuffer's layer and level

The original code allowed Renderbuffer objects to select layer and level at construction time, but after that point these parameters were not modifiable. This cl adds the code to modify layer and/or level when requested. Change-Id: Ic694904f83b794879110bd0505a36a011d79a2a5 Reviewed-on: https://swiftshader-review.googlesource.com/4765Tested-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com>
parent 4d208956
......@@ -347,6 +347,11 @@ GLint Renderbuffer::getLayer() const
return mInstance->getLayer();
}
GLint Renderbuffer::getLevel() const
{
return mInstance->getLevel();
}
GLenum Renderbuffer::getFormat() const
{
return mInstance->getFormat();
......@@ -392,6 +397,16 @@ GLsizei Renderbuffer::getSamples() const
return mInstance->getSamples();
}
void Renderbuffer::setLayer(GLint layer)
{
return mInstance->setLayer(layer);
}
void Renderbuffer::setLevel(GLint level)
{
return mInstance->setLevel(level);
}
void Renderbuffer::setStorage(RenderbufferStorage *newStorage)
{
ASSERT(newStorage != NULL);
......
......@@ -49,10 +49,14 @@ public:
virtual GLsizei getHeight() const = 0;
virtual GLsizei getDepth() const { return 1; }
virtual GLint getLayer() const { return 0; }
virtual GLint getLevel() const { return 0; }
virtual GLenum getFormat() const = 0;
virtual sw::Format getInternalFormat() const = 0;
virtual GLsizei getSamples() const = 0;
virtual void setLayer(GLint) {}
virtual void setLevel(GLint) {}
GLuint getRedSize() const;
GLuint getGreenSize() const;
GLuint getBlueSize() const;
......@@ -77,10 +81,13 @@ public:
virtual GLsizei getWidth() const;
virtual GLsizei getHeight() const;
virtual GLint getLevel() const { return mLevel; }
virtual GLenum getFormat() const;
virtual sw::Format getInternalFormat() const;
virtual GLsizei getSamples() const;
virtual void setLevel(GLint level) { mLevel = level; }
private:
gl::BindingPointer<Texture2D> mTexture2D;
GLint mLevel;
......@@ -104,10 +111,14 @@ public:
virtual GLsizei getHeight() const;
virtual GLsizei getDepth() const;
virtual GLint getLayer() const { return mLayer; }
virtual GLint getLevel() const { return mLevel; }
virtual GLenum getFormat() const;
virtual sw::Format getInternalFormat() const;
virtual GLsizei getSamples() const;
virtual void setLayer(GLint layer) { mLayer = layer; }
virtual void setLevel(GLint level) { mLevel = level; }
private:
gl::BindingPointer<Texture3D> mTexture3D;
GLint mLevel;
......@@ -130,10 +141,13 @@ public:
virtual GLsizei getWidth() const;
virtual GLsizei getHeight() const;
virtual GLint getLevel() const { return mLevel; }
virtual GLenum getFormat() const;
virtual sw::Format getInternalFormat() const;
virtual GLsizei getSamples() const;
virtual void setLevel(GLint level) { mLevel = level; }
private:
gl::BindingPointer<TextureCubeMap> mTextureCubeMap;
GLenum mTarget;
......@@ -193,6 +207,7 @@ public:
GLsizei getHeight() const;
GLsizei getDepth() const;
GLint getLayer() const;
GLint getLevel() const;
GLenum getFormat() const;
sw::Format getInternalFormat() const;
GLuint getRedSize() const;
......@@ -203,6 +218,8 @@ public:
GLuint getStencilSize() const;
GLsizei getSamples() const;
void setLayer(GLint layer);
void setLevel(GLint level);
void setStorage(RenderbufferStorage *newStorage);
private:
......
......@@ -941,6 +941,10 @@ Renderbuffer *Texture2D::getRenderbuffer(GLenum target, GLint level, GLint layer
{
mColorbufferProxy = new Renderbuffer(name, new RenderbufferTexture2D(this, level));
}
else
{
mColorbufferProxy->setLevel(level);
}
return mColorbufferProxy;
}
......@@ -1424,6 +1428,10 @@ Renderbuffer *TextureCubeMap::getRenderbuffer(GLenum target, GLint level, GLint
{
mFaceProxies[face] = new Renderbuffer(name, new RenderbufferTextureCubeMap(this, target, level));
}
else
{
mFaceProxies[face]->setLevel(level);
}
return mFaceProxies[face];
}
......@@ -1903,6 +1911,11 @@ Renderbuffer *Texture3D::getRenderbuffer(GLenum target, GLint level, GLint layer
{
mColorbufferProxy = new Renderbuffer(name, new RenderbufferTexture3D(this, level, layer));
}
else
{
mColorbufferProxy->setLevel(level);
mColorbufferProxy->setLayer(layer);
}
return mColorbufferProxy;
}
......
......@@ -3020,7 +3020,7 @@ void GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenu
case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL:
if(attachmentObjectType == GL_TEXTURE)
{
*params = 0; // FramebufferTexture2D will not allow level to be set to anything else in GL ES 2.0
*params = clientVersion < 3 ? 0 : renderbuffer->getLevel(); // FramebufferTexture2D will not allow level to be set to anything else in GL ES 2.0
}
else
{
......
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