本文整理汇总了C++中trace::Parser类的典型用法代码示例。如果您正苦于以下问题:C++ Parser类的具体用法?C++ Parser怎么用?C++ Parser使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Parser类的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: getRunner
namespace retrace {
trace::Parser parser;
trace::Profiler profiler;
int verbosity = 0;
unsigned debug = 1;
bool dumpingState = false;
bool dumpingSnapshots = false;
Driver driver = DRIVER_DEFAULT;
const char *driverModule = NULL;
bool doubleBuffer = true;
unsigned samples = 1;
bool profiling = false;
bool profilingGpuTimes = false;
bool profilingCpuTimes = false;
bool profilingPixelsDrawn = false;
bool profilingMemoryUsage = false;
bool useCallNos = true;
bool singleThread = false;
unsigned frameNo = 0;
unsigned callNo = 0;
static void
takeSnapshot(unsigned call_no);
void
frameComplete(trace::Call &call) {
++frameNo;
if (!(call.flags & trace::CALL_FLAG_END_FRAME) &&
snapshotFrequency.contains(call)) {
// This call doesn't have the end of frame flag, so take any snapshot
// now.
takeSnapshot(call.no);
}
}
class DefaultDumper: public Dumper
{
public:
image::Image *
getSnapshot(void) {
return NULL;
}
bool
canDump(void) {
return false;
}
void
dumpState(StateWriter &writer) {
assert(0);
}
};
static DefaultDumper defaultDumper;
Dumper *dumper = &defaultDumper;
typedef StateWriter *(*StateWriterFactory)(std::ostream &);
static StateWriterFactory stateWriterFactory = createJSONStateWriter;
/**
* Take snapshots.
*/
static void
takeSnapshot(unsigned call_no) {
static unsigned snapshot_no = 0;
assert(dumpingSnapshots);
assert(snapshotPrefix);
image::Image *src = dumper->getSnapshot();
if (!src) {
std::cerr << call_no << ": warning: failed to get snapshot\n";
return;
}
if ((snapshotInterval == 0 ||
(snapshot_no % snapshotInterval) == 0)) {
if (snapshotPrefix[0] == '-' && snapshotPrefix[1] == 0) {
char comment[21];
snprintf(comment, sizeof comment, "%u",
useCallNos ? call_no : snapshot_no);
switch (snapshotFormat) {
//.........这里部分代码省略.........
开发者ID:byhj,项目名称:apitrace,代码行数:101,代码来源:retrace_main.cpp
示例2: snapshot
namespace glretrace {
bool double_buffer = true;
bool insideGlBeginEnd = false;
Trace::Parser parser;
glws::WindowSystem *ws = NULL;
glws::Visual *visual = NULL;
glws::Drawable *drawable = NULL;
glws::Context *context = NULL;
unsigned frame = 0;
long long startTime = 0;
bool wait = false;
bool benchmark = false;
const char *compare_prefix = NULL;
const char *snapshot_prefix = NULL;
enum frequency snapshot_frequency = FREQUENCY_NEVER;
unsigned dump_state = ~0;
void
checkGlError(Trace::Call &call) {
GLenum error = glGetError();
if (error == GL_NO_ERROR) {
return;
}
if (retrace::verbosity == 0) {
std::cout << call;
std::cout.flush();
}
std::cerr << call.no << ": ";
std::cerr << "warning: glGetError(";
std::cerr << call.name();
std::cerr << ") = ";
switch (error) {
case GL_INVALID_ENUM:
std::cerr << "GL_INVALID_ENUM";
break;
case GL_INVALID_VALUE:
std::cerr << "GL_INVALID_VALUE";
break;
case GL_INVALID_OPERATION:
std::cerr << "GL_INVALID_OPERATION";
break;
case GL_STACK_OVERFLOW:
std::cerr << "GL_STACK_OVERFLOW";
break;
case GL_STACK_UNDERFLOW:
std::cerr << "GL_STACK_UNDERFLOW";
break;
case GL_OUT_OF_MEMORY:
std::cerr << "GL_OUT_OF_MEMORY";
break;
case GL_INVALID_FRAMEBUFFER_OPERATION:
std::cerr << "GL_INVALID_FRAMEBUFFER_OPERATION";
break;
case GL_TABLE_TOO_LARGE:
std::cerr << "GL_TABLE_TOO_LARGE";
break;
default:
std::cerr << error;
break;
}
std::cerr << "\n";
}
void snapshot(unsigned call_no) {
if (!drawable ||
(!snapshot_prefix && !compare_prefix)) {
return;
}
Image::Image *ref = NULL;
if (compare_prefix) {
char filename[PATH_MAX];
snprintf(filename, sizeof filename, "%s%010u.png", compare_prefix, call_no);
ref = Image::readPNG(filename);
if (!ref) {
return;
}
if (retrace::verbosity >= 0) {
std::cout << "Read " << filename << "\n";
}
}
Image::Image *src = glstate::getDrawBufferImage(GL_RGBA);
if (!src) {
return;
}
if (snapshot_prefix) {
char filename[PATH_MAX];
snprintf(filename, sizeof filename, "%s%010u.png", snapshot_prefix, call_no);
if (src->writePNG(filename) && retrace::verbosity >= 0) {
//.........这里部分代码省略.........
开发者ID:pzick,项目名称:apitrace,代码行数:101,代码来源:glretrace_main.cpp
示例3: snapshot
namespace glretrace {
bool double_buffer = false;
bool insideGlBeginEnd = false;
Trace::Parser parser;
glws::WindowSystem *ws = NULL;
glws::Visual *visual = NULL;
glws::Drawable *drawable = NULL;
glws::Context *context = NULL;
int window_width = 256, window_height = 256;
unsigned frame = 0;
long long startTime = 0;
bool wait = false;
bool benchmark = false;
const char *compare_prefix = NULL;
const char *snapshot_prefix = NULL;
unsigned dump_state = ~0;
void
checkGlError(void) {
if (benchmark || insideGlBeginEnd) {
return;
}
GLenum error = glGetError();
if (error == GL_NO_ERROR) {
return;
}
std::cerr << "warning: glGetError() = ";
switch (error) {
case GL_INVALID_ENUM:
std::cerr << "GL_INVALID_ENUM";
break;
case GL_INVALID_VALUE:
std::cerr << "GL_INVALID_VALUE";
break;
case GL_INVALID_OPERATION:
std::cerr << "GL_INVALID_OPERATION";
break;
case GL_STACK_OVERFLOW:
std::cerr << "GL_STACK_OVERFLOW";
break;
case GL_STACK_UNDERFLOW:
std::cerr << "GL_STACK_UNDERFLOW";
break;
case GL_OUT_OF_MEMORY:
std::cerr << "GL_OUT_OF_MEMORY";
break;
case GL_INVALID_FRAMEBUFFER_OPERATION:
std::cerr << "GL_INVALID_FRAMEBUFFER_OPERATION";
break;
case GL_TABLE_TOO_LARGE:
std::cerr << "GL_TABLE_TOO_LARGE";
break;
default:
std::cerr << error;
break;
}
std::cerr << "\n";
}
static void snapshot(Image::Image &image) {
GLint drawbuffer = double_buffer ? GL_BACK : GL_FRONT;
GLint readbuffer = double_buffer ? GL_BACK : GL_FRONT;
glGetIntegerv(GL_DRAW_BUFFER, &drawbuffer);
glGetIntegerv(GL_READ_BUFFER, &readbuffer);
glReadBuffer(drawbuffer);
glReadPixels(0, 0, image.width, image.height, GL_RGBA, GL_UNSIGNED_BYTE, image.pixels);
checkGlError();
glReadBuffer(readbuffer);
}
static void frame_complete(void) {
++frame;
if (snapshot_prefix || compare_prefix) {
Image::Image *ref = NULL;
if (compare_prefix) {
char filename[PATH_MAX];
snprintf(filename, sizeof filename, "%s%04u.png", compare_prefix, frame);
ref = Image::readPNG(filename);
if (!ref) {
return;
}
if (retrace::verbosity >= 0)
std::cout << "Read " << filename << "\n";
}
Image::Image src(window_width, window_height, true);
snapshot(src);
if (snapshot_prefix) {
char filename[PATH_MAX];
//.........这里部分代码省略.........
开发者ID:bgirard,项目名称:apitrace,代码行数:101,代码来源:glretrace_main.cpp
示例4: display
static void display(void) {
startTime = OS::GetTime();
Trace::Call *call;
while ((call = parser.parse_call())) {
const char *name = call->name();
if (retrace::verbosity >= 1) {
std::cout << *call;
std::cout.flush();
}
if (name[0] == 'C' && name[1] == 'G' && name[2] == 'L') {
glretrace::retrace_call_cgl(*call);
}
else if (name[0] == 'w' && name[1] == 'g' && name[2] == 'l') {
glretrace::retrace_call_wgl(*call);
}
else if (name[0] == 'g' && name[1] == 'l' && name[2] == 'X') {
glretrace::retrace_call_glx(*call);
} else {
retrace::retrace_call(*call);
}
if (!insideGlBeginEnd &&
drawable && context &&
call->no >= dump_state) {
glstate::dumpCurrentContext(std::cout);
exit(0);
}
delete call;
}
// Reached the end of trace
glFlush();
long long endTime = OS::GetTime();
float timeInterval = (endTime - startTime) * 1.0E-6;
if (retrace::verbosity >= -1) {
std::cout <<
"Rendered " << frame << " frames"
" in " << timeInterval << " secs,"
" average of " << (frame/timeInterval) << " fps\n";
}
if (wait) {
while (ws->processEvents()) {}
} else {
exit(0);
}
}
开发者ID:pzick,项目名称:apitrace,代码行数:53,代码来源:glretrace_main.cpp
示例5: main
int main(int argc, char **argv)
{
int i;
for (i = 1; i < argc; ++i) {
const char *arg = argv[i];
if (arg[0] != '-') {
break;
}
if (!strcmp(arg, "--")) {
break;
} else if (!strcmp(arg, "-b")) {
benchmark = true;
retrace::verbosity = -1;
} else if (!strcmp(arg, "-c")) {
compare_prefix = argv[++i];
if (snapshot_frequency == FREQUENCY_NEVER) {
snapshot_frequency = FREQUENCY_FRAME;
}
} else if (!strcmp(arg, "-D")) {
dump_state = atoi(argv[++i]);
retrace::verbosity = -2;
} else if (!strcmp(arg, "-db")) {
double_buffer = true;
} else if (!strcmp(arg, "-sb")) {
double_buffer = false;
} else if (!strcmp(arg, "--help")) {
usage();
return 0;
} else if (!strcmp(arg, "-s")) {
snapshot_prefix = argv[++i];
if (snapshot_frequency == FREQUENCY_NEVER) {
snapshot_frequency = FREQUENCY_FRAME;
}
} else if (!strcmp(arg, "-S")) {
arg = argv[++i];
if (!strcmp(arg, "frame")) {
snapshot_frequency = FREQUENCY_FRAME;
} else if (!strcmp(arg, "framebuffer")) {
snapshot_frequency = FREQUENCY_FRAMEBUFFER;
} else if (!strcmp(arg, "draw")) {
snapshot_frequency = FREQUENCY_DRAW;
} else {
std::cerr << "error: unknown frequency " << arg << "\n";
usage();
return 1;
}
if (snapshot_prefix == NULL) {
snapshot_prefix = "";
}
} else if (!strcmp(arg, "-v")) {
++retrace::verbosity;
} else if (!strcmp(arg, "-w")) {
wait = true;
} else {
std::cerr << "error: unknown option " << arg << "\n";
usage();
return 1;
}
}
ws = glws::createNativeWindowSystem();
visual = ws->createVisual(double_buffer);
for ( ; i < argc; ++i) {
if (!parser.open(argv[i])) {
std::cerr << "error: failed to open " << argv[i] << "\n";
return 1;
}
display();
parser.close();
}
return 0;
}
开发者ID:pzick,项目名称:apitrace,代码行数:79,代码来源:glretrace_main.cpp
示例6: display
static void display(void) {
Trace::Call *call;
while ((call = parser.parse_call())) {
const std::string &name = call->name();
if ((name[0] == 'w' && name[1] == 'g' && name[2] == 'l') ||
(name[0] == 'g' && name[1] == 'l' && name[2] == 'X')) {
// XXX: We ignore the majority of the OS-specific calls for now
if (name == "glXSwapBuffers" ||
name == "wglSwapBuffers") {
if (retrace::verbosity >= 1) {
std::cout << *call;
std::cout.flush();
};
frame_complete();
if (double_buffer)
drawable->swapBuffers();
else
glFlush();
} else if (name == "glXMakeCurrent" ||
name == "wglMakeCurrent") {
glFlush();
if (!double_buffer) {
frame_complete();
}
} else {
continue;
}
}
if (name == "glFlush") {
glFlush();
if (!double_buffer) {
frame_complete();
}
}
retrace::retrace_call(*call);
if (!insideGlBeginEnd && call->no >= dump_state) {
state_dump(std::cout);
exit(0);
}
delete call;
}
// Reached the end of trace
glFlush();
long long endTime = OS::GetTime();
float timeInterval = (endTime - startTime) * 1.0E-6;
if (retrace::verbosity >= -1) {
std::cout <<
"Rendered " << frame << " frames"
" in " << timeInterval << " secs,"
" average of " << (frame/timeInterval) << " fps\n";
}
if (wait) {
while (ws->processEvents()) {}
} else {
exit(0);
}
}
开发者ID:bgirard,项目名称:apitrace,代码行数:67,代码来源:glretrace_main.cpp
注:本文中的trace::Parser类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论