Hash :
df682a8e
Author :
Date :
2017-03-31T15:13:21
ES31: Refactor syncState in VertexArrayGL This patch intends to solve several design issues by refactoring the process of syncState in VertexArrayGL before implementing ES3.1 feature Vertex Attrib Binding on the OpenGL back-end. 1. Use nullptr as the flag of using client memory pointer 2. Simplify comparisons in updateAttribPointer. 3. Put all code related to mFunctions->vertexAttrib*Pointer() into an individual function 4. Remove redundant mStateManager->bindVertexArray() in all update* functioins and only call it once in syncState(). BUG=angleproject:1593 Change-Id: I8f68534bb9291a601b9b77954d7281e5171c2b55 Reviewed-on: https://chromium-review.googlesource.com/465378 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@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
//
// Copyright (c) 2015 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.
//
// VertexAttribute.inl: Inline vertex attribute methods
//
namespace gl
{
inline VertexAttribCurrentValueData::VertexAttribCurrentValueData()
: Type(GL_FLOAT)
{
FloatValues[0] = 0.0f;
FloatValues[1] = 0.0f;
FloatValues[2] = 0.0f;
FloatValues[3] = 1.0f;
}
inline void VertexAttribCurrentValueData::setFloatValues(const GLfloat floatValues[4])
{
for (unsigned int valueIndex = 0; valueIndex < 4; valueIndex++)
{
FloatValues[valueIndex] = floatValues[valueIndex];
}
Type = GL_FLOAT;
}
inline void VertexAttribCurrentValueData::setIntValues(const GLint intValues[4])
{
for (unsigned int valueIndex = 0; valueIndex < 4; valueIndex++)
{
IntValues[valueIndex] = intValues[valueIndex];
}
Type = GL_INT;
}
inline void VertexAttribCurrentValueData::setUnsignedIntValues(const GLuint unsignedIntValues[4])
{
for (unsigned int valueIndex = 0; valueIndex < 4; valueIndex++)
{
UnsignedIntValues[valueIndex] = unsignedIntValues[valueIndex];
}
Type = GL_UNSIGNED_INT;
}
inline bool operator==(const VertexAttribCurrentValueData &a, const VertexAttribCurrentValueData &b)
{
return (a.Type == b.Type && memcmp(a.FloatValues, b.FloatValues, sizeof(float) * 4) == 0);
}
inline bool operator!=(const VertexAttribCurrentValueData &a, const VertexAttribCurrentValueData &b)
{
return !(a == b);
}
} // namespace gl