00001 #pragma once
00002 #ifndef ERROR_H
00003 #define ERROR_H
00004
00005 #include "Types.h"
00006
00007 #include <sstream>
00008 #include <string>
00009 #include <iostream>
00010 #include <vector>
00011 #include <algorithm>
00012
00013 using namespace std;
00014
00015 namespace RenderTools{
00016
00017 class Error{
00018 public:
00019 enum Code{
00020 ERROR_NO_ERROR,
00021 IMAGE_NOT_LOADED,
00022 TEXTURE_UNITS_EXCEEDED,
00023 TEXTURE_ALLOCATION_FAILED,
00024 TEXTURE_UPLOAD_FAILED,
00025 TOO_MANY_COLORBUFFERS,
00026 DEPTHBUFFER_ALREADY_EXISTS,
00027 STENCILBUFFER_ALREADY_EXISTS,
00028 RENDERBUFFER_TOO_LARGE,
00029 TEXTURE_IS_NULL,
00030 RENDERBUFFER_UNACCEPTABLE_TYPE,
00031 PROGRAM_DOES_NOT_EXIST,
00032 PROGRAM_NOT_BOUND,
00033 CANNOT_OPEN_FILE,
00034 SHADER_COMPILE_FAILED,
00035 SHADER_LINK_FAILED,
00036 PASS_INCOMPLETE,
00037 UNIFORM_NOT_IN_PROGRAM,
00038 OVERWRITING_UNIFORM_IN_PROGRAM,
00039 CAMERA_NOT_IN_GROUP,
00040 FRAMEBUFFER_NOT_IN_GROUP,
00041 PROGRAM_NOT_IN_GROUP,
00042 STATESET_NOT_IN_GROUP,
00043 TEXTURE_NOT_IN_GROUP,
00044 FRAMEBUFFER_INCOMPLETE_ATTACHMENT,
00045 FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT,
00046 FRAMEBUFFER_INCOMPLETE_DIMENSIONS,
00047 FRAMEBUFFER_INCOMPLETE_FORMATS,
00048 FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER,
00049 FRAMEBUFFER_INCOMPLETE_READ_BUFFER,
00050 FRAMEBUFFER_UNSUPPORTED,
00051 ILLEGAL_WRAPMODE_FOR_RECTANGLE_EXT,
00052 MIPMAP_REQUESTED_FOR_RECTANGLE_EXT,
00053 PASS_DIMENSION_UNDEFINED,
00054 MEMORY_ALLOCATION_FAILED,
00055 TOO_MANY_NAMES,
00056 TOO_MANY_TEXTURES,
00057 PROGRAM_VALIDATION_FAILED,
00058 FILE_READ_FAILED,
00059 FILE_NOT_FOUND,
00060 OVERWRITING_ITEM_IN_MANAGER,
00061 OVERWRITING_ITEM_IN_GROUP,
00062 ITEM_NOT_IN_MANAGER,
00063 ITEM_NOT_IN_GROUP,
00064 ITEM_ALREADY_EXISTS,
00065 NULL_POINTER,
00066 UNIFORM_COMPONENTS_EXCEEDED,
00067 WARNING,
00068 INDEX_OUT_OF_BOUNDS,
00069 AMBIGUOUS_PATH,
00070 STACK_UNDERFLOW,
00071 BUFFER_HAS_NO_SIZE,
00072 BUFFER_HAS_NO_VERTICES,
00073 BUFFER_HAS_NO_COLORS,
00074 BUFFER_HAS_NO_NORMALS,
00075 BUFFER_HAS_NO_TEXCOORDS,
00076 NODE_NOT_FOUND,
00077 NODE_HAS_PARENT_BUT_IS_NOT_CHILD,
00078 NODE_IS_CHILD_BUT_HAS_NO_PARENT,
00079 DIVISION_BY_ZERO,
00080 INVALID_VALUE,
00081 WRONG_TYPE,
00082 BAD_CAST,
00083 UNSUPPORTED_TYPE,
00084 INCORRECT_TYPE,
00085 ILLEGAL_WRITE,
00086 CONVERSION_ERROR,
00087 TOO_MANY_ITEMS,
00088 REINITIALIZATION,
00089 TRIANGULATION_FAILED,
00090 CLIPPING_FAILED,
00091 ARRAY_TYPE_UNSUPPORTED,
00092 ELEMENT_SIZE_UNSUPPORTED,
00093 NO_ACTIVE_GROUP,
00094 ITEM_NOT_INITIALIZED,
00095 GLEW_INITIALIZATION_FAILED,
00096 PROPERTY_DOES_NOT_EXIST,
00097 EMPTY_PATH
00098 };
00099
00100 Error();
00101 virtual ~Error();
00102
00103 static void ignore( Code c );
00104 static void error( Code c, const char *file, int line, string msg = string("") );
00105 static void warning( Code c, const char *file, int line, string msg = string("") );
00106 static int dumpErrors( const string & stream = string("cerr"), int indent = 0 );
00107 static int dumpWarnings( const string & stream = string("cerr"), int indent = 0 );
00108 static bool assertNoErrors( const char * file, int line, string msg = string("") );
00109 static bool assertNoWarnings( const char * file, int line, string msg = string("") );
00110 #ifndef RT_AS3
00111 static void checkFramebufferStatus( const char * file, int line, string msg = string("") );
00112 #endif
00113 static string getErrorString( Code error );
00114
00115 private:
00116 static Code _popError( string & str );
00117 static Code _popWarning( string & str );
00118
00119 static vector<Code> s_ignore;
00120 static vector<Code> s_errors;
00121 static vector<Code> s_warnings;
00122 static vector<string> s_errorstrings;
00123 static vector<string> s_warningstrings;
00124 };
00125
00126
00127
00128 };
00129
00130 #endif