Hash :
6ae6efca
Author :
Date :
2015-03-09T14:42:35
Only sync the VAO state just before the draw call. BUG=angleproject:880 Change-Id: Ifd59c0f67aeab0e4700b3dca57c1b75e3fae48b8 Reviewed-on: https://chromium-review.googlesource.com/257671 Reviewed-by: Jamie Madill <jmadill@chromium.org> Tested-by: Geoff Lang <geofflang@chromium.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
//
// 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);
}
}