OSDN Git Service

Fixed setting Renderbuffer's layer and level
authorAlexis Hetu <sugoi@google.com>
Thu, 11 Feb 2016 20:41:27 +0000 (15:41 -0500)
committerAlexis Hétu <sugoi@google.com>
Thu, 18 Feb 2016 16:23:07 +0000 (16:23 +0000)
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/4765
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
src/OpenGL/libGLESv2/Renderbuffer.cpp
src/OpenGL/libGLESv2/Renderbuffer.h
src/OpenGL/libGLESv2/Texture.cpp
src/OpenGL/libGLESv2/libGLESv2.cpp

index 9118713..2f28509 100644 (file)
@@ -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);
index 86715f9..a4e2a20 100644 (file)
@@ -49,10 +49,14 @@ public:
        virtual GLsizei getHeight() const = 0;\r
        virtual GLsizei getDepth() const { return 1; }\r
        virtual GLint getLayer() const { return 0; }\r
+       virtual GLint getLevel() const { return 0; }\r
        virtual GLenum getFormat() const = 0;\r
        virtual sw::Format getInternalFormat() const = 0;\r
        virtual GLsizei getSamples() const = 0;\r
 \r
+       virtual void setLayer(GLint) {}\r
+       virtual void setLevel(GLint) {}\r
+\r
        GLuint getRedSize() const;\r
        GLuint getGreenSize() const;\r
        GLuint getBlueSize() const;\r
@@ -77,10 +81,13 @@ public:
 \r
        virtual GLsizei getWidth() const;\r
        virtual GLsizei getHeight() const;\r
+       virtual GLint getLevel() const { return mLevel; }\r
        virtual GLenum getFormat() const;\r
        virtual sw::Format getInternalFormat() const;\r
        virtual GLsizei getSamples() const;\r
 \r
+       virtual void setLevel(GLint level) { mLevel = level; }\r
+\r
 private:\r
        gl::BindingPointer<Texture2D> mTexture2D;\r
        GLint mLevel;\r
@@ -104,10 +111,14 @@ public:
        virtual GLsizei getHeight() const;\r
        virtual GLsizei getDepth() const;\r
        virtual GLint getLayer() const { return mLayer; }\r
+       virtual GLint getLevel() const { return mLevel; }\r
        virtual GLenum getFormat() const;\r
        virtual sw::Format getInternalFormat() const;\r
        virtual GLsizei getSamples() const;\r
 \r
+       virtual void setLayer(GLint layer) { mLayer = layer; }\r
+       virtual void setLevel(GLint level) { mLevel = level; }\r
+\r
 private:\r
        gl::BindingPointer<Texture3D> mTexture3D;\r
        GLint mLevel;\r
@@ -130,10 +141,13 @@ public:
 \r
        virtual GLsizei getWidth() const;\r
        virtual GLsizei getHeight() const;\r
+       virtual GLint getLevel() const { return mLevel; }\r
        virtual GLenum getFormat() const;\r
        virtual sw::Format getInternalFormat() const;\r
        virtual GLsizei getSamples() const;\r
 \r
+       virtual void setLevel(GLint level) { mLevel = level; }\r
+\r
 private:\r
        gl::BindingPointer<TextureCubeMap> mTextureCubeMap;\r
        GLenum mTarget;\r
@@ -193,6 +207,7 @@ public:
        GLsizei getHeight() const;\r
        GLsizei getDepth() const;\r
        GLint getLayer() const;\r
+       GLint getLevel() const;\r
        GLenum getFormat() const;\r
        sw::Format getInternalFormat() const;\r
        GLuint getRedSize() const;\r
@@ -203,6 +218,8 @@ public:
        GLuint getStencilSize() const;\r
        GLsizei getSamples() const;\r
 \r
+       void setLayer(GLint layer);\r
+       void setLevel(GLint level);\r
        void setStorage(RenderbufferStorage *newStorage);\r
 \r
 private:\r
index 7df6764..8bbbed5 100644 (file)
@@ -941,6 +941,10 @@ Renderbuffer *Texture2D::getRenderbuffer(GLenum target, GLint level, GLint layer
     {\r
         mColorbufferProxy = new Renderbuffer(name, new RenderbufferTexture2D(this, level));\r
     }\r
+       else\r
+       {\r
+               mColorbufferProxy->setLevel(level);\r
+       }\r
 \r
     return mColorbufferProxy;\r
 }\r
@@ -1424,6 +1428,10 @@ Renderbuffer *TextureCubeMap::getRenderbuffer(GLenum target, GLint level, GLint
     {\r
         mFaceProxies[face] = new Renderbuffer(name, new RenderbufferTextureCubeMap(this, target, level));\r
     }\r
+       else\r
+       {\r
+               mFaceProxies[face]->setLevel(level);\r
+       }\r
 \r
     return mFaceProxies[face];\r
 }\r
@@ -1903,6 +1911,11 @@ Renderbuffer *Texture3D::getRenderbuffer(GLenum target, GLint level, GLint layer
        {\r
                mColorbufferProxy = new Renderbuffer(name, new RenderbufferTexture3D(this, level, layer));\r
        }\r
+       else\r
+       {\r
+               mColorbufferProxy->setLevel(level);\r
+               mColorbufferProxy->setLayer(layer);\r
+       }\r
 \r
        return mColorbufferProxy;\r
 }\r
index 1eb5aa8..591a7d2 100644 (file)
@@ -3020,7 +3020,7 @@ void GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenu
                        case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL:\r
                                if(attachmentObjectType == GL_TEXTURE)\r
                                {\r
-                                       *params = 0; // FramebufferTexture2D will not allow level to be set to anything else in GL ES 2.0\r
+                                       *params = clientVersion < 3 ? 0 : renderbuffer->getLevel(); // FramebufferTexture2D will not allow level to be set to anything else in GL ES 2.0\r
                                }\r
                                else\r
                                {\r