2 // Copyright (c) 2013 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
6 // Helper structure describing a single vertex attribute
9 #ifndef LIBGLESV2_VERTEXATTRIBUTE_H_
10 #define LIBGLESV2_VERTEXATTRIBUTE_H_
12 #include "libGLESv2/Buffer.h"
17 struct VertexAttribute
19 bool enabled; // From glEnable/DisableVertexAttribArray
25 GLuint stride; // 0 means natural stride
29 const GLvoid *pointer;
32 BindingPointer<Buffer> buffer; // Captured when glVertexAttribPointer is called.
40 T QuerySingleVertexAttributeParameter(const VertexAttribute& attrib, GLenum pname)
44 case GL_VERTEX_ATTRIB_ARRAY_ENABLED:
45 return static_cast<T>(attrib.enabled ? GL_TRUE : GL_FALSE);
46 case GL_VERTEX_ATTRIB_ARRAY_SIZE:
47 return static_cast<T>(attrib.size);
48 case GL_VERTEX_ATTRIB_ARRAY_STRIDE:
49 return static_cast<T>(attrib.stride);
50 case GL_VERTEX_ATTRIB_ARRAY_TYPE:
51 return static_cast<T>(attrib.type);
52 case GL_VERTEX_ATTRIB_ARRAY_NORMALIZED:
53 return static_cast<T>(attrib.normalized ? GL_TRUE : GL_FALSE);
54 case GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING:
55 return static_cast<T>(attrib.buffer.id());
56 case GL_VERTEX_ATTRIB_ARRAY_DIVISOR:
57 return static_cast<T>(attrib.divisor);
58 case GL_VERTEX_ATTRIB_ARRAY_INTEGER:
59 return static_cast<T>(attrib.pureInteger ? GL_TRUE : GL_FALSE);
62 return static_cast<T>(0);
66 size_t ComputeVertexAttributeTypeSize(const VertexAttribute& attrib);
67 size_t ComputeVertexAttributeStride(const VertexAttribute& attrib);
69 struct VertexAttribCurrentValueData
73 GLfloat FloatValues[4];
75 GLuint UnsignedIntValues[4];
79 void setFloatValues(const GLfloat floatValues[4])
81 for (unsigned int valueIndex = 0; valueIndex < 4; valueIndex++)
83 FloatValues[valueIndex] = floatValues[valueIndex];
88 void setIntValues(const GLint intValues[4])
90 for (unsigned int valueIndex = 0; valueIndex < 4; valueIndex++)
92 IntValues[valueIndex] = intValues[valueIndex];
97 void setUnsignedIntValues(const GLuint unsignedIntValues[4])
99 for (unsigned int valueIndex = 0; valueIndex < 4; valueIndex++)
101 UnsignedIntValues[valueIndex] = unsignedIntValues[valueIndex];
103 Type = GL_UNSIGNED_INT;
106 bool operator==(const VertexAttribCurrentValueData &other)
108 return (Type == other.Type && memcmp(FloatValues, other.FloatValues, sizeof(float) * 4) == 0);
111 bool operator!=(const VertexAttribCurrentValueData &other)
113 return !(*this == other);
119 #endif // LIBGLESV2_VERTEXATTRIBUTE_H_