Commit da5777cf by Geoff Lang

Create an Error object to represent GL errors.

BUG=angle:520 Change-Id: I1a54e6f308b5b0f310c725a7771af737a77ecd42 Reviewed-on: https://chromium-review.googlesource.com/209619Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Tested-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent ef9d63ec
......@@ -247,6 +247,7 @@
<ClCompile Include="..\..\src\common\debug.cpp"/>
<ClCompile Include="..\..\src\common\event_tracer.cpp"/>
<ClCompile Include="..\..\src\common\utilities.cpp"/>
<ClCompile Include="..\..\src\common\angleutils.cpp"/>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\..\src\libEGL\libEGL.rc"/>
......
......@@ -114,6 +114,9 @@
<ClInclude Include="..\..\src\common\angleutils.h">
<Filter>src\common</Filter>
</ClInclude>
<ClCompile Include="..\..\src\common\angleutils.cpp">
<Filter>src\common</Filter>
</ClCompile>
<ClInclude Include="..\..\include\angle_gl.h">
<Filter>include</Filter>
</ClInclude>
......
......@@ -228,6 +228,7 @@
<ClInclude Include="..\..\src\libGLESv2\validationES3.h"/>
<ClInclude Include="..\..\src\libGLESv2\Program.h"/>
<ClInclude Include="..\..\src\libGLESv2\HandleAllocator.h"/>
<ClInclude Include="..\..\src\libGLESv2\Error.h"/>
<ClInclude Include="..\..\src\libGLESv2\ResourceManager.h"/>
<ClInclude Include="..\..\src\libGLESv2\DynamicHLSL.h"/>
<ClInclude Include="..\..\src\libGLESv2\VertexAttribute.h"/>
......@@ -248,6 +249,7 @@
<ClInclude Include="..\..\src\libGLESv2\renderer\copyimage.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\BufferImpl.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\copyvertex.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\VertexArrayImpl.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\SwapChain.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\imageformats.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\QueryImpl.h"/>
......@@ -257,7 +259,6 @@
<ClInclude Include="..\..\src\libGLESv2\renderer\generatemip.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\RenderTarget.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\vertexconversion.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\VertexArrayImpl.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\IndexBuffer.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\HLSLCompiler.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\ImageD3D.h"/>
......@@ -291,7 +292,6 @@
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\shaders\compiled\passthroughr2d11ps.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\shaders\compiled\passthroughr3dui11ps.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\shaders\compiled\swizzlef3dps.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\shaders\compiled\clearfloat11ps.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\shaders\compiled\passthroughlumalpha2d11ps.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\shaders\compiled\passthroughrg2dui11ps.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\shaders\compiled\passthroughrgb3d11ps.h"/>
......@@ -311,6 +311,7 @@
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\shaders\compiled\clearfloat11vs.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\shaders\compiled\passthroughrgba2di11ps.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\shaders\compiled\passthroughr2dui11ps.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\shaders\compiled\clearfloat11ps.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\shaders\compiled\buffertotexture11_ps_4i.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\shaders\compiled\passthroughrg3dui11ps.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\shaders\compiled\swizzlei2dps.h"/>
......@@ -387,6 +388,7 @@
<ClInclude Include="..\..\include\EGL\eglplatform.h"/>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\src\libGLESv2\Error.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\validationES2.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\precompiled.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\DynamicHLSL.cpp"/>
......@@ -395,7 +397,6 @@
<ClCompile Include="..\..\src\libGLESv2\formatutils.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\Fence.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\validationES.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\Renderbuffer.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\Program.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\ResourceManager.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\angletypes.cpp"/>
......@@ -415,6 +416,7 @@
<ClCompile Include="..\..\src\libGLESv2\Shader.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\Uniform.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\main.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\Renderbuffer.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\Sampler.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\Framebuffer.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\Texture.cpp"/>
......@@ -457,13 +459,13 @@
<ClCompile Include="..\..\src\libGLESv2\renderer\d3d\d3d9\VertexBuffer9.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\renderer\d3d\d3d9\Fence9.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\renderer\d3d\d3d9\Image9.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\renderer\d3d\d3d9\renderer9_utils.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\renderer\d3d\d3d9\TextureStorage9.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\renderer\d3d\d3d9\Renderer9.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\renderer\d3d\d3d9\RenderTarget9.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\renderer\d3d\d3d9\formatutils9.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\renderer\d3d\d3d9\Buffer9.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\renderer\d3d\d3d9\ShaderExecutable9.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\renderer\d3d\d3d9\renderer9_utils.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\renderer\d3d\d3d9\SwapChain9.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\renderer\d3d\d3d9\Blit9.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\renderer\d3d\d3d9\IndexBuffer9.cpp"/>
......@@ -474,6 +476,7 @@
<ClCompile Include="..\..\src\common\mathutil.cpp"/>
<ClCompile Include="..\..\src\common\debug.cpp"/>
<ClCompile Include="..\..\src\common\blocklayout.cpp"/>
<ClCompile Include="..\..\src\common\angleutils.cpp"/>
<ClCompile Include="..\..\src\third_party\systeminfo\SystemInfo.cpp"/>
<ClCompile Include="..\..\src\third_party\murmurhash\MurmurHash3.cpp"/>
</ItemGroup>
......
......@@ -69,6 +69,9 @@
<ClInclude Include="..\..\src\libGLESv2\Shader.h">
<Filter>src\libGLESv2</Filter>
</ClInclude>
<ClCompile Include="..\..\src\libGLESv2\Error.cpp">
<Filter>src\libGLESv2</Filter>
</ClCompile>
<ClCompile Include="..\..\src\libGLESv2\validationES2.cpp">
<Filter>src\libGLESv2</Filter>
</ClCompile>
......@@ -120,9 +123,6 @@
<ClCompile Include="..\..\src\libGLESv2\validationES.cpp">
<Filter>src\libGLESv2</Filter>
</ClCompile>
<ClCompile Include="..\..\src\libGLESv2\Renderbuffer.cpp">
<Filter>src\libGLESv2</Filter>
</ClCompile>
<ClInclude Include="..\..\src\libGLESv2\Uniform.h">
<Filter>src\libGLESv2</Filter>
</ClInclude>
......@@ -192,6 +192,9 @@
<ClInclude Include="..\..\src\libGLESv2\HandleAllocator.h">
<Filter>src\libGLESv2</Filter>
</ClInclude>
<ClInclude Include="..\..\src\libGLESv2\Error.h">
<Filter>src\libGLESv2</Filter>
</ClInclude>
<ClInclude Include="..\..\src\libGLESv2\ResourceManager.h">
<Filter>src\libGLESv2</Filter>
</ClInclude>
......@@ -231,6 +234,9 @@
<ClCompile Include="..\..\src\libGLESv2\main.cpp">
<Filter>src\libGLESv2</Filter>
</ClCompile>
<ClCompile Include="..\..\src\libGLESv2\Renderbuffer.cpp">
<Filter>src\libGLESv2</Filter>
</ClCompile>
<ClInclude Include="..\..\src\libGLESv2\main.h">
<Filter>src\libGLESv2</Filter>
</ClInclude>
......@@ -294,6 +300,9 @@
<ClInclude Include="..\..\src\libGLESv2\renderer\copyvertex.h">
<Filter>src\libGLESv2\renderer</Filter>
</ClInclude>
<ClInclude Include="..\..\src\libGLESv2\renderer\VertexArrayImpl.h">
<Filter>src\libGLESv2\renderer</Filter>
</ClInclude>
<ClInclude Include="..\..\src\libGLESv2\renderer\SwapChain.h">
<Filter>src\libGLESv2\renderer</Filter>
</ClInclude>
......@@ -324,9 +333,6 @@
<ClInclude Include="..\..\src\libGLESv2\renderer\vertexconversion.h">
<Filter>src\libGLESv2\renderer</Filter>
</ClInclude>
<ClInclude Include="..\..\src\libGLESv2\renderer\VertexArrayImpl.h">
<Filter>src\libGLESv2\renderer</Filter>
</ClInclude>
<ClCompile Include="..\..\src\libGLESv2\renderer\Renderer.cpp">
<Filter>src\libGLESv2\renderer</Filter>
</ClCompile>
......@@ -519,9 +525,6 @@
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\shaders\compiled\swizzlef3dps.h">
<Filter>src\libGLESv2\renderer\d3d\d3d11\shaders\compiled</Filter>
</ClInclude>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\shaders\compiled\clearfloat11ps.h">
<Filter>src\libGLESv2\renderer\d3d\d3d11\shaders\compiled</Filter>
</ClInclude>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\shaders\compiled\passthroughlumalpha2d11ps.h">
<Filter>src\libGLESv2\renderer\d3d\d3d11\shaders\compiled</Filter>
</ClInclude>
......@@ -579,6 +582,9 @@
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\shaders\compiled\passthroughr2dui11ps.h">
<Filter>src\libGLESv2\renderer\d3d\d3d11\shaders\compiled</Filter>
</ClInclude>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\shaders\compiled\clearfloat11ps.h">
<Filter>src\libGLESv2\renderer\d3d\d3d11\shaders\compiled</Filter>
</ClInclude>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\shaders\compiled\buffertotexture11_ps_4i.h">
<Filter>src\libGLESv2\renderer\d3d\d3d11\shaders\compiled</Filter>
</ClInclude>
......@@ -699,9 +705,6 @@
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d9\Renderer9.h">
<Filter>src\libGLESv2\renderer\d3d\d3d9</Filter>
</ClInclude>
<ClCompile Include="..\..\src\libGLESv2\renderer\d3d\d3d9\renderer9_utils.cpp">
<Filter>src\libGLESv2\renderer\d3d\d3d9</Filter>
</ClCompile>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d9\Blit9.h">
<Filter>src\libGLESv2\renderer\d3d\d3d9</Filter>
</ClInclude>
......@@ -735,6 +738,9 @@
<ClCompile Include="..\..\src\libGLESv2\renderer\d3d\d3d9\ShaderExecutable9.cpp">
<Filter>src\libGLESv2\renderer\d3d\d3d9</Filter>
</ClCompile>
<ClCompile Include="..\..\src\libGLESv2\renderer\d3d\d3d9\renderer9_utils.cpp">
<Filter>src\libGLESv2\renderer\d3d\d3d9</Filter>
</ClCompile>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d9\Query9.h">
<Filter>src\libGLESv2\renderer\d3d\d3d9</Filter>
</ClInclude>
......@@ -822,6 +828,9 @@
<ClCompile Include="..\..\src\common\blocklayout.cpp">
<Filter>src\common</Filter>
</ClCompile>
<ClCompile Include="..\..\src\common\angleutils.cpp">
<Filter>src\common</Filter>
</ClCompile>
<ClInclude Include="..\..\src\third_party\systeminfo\SystemInfo.h">
<Filter>src\third_party\systeminfo</Filter>
</ClInclude>
......
//
// Copyright (c) 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.
//
#include "common/angleutils.h"
#include <vector>
std::string FormatString(const std::string &fmt, va_list vararg)
{
static std::vector<char> buffer(512);
// Attempt to just print to the current buffer
int len = vsnprintf(&buffer[0], buffer.size(), fmt.c_str(), vararg);
if (len < 0 || static_cast<size_t>(len) >= buffer.size())
{
// Buffer was not large enough, calculate the required size and resize the buffer
len = vsnprintf(NULL, 0, fmt.c_str(), vararg);
buffer.resize(len + 1);
// Print again
vsnprintf(&buffer[0], buffer.size(), fmt.c_str(), vararg);
}
return std::string(buffer.data(), len);
}
std::string FormatString(const std::string &fmt, ...)
{
va_list vararg;
va_start(vararg, fmt);
std::string result = FormatString(fmt, vararg);
va_end(vararg);
return result;
}
......@@ -16,6 +16,7 @@
#include <string>
#include <set>
#include <sstream>
#include <cstdarg>
// A macro to disallow the copy constructor and operator= functions
// This must be used in the private: declarations for a class
......@@ -131,6 +132,9 @@ inline std::string Str(int i)
return strstr.str();
}
std::string FormatString(const std::string &fmt, va_list vararg);
std::string FormatString(const std::string &fmt, ...);
#if defined(_MSC_VER)
#define snprintf _snprintf
#endif
......
......@@ -8,6 +8,7 @@
#include "common/debug.h"
#include "common/platform.h"
#include "common/angleutils.h"
#include <stdarg.h>
#include <vector>
......@@ -25,22 +26,7 @@ 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';
std::string formattedMessage = FormatString(format, vararg);
#endif
#if defined(ANGLE_ENABLE_PERF)
......@@ -48,12 +34,12 @@ static void output(bool traceFileDebugOnly, PerfOutputFunction perfFunc, const c
{
// The perf function only accepts wide strings, widen the ascii message
static std::wstring wideMessage;
if (wideMessage.capacity() < asciiMessageBuffer.size())
if (wideMessage.capacity() < formattedMessage.length())
{
wideMessage.reserve(asciiMessageBuffer.size());
wideMessage.reserve(formattedMessage.size());
}
wideMessage.assign(asciiMessageBuffer.begin(), asciiMessageBuffer.begin() + len);
wideMessage.assign(formattedMessage.begin(), formattedMessage.end());
perfFunc(0, wideMessage.c_str());
}
......@@ -70,7 +56,7 @@ static void output(bool traceFileDebugOnly, PerfOutputFunction perfFunc, const c
static std::ofstream file(TRACE_OUTPUT_FILE, std::ofstream::app);
if (file)
{
file.write(&asciiMessageBuffer[0], len);
file.write(formattedMessage.c_str(), formattedMessage.length());
file.flush();
}
......
......@@ -25,6 +25,7 @@
'../include/angle_gl.h',
'common/RefCountObject.cpp',
'common/RefCountObject.h',
'common/angleutils.cpp',
'common/angleutils.h',
'common/debug.cpp',
'common/debug.h',
......
......@@ -25,6 +25,7 @@
'../include/angle_gl.h',
'common/RefCountObject.cpp',
'common/RefCountObject.h',
'common/angleutils.cpp',
'common/angleutils.h',
'common/blocklayout.cpp',
'common/blocklayout.h',
......@@ -49,6 +50,8 @@
'libGLESv2/Context.h',
'libGLESv2/DynamicHLSL.cpp',
'libGLESv2/DynamicHLSL.h',
'libGLESv2/Error.cpp',
'libGLESv2/Error.h',
'libGLESv2/Fence.cpp',
'libGLESv2/Fence.h',
'libGLESv2/Float16ToFloat32.cpp',
......
......@@ -104,12 +104,6 @@ Context::Context(int clientVersion, const gl::Context *shareContext, rx::Rendere
mTransformFeedbackZero.set(new TransformFeedback(0));
bindTransformFeedback(0);
mInvalidEnum = false;
mInvalidValue = false;
mInvalidOperation = false;
mOutOfMemory = false;
mInvalidFramebufferOperation = false;
mHasBeenCurrent = false;
mContextLost = false;
mResetStatus = GL_NO_ERROR;
......@@ -1871,71 +1865,28 @@ void Context::sync(bool block)
mRenderer->sync(block);
}
void Context::recordInvalidEnum()
{
mInvalidEnum = true;
}
void Context::recordInvalidValue()
{
mInvalidValue = true;
}
void Context::recordInvalidOperation()
{
mInvalidOperation = true;
}
void Context::recordOutOfMemory()
{
mOutOfMemory = true;
}
void Context::recordInvalidFramebufferOperation()
void Context::recordError(const Error &error)
{
mInvalidFramebufferOperation = true;
if (error.isError())
{
mErrors.insert(error.getCode());
}
}
// Get one of the recorded errors and clear its flag, if any.
// [OpenGL ES 2.0.24] section 2.5 page 13.
GLenum Context::getError()
{
if (mInvalidEnum)
{
mInvalidEnum = false;
return GL_INVALID_ENUM;
}
if (mInvalidValue)
{
mInvalidValue = false;
return GL_INVALID_VALUE;
}
if (mInvalidOperation)
{
mInvalidOperation = false;
return GL_INVALID_OPERATION;
}
if (mOutOfMemory)
if (mErrors.empty())
{
mOutOfMemory = false;
return GL_OUT_OF_MEMORY;
return GL_NO_ERROR;
}
if (mInvalidFramebufferOperation)
else
{
mInvalidFramebufferOperation = false;
return GL_INVALID_FRAMEBUFFER_OPERATION;
GLenum error = *mErrors.begin();
mErrors.erase(mErrors.begin());
return error;
}
return GL_NO_ERROR;
}
GLenum Context::getResetStatus()
......
......@@ -22,6 +22,7 @@
#include "common/angleutils.h"
#include "common/RefCountObject.h"
#include "libGLESv2/Caps.h"
#include "libGLESv2/Error.h"
#include "libGLESv2/HandleAllocator.h"
#include "libGLESv2/angletypes.h"
#include "libGLESv2/Constants.h"
......@@ -196,11 +197,7 @@ class Context
void drawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instances);
void sync(bool block); // flush/finish
void recordInvalidEnum();
void recordInvalidValue();
void recordInvalidOperation();
void recordOutOfMemory();
void recordInvalidFramebufferOperation();
void recordError(const Error &error);
GLenum getError();
GLenum getResetStatus();
......@@ -316,11 +313,8 @@ class Context
BindingPointer<Texture> mIncompleteTextures[TEXTURE_TYPE_COUNT];
// Recorded errors
bool mInvalidEnum;
bool mInvalidValue;
bool mInvalidOperation;
bool mOutOfMemory;
bool mInvalidFramebufferOperation;
typedef std::set<GLenum> ErrorSet;
ErrorSet mErrors;
// Current/lost context flags
bool mHasBeenCurrent;
......
//
// Copyright (c) 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.
//
// Error.cpp: Implements the gl::Error class which encapsulates an OpenGL error
// and optional error message.
#include "libGLESv2/Error.h"
#include "common/angleutils.h"
#include <cstdarg>
namespace gl
{
Error::Error(GLenum errorCode)
: mCode(errorCode),
mMessage()
{
}
Error::Error(GLenum errorCode, const std::string &msg, ...)
: mCode(errorCode),
mMessage()
{
va_list vararg;
va_start(vararg, msg);
mMessage = Format(msg, vararg);
va_end(vararg);
}
Error::Error(const Error &other)
: mCode(other.mCode),
mMessage(other.mMessage)
{
}
Error &Error::operator=(const Error &other)
{
mCode = other.mCode;
mMessage = other.mMessage;
return *this;
}
}
//
// Copyright (c) 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.
// Error.h: Defines the gl::Error class which encapsulates an OpenGL error
// and optional error message.
#ifndef LIBGLESV2_ERROR_H_
#define LIBGLESV2_ERROR_H_
#include "angle_gl.h"
#include <string>
namespace gl
{
class Error
{
public:
explicit Error(GLenum errorCode);
Error(GLenum errorCode, const std::string &msg, ...);
Error(const Error &other);
Error &operator=(const Error &other);
GLenum getCode() const { return mCode; }
bool isError() const { return (mCode != GL_NO_ERROR); }
const std::string &getMessage() const { return mMessage; }
private:
GLenum mCode;
std::string mMessage;
};
}
#endif // LIBGLESV2_ERROR_H_
......@@ -145,33 +145,26 @@ egl::Display *getDisplay()
void error(GLenum errorCode)
{
gl::Context *context = glGetCurrentContext();
context->recordError(Error(errorCode));
if (context)
switch (errorCode)
{
switch (errorCode)
{
case GL_INVALID_ENUM:
context->recordInvalidEnum();
TRACE("\t! Error generated: invalid enum\n");
break;
case GL_INVALID_VALUE:
context->recordInvalidValue();
TRACE("\t! Error generated: invalid value\n");
break;
case GL_INVALID_OPERATION:
context->recordInvalidOperation();
TRACE("\t! Error generated: invalid operation\n");
break;
case GL_OUT_OF_MEMORY:
context->recordOutOfMemory();
TRACE("\t! Error generated: out of memory\n");
break;
case GL_INVALID_FRAMEBUFFER_OPERATION:
context->recordInvalidFramebufferOperation();
TRACE("\t! Error generated: invalid framebuffer operation\n");
break;
default: UNREACHABLE();
}
case GL_INVALID_ENUM:
TRACE("\t! Error generated: invalid enum\n");
break;
case GL_INVALID_VALUE:
TRACE("\t! Error generated: invalid value\n");
break;
case GL_INVALID_OPERATION:
TRACE("\t! Error generated: invalid operation\n");
break;
case GL_OUT_OF_MEMORY:
TRACE("\t! Error generated: out of memory\n");
break;
case GL_INVALID_FRAMEBUFFER_OPERATION:
TRACE("\t! Error generated: invalid framebuffer operation\n");
break;
default: UNREACHABLE();
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment