1 | /* -*- mode: c++; c-basic-offset: 4; indent-tabs-mode: nil -*- */ |
---|
2 | /* |
---|
3 | * Copyright (C) 2004-2013 HUBzero Foundation, LLC |
---|
4 | * |
---|
5 | * Author: George A. Howlett <gah@purdue.edu> |
---|
6 | */ |
---|
7 | #include <stdio.h> |
---|
8 | #include <stdarg.h> |
---|
9 | #include <syslog.h> |
---|
10 | #include <string.h> |
---|
11 | |
---|
12 | #include <GL/glew.h> |
---|
13 | |
---|
14 | #include "nanovis.h" |
---|
15 | #include "Trace.h" |
---|
16 | |
---|
17 | #define MSG_LEN 2047 |
---|
18 | |
---|
19 | void |
---|
20 | LogMessage(int priority, const char *funcname, |
---|
21 | const char *path, int lineNum, const char* fmt, ...) |
---|
22 | { |
---|
23 | char message[MSG_LEN+1]; |
---|
24 | const char *s; |
---|
25 | int length; |
---|
26 | va_list lst; |
---|
27 | |
---|
28 | va_start(lst, fmt); |
---|
29 | s = strrchr(path, '/'); |
---|
30 | if (s == NULL) { |
---|
31 | s = path; |
---|
32 | } else { |
---|
33 | s++; |
---|
34 | } |
---|
35 | if (priority & LOG_DEBUG) { |
---|
36 | length = snprintf(message, MSG_LEN, "%s:%d(%s): ", s, lineNum, funcname); |
---|
37 | } else { |
---|
38 | length = snprintf(message, MSG_LEN, "%s:%d: ", s, lineNum); |
---|
39 | } |
---|
40 | length += vsnprintf(message + length, MSG_LEN - length, fmt, lst); |
---|
41 | message[MSG_LEN] = '\0'; |
---|
42 | |
---|
43 | syslog(priority, "%s", message); |
---|
44 | } |
---|
45 | |
---|
46 | bool |
---|
47 | CheckFBO(GLenum *status) |
---|
48 | { |
---|
49 | *status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT); |
---|
50 | return (*status == GL_FRAMEBUFFER_COMPLETE_EXT); |
---|
51 | } |
---|
52 | |
---|
53 | void |
---|
54 | PrintFBOStatus(GLenum status, const char *prefix) |
---|
55 | { |
---|
56 | #ifdef WANT_TRACE |
---|
57 | const char *mesg; |
---|
58 | |
---|
59 | switch(status) { |
---|
60 | case GL_FRAMEBUFFER_COMPLETE_EXT: |
---|
61 | mesg = "<<<< OK >>>>"; break; |
---|
62 | case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT: |
---|
63 | mesg = "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT"; break; |
---|
64 | case GL_FRAMEBUFFER_UNSUPPORTED_EXT: |
---|
65 | mesg = "GL_FRAMEBUFFER_UNSUPPORTED_EXT"; break; |
---|
66 | case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT: |
---|
67 | mesg = "GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT"; break; |
---|
68 | case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT: |
---|
69 | mesg = "GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT"; break; |
---|
70 | case GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT: |
---|
71 | mesg = "GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT"; break; |
---|
72 | case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT: |
---|
73 | mesg = "GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT"; break; |
---|
74 | case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT: |
---|
75 | mesg = "GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT"; break; |
---|
76 | default: |
---|
77 | TRACE("FB Status: %s: UNKNOWN framebuffer status %u", |
---|
78 | prefix, (unsigned int)status); |
---|
79 | return; |
---|
80 | } |
---|
81 | TRACE("FB Status: %s: %s", prefix, mesg); |
---|
82 | #endif /*WANT_TRACE*/ |
---|
83 | } |
---|
84 | |
---|
85 | bool |
---|
86 | CheckGL(const char *prefix) |
---|
87 | { |
---|
88 | GLenum status = (GLenum)glGetError(); |
---|
89 | if (status == GL_NO_ERROR) { |
---|
90 | return true; |
---|
91 | } |
---|
92 | #ifdef WANT_TRACE |
---|
93 | const char *mesg; |
---|
94 | |
---|
95 | switch(status) { |
---|
96 | case GL_INVALID_ENUM: |
---|
97 | mesg = "GL_INVALID_ENUM"; break; |
---|
98 | case GL_INVALID_VALUE: |
---|
99 | mesg = "GL_INVALID_VALUE"; break; |
---|
100 | case GL_INVALID_OPERATION: |
---|
101 | mesg = "GL_INVALID_OPERATION"; break; |
---|
102 | case GL_STACK_OVERFLOW: |
---|
103 | mesg = "GL_STACK_OVERFLOW"; break; |
---|
104 | case GL_STACK_UNDERFLOW: |
---|
105 | mesg = "GL_STACK_UNDERFLOW"; break; |
---|
106 | case GL_OUT_OF_MEMORY: |
---|
107 | mesg = "GL_OUT_OF_MEMORY"; break; |
---|
108 | case GL_INVALID_FRAMEBUFFER_OPERATION_EXT: |
---|
109 | mesg = "GL_INVALID_FRAMEBUFFER_OPERATION_EXT"; break; |
---|
110 | default: |
---|
111 | TRACE("GL Status: %s: Unknown status %d", prefix, status); |
---|
112 | return false; |
---|
113 | } |
---|
114 | TRACE("GL Status: %s: %s", prefix, mesg); |
---|
115 | #endif |
---|
116 | return false; |
---|
117 | } |
---|
118 | |
---|
119 | |
---|