1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 // This file contains the ErrorState class.
7 #ifndef GPU_COMMAND_BUFFER_SERVICE_ERROR_STATE_H_
8 #define GPU_COMMAND_BUFFER_SERVICE_ERROR_STATE_H_
10 #include "base/compiler_specific.h"
11 #include "gpu/command_buffer/common/types.h"
12 #include "gpu/gpu_export.h"
19 // Use these macro to synthesize GL errors instead of calling the error_state
20 // functions directly as they will propogate the __FILE__ and __LINE__.
22 // Use to synthesize a GL error on the error_state.
23 #define ERRORSTATE_SET_GL_ERROR(error_state, error, function_name, msg) \
24 error_state->SetGLError(__FILE__, __LINE__, error, function_name, msg)
26 // Use to synthesize an INVALID_ENUM GL error on the error_state. Will attempt
27 // to expand the enum to a string.
28 #define ERRORSTATE_SET_GL_ERROR_INVALID_ENUM( \
29 error_state, function_name, value, label) \
30 error_state->SetGLErrorInvalidEnum( \
31 __FILE__, __LINE__, function_name, value, label)
33 // Use to synthesize a GL error on the error_state for an invalid enum based
34 // parameter. Will attempt to expand the parameter to a string.
35 #define ERRORSTATE_SET_GL_ERROR_INVALID_PARAM( \
36 error_state, error, function_name, pname, param) \
37 error_state->SetGLErrorInvalidParam( \
38 __FILE__, __LINE__, error, function_name, pname, param)
40 // Use to move all pending error to the wrapper so on your next GL call
41 // you can see if that call generates an error.
42 #define ERRORSTATE_COPY_REAL_GL_ERRORS_TO_WRAPPER(error_state, function_name) \
43 error_state->CopyRealGLErrorsToWrapper(__FILE__, __LINE__, function_name)
44 // Use to look at the real GL error and still pass it on to the user.
45 #define ERRORSTATE_PEEK_GL_ERROR(error_state, function_name) \
46 error_state->PeekGLError(__FILE__, __LINE__, function_name)
47 // Use to clear all current GL errors. FAILS if there are any.
48 #define ERRORSTATE_CLEAR_REAL_GL_ERRORS(error_state, function_name) \
49 error_state->ClearRealGLErrors(__FILE__, __LINE__, function_name)
52 class GPU_EXPORT ErrorState {
54 virtual ~ErrorState();
56 static ErrorState* Create(Logger* logger);
58 virtual uint32 GetGLError() = 0;
60 virtual void SetGLError(
64 const char* function_name,
66 virtual void SetGLErrorInvalidEnum(
69 const char* function_name,
71 const char* label) = 0;
72 virtual void SetGLErrorInvalidParam(
76 const char* function_name,
80 // Gets the GLError and stores it in our wrapper. Effectively
81 // this lets us peek at the error without losing it.
82 virtual unsigned int PeekGLError(
83 const char* filename, int line, const char* function_name) = 0;
85 // Copies the real GL errors to the wrapper. This is so we can
86 // make sure there are no native GL errors before calling some GL function
87 // so that on return we know any error generated was for that specific
89 virtual void CopyRealGLErrorsToWrapper(
90 const char* filename, int line, const char* function_name) = 0;
92 // Clear all real GL errors. This is to prevent the client from seeing any
93 // errors caused by GL calls that it was not responsible for issuing.
94 virtual void ClearRealGLErrors(
95 const char* filename, int line, const char* function_name) = 0;
100 DISALLOW_COPY_AND_ASSIGN(ErrorState);
106 #endif // GPU_COMMAND_BUFFER_SERVICE_ERROR_STATE_H_