| // | |
| // Copyright 2014 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. | |
| // | |
| // Implementation of the state class for mananging GLES 3 Vertex Array Objects. | |
| // | |
| #include "libANGLE/VertexAttribute.h" | |
| namespace gl | |
| { | |
| VertexAttribute::VertexAttribute() | |
| : enabled(false), | |
| type(GL_FLOAT), | |
| size(4), | |
| normalized(false), | |
| pureInteger(false), | |
| stride(0), | |
| pointer(NULL), | |
| divisor(0) | |
| { | |
| } | |
| bool operator==(const VertexAttribute &a, const VertexAttribute &b) | |
| { | |
| return a.enabled == b.enabled && | |
| a.type == b.type && | |
| a.size == b.size && | |
| a.normalized == b.normalized && | |
| a.pureInteger == b.pureInteger && | |
| a.stride == b.stride && | |
| a.pointer == b.pointer && | |
| a.buffer.get() == b.buffer.get() && | |
| a.divisor == b.divisor; | |
| } | |
| bool operator!=(const VertexAttribute &a, const VertexAttribute &b) | |
| { | |
| return !(a == b); | |
| } | |
| size_t ComputeVertexAttributeTypeSize(const VertexAttribute& attrib) | |
| { | |
| GLuint size = attrib.size; | |
| switch (attrib.type) | |
| { | |
| case GL_BYTE: return size * sizeof(GLbyte); | |
| case GL_UNSIGNED_BYTE: return size * sizeof(GLubyte); | |
| case GL_SHORT: return size * sizeof(GLshort); | |
| case GL_UNSIGNED_SHORT: return size * sizeof(GLushort); | |
| case GL_INT: return size * sizeof(GLint); | |
| case GL_UNSIGNED_INT: return size * sizeof(GLuint); | |
| case GL_INT_2_10_10_10_REV: return 4; | |
| case GL_UNSIGNED_INT_2_10_10_10_REV: return 4; | |
| case GL_FIXED: return size * sizeof(GLfixed); | |
| case GL_HALF_FLOAT: return size * sizeof(GLhalf); | |
| case GL_FLOAT: return size * sizeof(GLfloat); | |
| default: UNREACHABLE(); return size * sizeof(GLfloat); | |
| } | |
| } | |
| size_t ComputeVertexAttributeStride(const VertexAttribute& attrib) | |
| { | |
| if (!attrib.enabled) | |
| { | |
| return 16; | |
| } | |
| return attrib.stride ? attrib.stride : ComputeVertexAttributeTypeSize(attrib); | |
| } | |
| } |