1// 2// Copyright 2014 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. 5// 6// Implementation of the state class for mananging GLES 3 Vertex Array Objects. 7// 8 9#include "libGLESv2/VertexAttribute.h" 10 11namespace gl 12{ 13 14VertexAttribute::VertexAttribute() 15 : enabled(false), 16 type(GL_FLOAT), 17 size(4), 18 normalized(false), 19 pureInteger(false), 20 stride(0), 21 pointer(NULL), 22 divisor(0) 23{ 24} 25 26size_t ComputeVertexAttributeTypeSize(const VertexAttribute& attrib) 27{ 28 GLuint size = attrib.size; 29 switch (attrib.type) 30 { 31 case GL_BYTE: return size * sizeof(GLbyte); 32 case GL_UNSIGNED_BYTE: return size * sizeof(GLubyte); 33 case GL_SHORT: return size * sizeof(GLshort); 34 case GL_UNSIGNED_SHORT: return size * sizeof(GLushort); 35 case GL_INT: return size * sizeof(GLint); 36 case GL_UNSIGNED_INT: return size * sizeof(GLuint); 37 case GL_INT_2_10_10_10_REV: return 4; 38 case GL_UNSIGNED_INT_2_10_10_10_REV: return 4; 39 case GL_FIXED: return size * sizeof(GLfixed); 40 case GL_HALF_FLOAT: return size * sizeof(GLhalf); 41 case GL_FLOAT: return size * sizeof(GLfloat); 42 default: UNREACHABLE(); return size * sizeof(GLfloat); 43 } 44} 45 46size_t ComputeVertexAttributeStride(const VertexAttribute& attrib) 47{ 48 if (!attrib.enabled) 49 { 50 return 16; 51 } 52 return attrib.stride ? attrib.stride : ComputeVertexAttributeTypeSize(attrib); 53} 54 55}