OSDN Git Service

Adding support for GL_DEPTH_STENCIL_ATTACHMENT
authorAlexis Hetu <sugoi@google.com>
Tue, 23 Jun 2015 15:18:17 +0000 (11:18 -0400)
committerAlexis Hétu <sugoi@google.com>
Thu, 25 Jun 2015 17:22:21 +0000 (17:22 +0000)
ES3 supports set/get for both stencil and depth
attachments simultaneously though
GL_DEPTH_STENCIL_ATTACHMENT, so support for it
was added in FramebufferRenderbuffer and
GetFramebufferAttachmentParameteriv.

Change-Id: I09b077de1f31899a20baacbd651c65dfa9e7fc5d
Reviewed-on: https://swiftshader-review.googlesource.com/3546
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
src/OpenGL/libGLESv2/libGLESv2.cpp

index 421fdd4..7cc8418 100644 (file)
@@ -2231,6 +2231,14 @@ void FramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuff
                case GL_STENCIL_ATTACHMENT:\r
                        framebuffer->setStencilbuffer(GL_RENDERBUFFER, renderbuffer);\r
                        break;\r
+               case GL_DEPTH_STENCIL_ATTACHMENT:\r
+                       if(clientVersion >= 3)\r
+                       {\r
+                               framebuffer->setDepthbuffer(GL_RENDERBUFFER, renderbuffer);\r
+                               framebuffer->setStencilbuffer(GL_RENDERBUFFER, renderbuffer);\r
+                               break;\r
+                       }\r
+                       else return error(GL_INVALID_ENUM);\r
                default:\r
                        return error(GL_INVALID_ENUM);\r
                }\r
@@ -2981,6 +2989,18 @@ void GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenu
                        attachmentType = framebuffer->getStencilbufferType();\r
                        attachmentHandle = framebuffer->getStencilbufferName();\r
                        break;\r
+               case GL_DEPTH_STENCIL_ATTACHMENT:\r
+                       if(clientVersion >= 3)\r
+                       {\r
+                               attachmentType = framebuffer->getDepthbufferType();\r
+                               attachmentHandle = framebuffer->getDepthbufferName();\r
+                               if(attachmentHandle != framebuffer->getStencilbufferName())\r
+                               {\r
+                                       // Different attachments to DEPTH and STENCIL, query fails\r
+                                       return error(GL_INVALID_OPERATION);\r
+                               }\r
+                       }\r
+                       else return error(GL_INVALID_ENUM);\r
                default:\r
                        return error(GL_INVALID_ENUM);\r
                }\r