summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosé Fonseca <jose.r.fonseca@gmail.com>2011-10-08 20:23:18 +0100
committerJosé Fonseca <jose.r.fonseca@gmail.com>2011-10-08 20:23:18 +0100
commitb1bb3c2496c84191ff91cb99168283450917744b (patch)
tree2d9a51e3c525b7d9e60b4082c22b2935458b1fd3
parenta94f2b68f6fc8ff381f26e8cd88e08f92a4e9a60 (diff)
Uniformize warning output.
-rw-r--r--glretrace.py16
-rw-r--r--glretrace_main.cpp32
-rw-r--r--retrace.cpp33
-rw-r--r--retrace.hpp6
-rw-r--r--retrace.py5
5 files changed, 58 insertions, 34 deletions
diff --git a/glretrace.py b/glretrace.py
index 925fb18..761fe23 100644
--- a/glretrace.py
+++ b/glretrace.py
@@ -237,7 +237,7 @@ class GlRetracer(Retracer):
print r' glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &error_position);'
print r' if (error_position != -1) {'
print r' const char *error_string = (const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB);'
- print r' std::cerr << call.no << ": warning: " << error_string << "\n";'
+ print r' retrace::warning(call) << error_string << "\n";'
print r' }'
if function.name == 'glCompileShader':
print r' GLint compile_status = 0;'
@@ -247,7 +247,7 @@ class GlRetracer(Retracer):
print r' glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &info_log_length);'
print r' GLchar *infoLog = new GLchar[info_log_length];'
print r' glGetShaderInfoLog(shader, info_log_length, NULL, infoLog);'
- print r' std::cerr << call.no << ": warning: " << infoLog << "\n";'
+ print r' retrace::warning(call) << infoLog << "\n";'
print r' delete [] infoLog;'
print r' }'
if function.name == 'glLinkProgram':
@@ -258,7 +258,7 @@ class GlRetracer(Retracer):
print r' glGetProgramiv(program, GL_INFO_LOG_LENGTH, &info_log_length);'
print r' GLchar *infoLog = new GLchar[info_log_length];'
print r' glGetProgramInfoLog(program, info_log_length, NULL, infoLog);'
- print r' std::cerr << call.no << ": warning: " << infoLog << "\n";'
+ print r' retrace::warning(call) << infoLog << "\n";'
print r' delete [] infoLog;'
print r' }'
if function.name == 'glCompileShaderARB':
@@ -269,7 +269,7 @@ class GlRetracer(Retracer):
print r' glGetObjectParameterivARB(shaderObj, GL_OBJECT_INFO_LOG_LENGTH_ARB, &info_log_length);'
print r' GLchar *infoLog = new GLchar[info_log_length];'
print r' glGetInfoLogARB(shaderObj, info_log_length, NULL, infoLog);'
- print r' std::cerr << call.no << ": warning: " << infoLog << "\n";'
+ print r' retrace::warning(call) << infoLog << "\n";'
print r' delete [] infoLog;'
print r' }'
if function.name == 'glLinkProgramARB':
@@ -280,23 +280,23 @@ class GlRetracer(Retracer):
print r' glGetObjectParameterivARB(programObj, GL_OBJECT_INFO_LOG_LENGTH_ARB, &info_log_length);'
print r' GLchar *infoLog = new GLchar[info_log_length];'
print r' glGetInfoLogARB(programObj, info_log_length, NULL, infoLog);'
- print r' std::cerr << call.no << ": warning: " << infoLog << "\n";'
+ print r' retrace::warning(call) << infoLog << "\n";'
print r' delete [] infoLog;'
print r' }'
if function.name in ('glMapBuffer', 'glMapBufferARB', 'glMapBufferRange', 'glMapNamedBufferEXT', 'glMapNamedBufferRangeEXT'):
print r' if (!__result) {'
- print r' std::cerr << call.no << ": warning: failed to map buffer\n";'
+ print r' retrace::warning(call) << "failed to map buffer\n";'
print r' }'
if function.name in ('glGetAttribLocation', 'glGetAttribLocationARB'):
print r' GLint __orig_result = call.ret->toSInt();'
print r' if (__result != __orig_result) {'
- print r' std::cerr << call.no << ": warning: vertex attrib location mismatch " << __orig_result << " -> " << __result << "\n";'
+ print r' retrace::warning(call) << "vertex attrib location mismatch " << __orig_result << " -> " << __result << "\n";'
print r' }'
if function.name in ('glCheckFramebufferStatus', 'glCheckFramebufferStatusEXT', 'glCheckNamedFramebufferStatusEXT'):
print r' GLint __orig_result = call.ret->toSInt();'
print r' if (__orig_result == GL_FRAMEBUFFER_COMPLETE &&'
print r' __result != GL_FRAMEBUFFER_COMPLETE) {'
- print r' std::cerr << call.no << ": warning: incomplete framebuffer (" << glstate::enumToString(__result) << ")\n";'
+ print r' retrace::warning(call) << "incomplete framebuffer (" << glstate::enumToString(__result) << ")\n";'
print r' }'
print ' }'
diff --git a/glretrace_main.cpp b/glretrace_main.cpp
index cf250b9..fb98b61 100644
--- a/glretrace_main.cpp
+++ b/glretrace_main.cpp
@@ -61,46 +61,42 @@ checkGlError(Trace::Call &call) {
return;
}
- if (retrace::verbosity == 0) {
- std::cout << call;
- std::cout.flush();
- }
+ std::ostream & os = retrace::warning(call);
- std::cerr << call.no << ": ";
- std::cerr << "warning: glGetError(";
- std::cerr << call.name();
- std::cerr << ") = ";
+ os << "glGetError(";
+ os << call.name();
+ os << ") = ";
switch (error) {
case GL_INVALID_ENUM:
- std::cerr << "GL_INVALID_ENUM";
+ os << "GL_INVALID_ENUM";
break;
case GL_INVALID_VALUE:
- std::cerr << "GL_INVALID_VALUE";
+ os << "GL_INVALID_VALUE";
break;
case GL_INVALID_OPERATION:
- std::cerr << "GL_INVALID_OPERATION";
+ os << "GL_INVALID_OPERATION";
break;
case GL_STACK_OVERFLOW:
- std::cerr << "GL_STACK_OVERFLOW";
+ os << "GL_STACK_OVERFLOW";
break;
case GL_STACK_UNDERFLOW:
- std::cerr << "GL_STACK_UNDERFLOW";
+ os << "GL_STACK_UNDERFLOW";
break;
case GL_OUT_OF_MEMORY:
- std::cerr << "GL_OUT_OF_MEMORY";
+ os << "GL_OUT_OF_MEMORY";
break;
case GL_INVALID_FRAMEBUFFER_OPERATION:
- std::cerr << "GL_INVALID_FRAMEBUFFER_OPERATION";
+ os << "GL_INVALID_FRAMEBUFFER_OPERATION";
break;
case GL_TABLE_TOO_LARGE:
- std::cerr << "GL_TABLE_TOO_LARGE";
+ os << "GL_TABLE_TOO_LARGE";
break;
default:
- std::cerr << error;
+ os << error;
break;
}
- std::cerr << "\n";
+ os << "\n";
}
/**
diff --git a/retrace.cpp b/retrace.cpp
index b04c997..4e0f360 100644
--- a/retrace.cpp
+++ b/retrace.cpp
@@ -36,14 +36,34 @@ namespace retrace {
int verbosity = 0;
+static bool call_dumped = false;
+
+
+static void dumpCall(Trace::Call &call) {
+ if (verbosity >= 0 && !call_dumped) {
+ std::cout << call;
+ std::cout.flush();
+ call_dumped = true;
+ }
+}
+
+
+std::ostream &warning(Trace::Call &call) {
+ dumpCall(call);
+
+ std::cerr << call.no << ": ";
+ std::cerr << "warning: ";
+
+ return std::cerr;
+}
+
+
void ignore(Trace::Call &call) {
(void)call;
}
-static void unknown(Trace::Call &call) {
- if (verbosity >= 0) {
- std::cerr << call.no << ": warning: unknown call " << call.name() << "\n";
- }
+void unknown(Trace::Call &call) {
+ warning(call) << "unknown call " << call.name() << "\n";
}
inline void Retracer::addCallback(const Entry *entry) {
@@ -61,9 +81,10 @@ void Retracer::addCallbacks(const Entry *entries) {
void Retracer::retrace(Trace::Call &call) {
+ call_dumped = false;
+
if (verbosity >= 1) {
- std::cout << call;
- std::cout.flush();
+ dumpCall(call);
}
Callback callback = 0;
diff --git a/retrace.hpp b/retrace.hpp
index d0e986e..69cf0ad 100644
--- a/retrace.hpp
+++ b/retrace.hpp
@@ -28,7 +28,9 @@
#include <string.h>
+#include <list>
#include <map>
+#include <ostream>
#include "trace_model.hpp"
@@ -84,7 +86,11 @@ public:
extern int verbosity;
+std::ostream &warning(Trace::Call &call);
+
+
void ignore(Trace::Call &call);
+void unknown(Trace::Call &call);
typedef void (*Callback)(Trace::Call &call);
diff --git a/retrace.py b/retrace.py
index 9092f35..c8bb8ea 100644
--- a/retrace.py
+++ b/retrace.py
@@ -227,8 +227,9 @@ class Retracer:
print ' // FIXME: result'
def fail_function(self, function):
- print ' if (retrace::verbosity >= 0)'
- print ' std::cerr << "warning: unsupported call %s\\n";' % function.name
+ print ' if (retrace::verbosity >= 0) {'
+ print ' retrace::unknown(call);'
+ print ' }'
print ' return;'
def extract_arg(self, function, arg, arg_type, lvalue, rvalue):