// // Copyright (c) 2013 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // Helper structure describing a single vertex attribute // #ifndef LIBANGLE_VERTEXATTRIBUTE_H_ #define LIBANGLE_VERTEXATTRIBUTE_H_ #include "libANGLE/Buffer.h" namespace gl { struct VertexAttribute { bool enabled; // From glEnable/DisableVertexAttribArray GLenum type; GLuint size; bool normalized; bool pureInteger; GLuint stride; // 0 means natural stride union { const GLvoid *pointer; GLintptr offset; }; BindingPointer buffer; // Captured when glVertexAttribPointer is called. GLuint divisor; VertexAttribute(); }; bool operator==(const VertexAttribute &a, const VertexAttribute &b); bool operator!=(const VertexAttribute &a, const VertexAttribute &b); template T QuerySingleVertexAttributeParameter(const VertexAttribute& attrib, GLenum pname); size_t ComputeVertexAttributeTypeSize(const VertexAttribute& attrib); size_t ComputeVertexAttributeStride(const VertexAttribute& attrib); size_t ComputeVertexAttributeElementCount(const VertexAttribute &attrib, size_t drawCount, size_t instanceCount); struct VertexAttribCurrentValueData { union { GLfloat FloatValues[4]; GLint IntValues[4]; GLuint UnsignedIntValues[4]; }; GLenum Type; VertexAttribCurrentValueData(); void setFloatValues(const GLfloat floatValues[4]); void setIntValues(const GLint intValues[4]); void setUnsignedIntValues(const GLuint unsignedIntValues[4]); }; bool operator==(const VertexAttribCurrentValueData &a, const VertexAttribCurrentValueData &b); bool operator!=(const VertexAttribCurrentValueData &a, const VertexAttribCurrentValueData &b); } #include "VertexAttribute.inl" #endif // LIBANGLE_VERTEXATTRIBUTE_H_