| Index: gpu/command_buffer/client/vertex_array_object_manager.cc
|
| diff --git a/gpu/command_buffer/client/vertex_array_object_manager.cc b/gpu/command_buffer/client/vertex_array_object_manager.cc
|
| index 8b0385d7cbb430346a78213e9660870bfd9b0712..415abe610cef1750cf53318d222474f89519f03c 100644
|
| --- a/gpu/command_buffer/client/vertex_array_object_manager.cc
|
| +++ b/gpu/command_buffer/client/vertex_array_object_manager.cc
|
| @@ -47,7 +47,8 @@ class GLES2_IMPL_EXPORT VertexArrayObject {
|
| normalized_(GL_FALSE),
|
| pointer_(NULL),
|
| gl_stride_(0),
|
| - divisor_(0) {
|
| + divisor_(0),
|
| + integer_(GL_FALSE) {
|
| }
|
|
|
| bool enabled() const {
|
| @@ -94,19 +95,25 @@ class GLES2_IMPL_EXPORT VertexArrayObject {
|
| return divisor_;
|
| }
|
|
|
| + GLboolean integer() const {
|
| + return integer_;
|
| + }
|
| +
|
| void SetInfo(
|
| GLuint buffer_id,
|
| GLint size,
|
| GLenum type,
|
| GLboolean normalized,
|
| GLsizei gl_stride,
|
| - const GLvoid* pointer) {
|
| + const GLvoid* pointer,
|
| + GLboolean integer) {
|
| buffer_id_ = buffer_id;
|
| size_ = size;
|
| type_ = type;
|
| normalized_ = normalized;
|
| gl_stride_ = gl_stride;
|
| pointer_ = pointer;
|
| + integer_ = integer;
|
| }
|
|
|
| void SetDivisor(GLuint divisor) {
|
| @@ -138,6 +145,8 @@ class GLES2_IMPL_EXPORT VertexArrayObject {
|
|
|
| // Divisor, for geometry instancing.
|
| GLuint divisor_;
|
| +
|
| + GLboolean integer_;
|
| };
|
|
|
| typedef std::vector<VertexAttrib> VertexAttribs;
|
| @@ -155,7 +164,7 @@ class GLES2_IMPL_EXPORT VertexArrayObject {
|
| void SetAttribPointer(
|
| GLuint buffer_id,
|
| GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride,
|
| - const void* ptr);
|
| + const void* ptr, GLboolean integer);
|
|
|
| bool GetVertexAttrib(
|
| GLuint index, GLenum pname, uint32* param) const;
|
| @@ -240,7 +249,8 @@ void VertexArrayObject::SetAttribPointer(
|
| GLenum type,
|
| GLboolean normalized,
|
| GLsizei stride,
|
| - const void* ptr) {
|
| + const void* ptr,
|
| + GLboolean integer) {
|
| if (index < vertex_attribs_.size()) {
|
| VertexAttrib& attrib = vertex_attribs_[index];
|
| if (attrib.IsClientSide() && attrib.enabled()) {
|
| @@ -248,7 +258,7 @@ void VertexArrayObject::SetAttribPointer(
|
| DCHECK_GE(num_client_side_pointers_enabled_, 0);
|
| }
|
|
|
| - attrib.SetInfo(buffer_id, size, type, normalized, stride, ptr);
|
| + attrib.SetInfo(buffer_id, size, type, normalized, stride, ptr, integer);
|
|
|
| if (attrib.IsClientSide() && attrib.enabled()) {
|
| ++num_client_side_pointers_enabled_;
|
| @@ -283,8 +293,8 @@ bool VertexArrayObject::GetVertexAttrib(
|
| *param = attrib->normalized();
|
| break;
|
| case GL_VERTEX_ATTRIB_ARRAY_INTEGER:
|
| - // TODO(zmo): cache this on the client side.
|
| - return false;
|
| + *param = attrib->integer();
|
| + break;
|
| default:
|
| return false; // pass through to service side.
|
| }
|
| @@ -431,13 +441,14 @@ bool VertexArrayObjectManager::SetAttribPointer(
|
| GLenum type,
|
| GLboolean normalized,
|
| GLsizei stride,
|
| - const void* ptr) {
|
| + const void* ptr,
|
| + GLboolean integer) {
|
| // Client side arrays are not allowed in vaos.
|
| if (buffer_id == 0 && !IsDefaultVAOBound()) {
|
| return false;
|
| }
|
| bound_vertex_array_object_->SetAttribPointer(
|
| - buffer_id, index, size, type, normalized, stride, ptr);
|
| + buffer_id, index, size, type, normalized, stride, ptr, integer);
|
| return true;
|
| }
|
|
|
|
|