Added methods to Context to get and set the current (non-indexed) bound uniform and transform feedback buffers.

TRAC #22811

Signed-off-by: Jamie Madill
Signed-off-by: Shannon Woods
Author: Geoff Lang

git-svn-id: https://angleproject.googlecode.com/svn/branches/es3proto@2129 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/libGLESv2.cpp b/src/libGLESv2/libGLESv2.cpp
index 8eb8e91..1baba69 100644
--- a/src/libGLESv2/libGLESv2.cpp
+++ b/src/libGLESv2/libGLESv2.cpp
@@ -417,6 +417,17 @@
 
         if (context)
         {
+            // Check ES3 specific targets
+            switch (target)
+            {
+              case GL_UNIFORM_BUFFER:
+              case GL_TRANSFORM_FEEDBACK_BUFFER:
+                if (context->getClientVersion() < 3)
+                {
+                    return gl::error(GL_INVALID_ENUM);
+                }
+            }
+
             switch (target)
             {
               case GL_ARRAY_BUFFER:
@@ -425,6 +436,12 @@
               case GL_ELEMENT_ARRAY_BUFFER:
                 context->bindElementArrayBuffer(buffer);
                 return;
+              case GL_UNIFORM_BUFFER:
+                context->bindGenericUniformBuffer(buffer);
+                return;
+              case GL_TRANSFORM_FEEDBACK_BUFFER:
+                context->bindGenericUniformBuffer(buffer);
+                return;
               default:
                 return gl::error(GL_INVALID_ENUM);
             }
@@ -772,6 +789,17 @@
 
         if (context)
         {
+            // Check ES3 specific targets
+            switch (target)
+            {
+              case GL_UNIFORM_BUFFER:
+              case GL_TRANSFORM_FEEDBACK_BUFFER:
+                if (context->getClientVersion() < 3)
+                {
+                    return gl::error(GL_INVALID_ENUM);
+                }
+            }
+
             gl::Buffer *buffer;
 
             switch (target)
@@ -782,6 +810,12 @@
               case GL_ELEMENT_ARRAY_BUFFER:
                 buffer = context->getElementArrayBuffer();
                 break;
+              case GL_TRANSFORM_FEEDBACK_BUFFER:
+                buffer = context->getGenericTransformFeedbackBuffer();
+                break;
+              case GL_UNIFORM_BUFFER:
+                buffer = context->getGenericUniformBuffer();
+                break;
               default:
                 return gl::error(GL_INVALID_ENUM);
             }
@@ -821,6 +855,17 @@
 
         if (context)
         {
+            // Check ES3 specific targets
+            switch (target)
+            {
+              case GL_UNIFORM_BUFFER:
+              case GL_TRANSFORM_FEEDBACK_BUFFER:
+                if (context->getClientVersion() < 3)
+                {
+                    return gl::error(GL_INVALID_ENUM);
+                }
+            }
+
             gl::Buffer *buffer;
 
             switch (target)
@@ -831,6 +876,12 @@
               case GL_ELEMENT_ARRAY_BUFFER:
                 buffer = context->getElementArrayBuffer();
                 break;
+              case GL_TRANSFORM_FEEDBACK_BUFFER:
+                buffer = context->getGenericTransformFeedbackBuffer();
+                break;
+              case GL_UNIFORM_BUFFER:
+                buffer = context->getGenericUniformBuffer();
+                break;
               default:
                 return gl::error(GL_INVALID_ENUM);
             }
@@ -7804,11 +7855,13 @@
             switch (target)
             {
               case GL_TRANSFORM_FEEDBACK_BUFFER:
-                context->bindTransformFeedbackBuffer(buffer, index, offset, size);
+                context->bindIndexedTransformFeedbackBuffer(buffer, index, offset, size);
+                context->bindGenericTransformFeedbackBuffer(buffer);
                 break;
 
               case GL_UNIFORM_BUFFER:
-                context->bindUniformBuffer(buffer, index, offset, size);
+                context->bindIndexedUniformBuffer(buffer, index, offset, size);
+                context->bindGenericUniformBuffer(buffer);
                 break;
 
               default:
@@ -7868,11 +7921,13 @@
             switch (target)
             {
               case GL_TRANSFORM_FEEDBACK_BUFFER:
-                context->bindTransformFeedbackBuffer(buffer, index, 0, -1);
+                context->bindIndexedTransformFeedbackBuffer(buffer, index, 0, -1);
+                context->bindGenericTransformFeedbackBuffer(buffer);
                 break;
 
               case GL_UNIFORM_BUFFER:
-                context->bindUniformBuffer(buffer, index, 0, -1);
+                context->bindIndexedUniformBuffer(buffer, index, 0, -1);
+                context->bindGenericUniformBuffer(buffer);
                 break;
 
               default: