Added support for GL_INT and GL_UNSIGNED_INT vertex attributes.

TRAC #22693

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

git-svn-id: https://angleproject.googlecode.com/svn/branches/es3proto@2119 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/libGLESv2.cpp b/src/libGLESv2/libGLESv2.cpp
index 23d543b..156562e 100644
--- a/src/libGLESv2/libGLESv2.cpp
+++ b/src/libGLESv2/libGLESv2.cpp
@@ -6561,7 +6561,7 @@
         if (context)
         {
             GLfloat vals[4] = { x, 0, 0, 1 };
-            context->setVertexAttrib(index, vals);
+            context->setVertexAttribf(index, vals);
         }
     }
     catch(std::bad_alloc&)
@@ -6586,7 +6586,7 @@
         if (context)
         {
             GLfloat vals[4] = { values[0], 0, 0, 1 };
-            context->setVertexAttrib(index, vals);
+            context->setVertexAttribf(index, vals);
         }
     }
     catch(std::bad_alloc&)
@@ -6611,7 +6611,7 @@
         if (context)
         {
             GLfloat vals[4] = { x, y, 0, 1 };
-            context->setVertexAttrib(index, vals);
+            context->setVertexAttribf(index, vals);
         }
     }
     catch(std::bad_alloc&)
@@ -6636,7 +6636,7 @@
         if (context)
         {
             GLfloat vals[4] = { values[0], values[1], 0, 1 };
-            context->setVertexAttrib(index, vals);
+            context->setVertexAttribf(index, vals);
         }
     }
     catch(std::bad_alloc&)
@@ -6661,7 +6661,7 @@
         if (context)
         {
             GLfloat vals[4] = { x, y, z, 1 };
-            context->setVertexAttrib(index, vals);
+            context->setVertexAttribf(index, vals);
         }
     }
     catch(std::bad_alloc&)
@@ -6686,7 +6686,7 @@
         if (context)
         {
             GLfloat vals[4] = { values[0], values[1], values[2], 1 };
-            context->setVertexAttrib(index, vals);
+            context->setVertexAttribf(index, vals);
         }
     }
     catch(std::bad_alloc&)
@@ -6711,7 +6711,7 @@
         if (context)
         {
             GLfloat vals[4] = { x, y, z, w };
-            context->setVertexAttrib(index, vals);
+            context->setVertexAttribf(index, vals);
         }
     }
     catch(std::bad_alloc&)
@@ -6735,7 +6735,7 @@
 
         if (context)
         {
-            context->setVertexAttrib(index, values);
+            context->setVertexAttribf(index, values);
         }
     }
     catch(std::bad_alloc&)
@@ -6797,8 +6797,9 @@
           case GL_FIXED:
           case GL_FLOAT:
             break;
-
           case GL_HALF_FLOAT:
+          case GL_INT:
+          case GL_UNSIGNED_INT:
             if (context && context->getClientVersion() < 3)
             {
                 return gl::error(GL_INVALID_ENUM);
@@ -6807,7 +6808,6 @@
             {
                 break;
             }
-
           default:
             return gl::error(GL_INVALID_ENUM);
         }
@@ -7931,7 +7931,39 @@
             }
         }
 
-        UNIMPLEMENTED();
+        if (index >= gl::MAX_VERTEX_ATTRIBS)
+        {
+            return gl::error(GL_INVALID_VALUE);
+        }
+
+        if (size < 1 || size > 4)
+        {
+            return gl::error(GL_INVALID_VALUE);
+        }
+
+        switch (type)
+        {
+          case GL_BYTE:
+          case GL_UNSIGNED_BYTE:
+          case GL_SHORT:
+          case GL_UNSIGNED_SHORT:
+          case GL_INT:
+          case GL_UNSIGNED_INT:
+            break;
+          default:
+            return gl::error(GL_INVALID_ENUM);
+        }
+
+        if (stride < 0)
+        {
+            return gl::error(GL_INVALID_VALUE);
+        }
+
+        if (context)
+        {
+            context->setVertexAttribState(index, context->getArrayBuffer(), size, type, false, true,
+                                          stride, pointer);
+        }
     }
     catch(std::bad_alloc&)
     {
@@ -8004,9 +8036,15 @@
             {
                 return gl::error(GL_INVALID_OPERATION);
             }
-        }
 
-        UNIMPLEMENTED();
+            if (index >= gl::MAX_VERTEX_ATTRIBS)
+            {
+                return gl::error(GL_INVALID_VALUE);
+            }
+
+            GLint vals[4] = { x, y, z, w };
+            context->setVertexAttribi(index, vals);
+        }
     }
     catch(std::bad_alloc&)
     {
@@ -8029,9 +8067,15 @@
             {
                 return gl::error(GL_INVALID_OPERATION);
             }
-        }
 
-        UNIMPLEMENTED();
+            if (index >= gl::MAX_VERTEX_ATTRIBS)
+            {
+                return gl::error(GL_INVALID_VALUE);
+            }
+
+            GLuint vals[4] = { x, y, z, w };
+            context->setVertexAttribu(index, vals);
+        }
     }
     catch(std::bad_alloc&)
     {
@@ -8053,9 +8097,14 @@
             {
                 return gl::error(GL_INVALID_OPERATION);
             }
-        }
 
-        UNIMPLEMENTED();
+            if (index >= gl::MAX_VERTEX_ATTRIBS)
+            {
+                return gl::error(GL_INVALID_VALUE);
+            }
+
+            context->setVertexAttribi(index, v);
+        }
     }
     catch(std::bad_alloc&)
     {
@@ -8077,9 +8126,14 @@
             {
                 return gl::error(GL_INVALID_OPERATION);
             }
-        }
 
-        UNIMPLEMENTED();
+            if (index >= gl::MAX_VERTEX_ATTRIBS)
+            {
+                return gl::error(GL_INVALID_VALUE);
+            }
+
+            context->setVertexAttribu(index, v);
+        }
     }
     catch(std::bad_alloc&)
     {