diff options
Diffstat (limited to 'src/3rdparty/angle/src/libANGLE/params.cpp')
-rw-r--r-- | src/3rdparty/angle/src/libANGLE/params.cpp | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/3rdparty/angle/src/libANGLE/params.cpp b/src/3rdparty/angle/src/libANGLE/params.cpp new file mode 100644 index 0000000000..a89d87e0a9 --- /dev/null +++ b/src/3rdparty/angle/src/libANGLE/params.cpp @@ -0,0 +1,68 @@ +// +// Copyright 2017 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. +// +// params: +// Parameter wrapper structs for OpenGL ES. These helpers cache re-used values +// in entry point routines. + +#include "libANGLE/params.h" + +#include "common/utilities.h" +#include "libANGLE/Context.h" +#include "libANGLE/VertexArray.h" + +namespace gl +{ + +// static +constexpr ParamTypeInfo ParamsBase::TypeInfo; +constexpr ParamTypeInfo HasIndexRange::TypeInfo; + +HasIndexRange::HasIndexRange() + : ParamsBase(nullptr), mContext(nullptr), mCount(0), mType(GL_NONE), mIndices(nullptr) +{ +} + +HasIndexRange::HasIndexRange(Context *context, GLsizei count, GLenum type, const void *indices) + : ParamsBase(context), mContext(context), mCount(count), mType(type), mIndices(indices) +{ +} + +const Optional<IndexRange> &HasIndexRange::getIndexRange() const +{ + if (mIndexRange.valid() || !mContext) + { + return mIndexRange; + } + + const State &state = mContext->getGLState(); + + const gl::VertexArray *vao = state.getVertexArray(); + gl::Buffer *elementArrayBuffer = vao->getElementArrayBuffer().get(); + + if (elementArrayBuffer) + { + uintptr_t offset = reinterpret_cast<uintptr_t>(mIndices); + IndexRange indexRange; + Error error = + elementArrayBuffer->getIndexRange(mContext, mType, static_cast<size_t>(offset), mCount, + state.isPrimitiveRestartEnabled(), &indexRange); + if (error.isError()) + { + mContext->handleError(error); + return mIndexRange; + } + + mIndexRange = indexRange; + } + else + { + mIndexRange = ComputeIndexRange(mType, mIndices, mCount, state.isPrimitiveRestartEnabled()); + } + + return mIndexRange; +} + +} // namespace gl |