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/common/debug.cpp | |
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/common/debug.cpp')
-rw-r--r-- | src/3rdparty/angle/src/common/debug.cpp | 53 |
1 files changed, 34 insertions, 19 deletions
diff --git a/src/3rdparty/angle/src/common/debug.cpp b/src/3rdparty/angle/src/common/debug.cpp index 05d3dc62ad..d6eecf7157 100644 --- a/src/3rdparty/angle/src/common/debug.cpp +++ b/src/3rdparty/angle/src/common/debug.cpp @@ -7,11 +7,12 @@ // debug.cpp: Debugging utilities. #include "common/debug.h" -#include <stdarg.h> +#include "common/platform.h" -#if defined(ANGLE_ENABLE_PERF) -#include <d3d9.h> -#endif +#include <stdarg.h> +#include <vector> +#include <fstream> +#include <cstdio> namespace gl { @@ -23,25 +24,38 @@ typedef void (*PerfOutputFunction)(unsigned int, const wchar_t*); static void output(bool traceFileDebugOnly, PerfOutputFunction perfFunc, const char *format, va_list vararg) { +#if defined(ANGLE_ENABLE_PERF) || defined(ANGLE_ENABLE_TRACE) + static std::vector<char> asciiMessageBuffer(512); + + // Attempt to just print to the current buffer + int len = vsnprintf(&asciiMessageBuffer[0], asciiMessageBuffer.size(), format, vararg); + if (len < 0 || static_cast<size_t>(len) >= asciiMessageBuffer.size()) + { + // Buffer was not large enough, calculate the required size and resize the buffer + len = vsnprintf(NULL, 0, format, vararg); + asciiMessageBuffer.resize(len + 1); + + // Print again + vsnprintf(&asciiMessageBuffer[0], asciiMessageBuffer.size(), format, vararg); + } + + // NULL terminate the buffer to be safe + asciiMessageBuffer[len] = '\0'; +#endif + #if defined(ANGLE_ENABLE_PERF) if (perfActive()) { - char message[32768]; - int len = vsprintf_s(message, format, vararg); - if (len < 0) + // The perf function only accepts wide strings, widen the ascii message + static std::wstring wideMessage; + if (wideMessage.capacity() < asciiMessageBuffer.size()) { - return; + wideMessage.reserve(asciiMessageBuffer.size()); } - // There are no ASCII variants of these D3DPERF functions. - wchar_t wideMessage[32768]; - for (int i = 0; i < len; ++i) - { - wideMessage[i] = message[i]; - } - wideMessage[len] = 0; + wideMessage.assign(asciiMessageBuffer.begin(), asciiMessageBuffer.begin() + len); - perfFunc(0, wideMessage); + perfFunc(0, wideMessage.c_str()); } #endif // ANGLE_ENABLE_PERF @@ -53,12 +67,13 @@ static void output(bool traceFileDebugOnly, PerfOutputFunction perfFunc, const c } #endif // NDEBUG - FILE* file = fopen(TRACE_OUTPUT_FILE, "a"); + static std::ofstream file(TRACE_OUTPUT_FILE, std::ofstream::app); if (file) { - vfprintf(file, format, vararg); - fclose(file); + file.write(&asciiMessageBuffer[0], len); + file.flush(); } + #endif // ANGLE_ENABLE_TRACE } |