diff options
author | Andrew Knight <andrew.knight@digia.com> | 2014-08-05 12:59:44 +0300 |
---|---|---|
committer | Andrew Knight <andrew.knight@digia.com> | 2014-08-05 16:43:22 +0200 |
commit | a6a12d8c0fc918972c15268f749ecc7c90b95d6c (patch) | |
tree | cb6d986d30ef97e932ab51768854d5d9b46729d3 /src/3rdparty/angle/src/libGLESv2/BinaryStream.h | |
parent | 14f9c09542bd6cc19430473da9ce4c68f239ec7d (diff) |
ANGLE: upgrade to 2.1~07d49ef5350a
This version of ANGLE provides partial ES3 support, numerous
bug fixes, and several potentially useful vendor extensions.
All patches have been rebased. The following changes are noted:
0000-General-fixes-for-ANGLE-2.1.patch
contains compile fixes for the new ANGLE
0004-Make-it-possible-to-link-ANGLE-statically-for-single.patch
has incorporated patch 0015.
0007-Make-DX9-DX11-mutually-exclusive.patch
has been removed as it was fixed upstream.
0007-Fix-ANGLE-build-with-Microsoft-Visual-Studio-14-CTP.patch
has been moved up to fill the patch number gap.
0010-ANGLE-Enable-D3D11-for-feature-level-9-cards.patch
now contains patch 0014 and 0017.
0013-ANGLE-Allow-for-universal-program-binaries.patch
has been removed as it is no longer relevant.
0014-ANGLE-D3D11-Fix-internal-index-buffer-for-level-9-ha.patch
has been merged with patch 0010.
0015-ANGLE-Don-t-export-DLLMain-functions-for-static-buil.patch
has been merged with patch 0004.
0016-ANGLE-WinRT-Call-Trim-when-application-suspends.patch
has been removed and will be replaced by a follow-up patch using a
different technique.
0017-ANGLE-D3D11-Don-t-use-mipmaps-in-level-9-textures.patch
has been merged with patch 0010.
0018-ANGLE-WinRT-Create-swap-chain-using-physical-resolut.patch
has been removed and will be replaced by a follow-up patch extending
the EGL_ANGLE_window_fixed_size extension.
0019-Fix-ANGLE-build-with-Microsoft-Visual-Studio-14-CTP.patch
is now patch 0007.
[ChangeLog][Third-party libraries] ANGLE has been upgraded to
version 2.1, bringing partial support for OpenGL ES3 over
Direct3D 11, numerous bug fixes, and several new vendor extensions.
Change-Id: I6d95ce1480462d67228d83c1e5c74a1706b5b21c
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Diffstat (limited to 'src/3rdparty/angle/src/libGLESv2/BinaryStream.h')
-rw-r--r-- | src/3rdparty/angle/src/libGLESv2/BinaryStream.h | 118 |
1 files changed, 76 insertions, 42 deletions
diff --git a/src/3rdparty/angle/src/libGLESv2/BinaryStream.h b/src/3rdparty/angle/src/libGLESv2/BinaryStream.h index 21c2f86ce8..1cbfc6751d 100644 --- a/src/3rdparty/angle/src/libGLESv2/BinaryStream.h +++ b/src/3rdparty/angle/src/libGLESv2/BinaryStream.h @@ -10,6 +10,7 @@ #define LIBGLESV2_BINARYSTREAM_H_ #include "common/angleutils.h" +#include "common/mathutil.h" namespace gl { @@ -25,42 +26,49 @@ class BinaryInputStream mLength = length; } - template <typename T> - void read(T *v, size_t num) + // readInt will generate an error for bool types + template <class IntT> + IntT readInt() { - union - { - T dummy; // Compilation error for non-trivial types - } dummy; - (void) dummy; + int value; + read(&value); + return static_cast<IntT>(value); + } - if (mError) - { - return; - } + template <class IntT> + void readInt(IntT *outValue) + { + *outValue = readInt<IntT>(); + } - size_t length = num * sizeof(T); + bool readBool() + { + int value; + read(&value); + return (value > 0); + } - if (mOffset + length > mLength) - { - mError = true; - return; - } + void readBool(bool *outValue) + { + *outValue = readBool(); + } - memcpy(v, mData + mOffset, length); - mOffset += length; + void readBytes(unsigned char outArray[], size_t count) + { + read<unsigned char>(outArray, count); } - template <typename T> - void read(T * v) + std::string readString() { - read(v, 1); + std::string outString; + readString(&outString); + return outString; } - void read(std::string *v) + void readString(std::string *v) { size_t length; - read(&length); + readInt(&length); if (mError) { @@ -109,6 +117,30 @@ class BinaryInputStream size_t mOffset; const char *mData; size_t mLength; + + template <typename T> + void read(T *v, size_t num) + { + META_ASSERT(std::is_fundamental<T>::value); + + size_t length = num * sizeof(T); + + if (mOffset + length > mLength) + { + mError = true; + return; + } + + memcpy(v, mData + mOffset, length); + mOffset += length; + } + + template <typename T> + void read(T *v) + { + read(v, 1); + } + }; class BinaryOutputStream @@ -118,31 +150,24 @@ class BinaryOutputStream { } - template <typename T> - void write(const T *v, size_t num) + // writeInt also handles bool types + template <class IntT> + void writeInt(IntT param) { - union - { - T dummy; // Compilation error for non-trivial types - } dummy; - (void) dummy; - - const char *asBytes = reinterpret_cast<const char*>(v); - mData.insert(mData.end(), asBytes, asBytes + num * sizeof(T)); + ASSERT(rx::IsIntegerCastSafe<int>(param)); + int intValue = static_cast<int>(param); + write(&intValue, 1); } - template <typename T> - void write(const T &v) + void writeString(const std::string &v) { - write(&v, 1); + writeInt(v.length()); + write(v.c_str(), v.length()); } - void write(const std::string &v) + void writeBytes(const unsigned char *bytes, size_t count) { - size_t length = v.length(); - write(length); - - write(v.c_str(), length); + write(bytes, count); } size_t length() const @@ -158,6 +183,15 @@ class BinaryOutputStream private: DISALLOW_COPY_AND_ASSIGN(BinaryOutputStream); std::vector<char> mData; + + template <typename T> + void write(const T *v, size_t num) + { + META_ASSERT(std::is_fundamental<T>::value); + const char *asBytes = reinterpret_cast<const char*>(v); + mData.insert(mData.end(), asBytes, asBytes + num * sizeof(T)); + } + }; } |