Back to Jetson Inference

Jetson Inference: jetson

docs/html/glUtility_8h_source.html

latest9.3 KB
Original Source

| | Jetson Inference

DNN Vision Library |

glUtility.h

Go to the documentation of this file.

1 /*

2 * Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved.

3 *

4 * Permission is hereby granted, free of charge, to any person obtaining a

5 * copy of this software and associated documentation files (the "Software"),

6 * to deal in the Software without restriction, including without limitation

7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,

8 * and/or sell copies of the Software, and to permit persons to whom the

9 * Software is furnished to do so, subject to the following conditions:

10 *

11 * The above copyright notice and this permission notice shall be included in

12 * all copies or substantial portions of the Software.

13 *

14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR

15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,

16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL

17 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER

18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING

19 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER

20 * DEALINGS IN THE SOFTWARE.

21 */

22

23 #ifndef __OPENGL_UTILITY_H

24 #define __OPENGL_UTILITY_H

25

26

27 #include <GL/glew.h>

28 #include <GL/glx.h>

29

30 #include <stdio.h>

31 #include "logging.h"

32

33

38 #define LOG_GL "[OpenGL] "

39

44 #define GL(x) { x; glCheckError( #x, __FILE__, __LINE__ ); }

45

50 #define GL_VERIFY(x) { x; if(glCheckError( #x, __FILE__, __LINE__ )) return false; }

51

56 #define GL_VERIFYN(x) { x; if(glCheckError( #x, __FILE__, __LINE__ )) return NULL; }

57

62 #define GL_CHECK(msg) { glCheckError(msg, __FILE__, __LINE__); }

63

68 inline bool glCheckError(const char* msg, const char* file, int line)

69 {

70 GLenum err = glGetError();

71

72if( err == GL_NO_ERROR )

73return false;

74

75const char* e = NULL;

76

77switch(err)

78 {

79case GL_INVALID_ENUM: e = "invalid enum"; break;

80case GL_INVALID_VALUE: e = "invalid value"; break;

81case GL_INVALID_OPERATION: e = "invalid operation"; break;

82case GL_STACK_OVERFLOW: e = "stack overflow"; break;

83case GL_STACK_UNDERFLOW: e = "stack underflow"; break;

84case GL_OUT_OF_MEMORY: e = "out of memory"; break;

85 #ifdef GL_TABLE_TOO_LARGE_EXT

86case GL_TABLE_TOO_LARGE_EXT: e = "table too large"; break;

87 #endif

88 #ifdef GL_TEXTURE_TOO_LARGE_EXT

89case GL_TEXTURE_TOO_LARGE_EXT: e = "texture too large"; break;

90 #endif

91default: e = "unknown error";

92 }

93

94LogError(LOG_GL "Error %i - '%s'\n", (uint)err, e);

95LogError(LOG_GL " %s::%i\n", file, line );

96LogError(LOG_GL " %s\n", msg );

97

98return true;

99 }

100

101

106 inline bool glCheckError(const char* msg)

107 {

108 GLenum err = glGetError();

109

110if( err == GL_NO_ERROR )

111return false;

112

113const char* e = NULL;

114

115switch(err)

116 {

117case GL_INVALID_ENUM: e = "invalid enum"; break;

118case GL_INVALID_VALUE: e = "invalid value"; break;

119case GL_INVALID_OPERATION: e = "invalid operation"; break;

120case GL_STACK_OVERFLOW: e = "stack overflow"; break;

121case GL_STACK_UNDERFLOW: e = "stack underflow"; break;

122case GL_OUT_OF_MEMORY: e = "out of memory"; break;

123 #ifdef GL_TABLE_TOO_LARGE_EXT

124case GL_TABLE_TOO_LARGE_EXT: e = "table too large"; break;

125 #endif

126 #ifdef GL_TEXTURE_TOO_LARGE_EXT

127case GL_TEXTURE_TOO_LARGE_EXT: e = "texture too large"; break;

128 #endif

129default: e = "unknown error";

130 }

131

132LogError(LOG_GL "%s (error %i - %s)\n", msg, (uint)err, e);

133return true;

134 }

135

136

141 inline void glPrintFreeMem()

142 {

143 GLint total_mem_kb = 0;

144 GLint cur_avail_mem_kb = 0;

145

146const GLenum GL_GPU_MEM_INFO_TOTAL_AVAILABLE_MEM_NVX = 0x9048;

147const GLenum GL_GPU_MEM_INFO_CURRENT_AVAILABLE_MEM_NVX = 0x9049;

148

149 glGetIntegerv(GL_GPU_MEM_INFO_TOTAL_AVAILABLE_MEM_NVX, &total_mem_kb);

150 glGetIntegerv(GL_GPU_MEM_INFO_CURRENT_AVAILABLE_MEM_NVX,&cur_avail_mem_kb);

151

152LogInfo(LOG_GL "GPU memory free %i / %i kb\n", cur_avail_mem_kb, total_mem_kb);

153 }

154

155

161 inline void glDrawLine( float x1, float y1, float x2, float y2, float r, float g, float b, float a=1.0f, float thickness=2.0f )

162 {

163 glLineWidth(thickness);

164 glBegin(GL_LINES);

165

166 glColor4f(r, g, b, a);

167

168 glVertex2f(x1, y1);

169 glVertex2f(x2, y2);

170

171 glEnd();

172 }

173

174

180 inline void glDrawOutline( float x, float y, float width, float height, float r, float g, float b, float a=1.0f, float thickness=2.0f )

181 {

182const float right = x + width;

183const float bottom = y + height;

184

185 glLineWidth(thickness);

186 glBegin(GL_LINE_LOOP);

187

188 glColor4f(r, g, b, a);

189

190 glVertex2f(x, y);

191 glVertex2f(right, y);

192 glVertex2f(right, bottom);

193 glVertex2f(x, bottom);

194

195 glEnd();

196 }

197

198

204 inline void glDrawRect( float x, float y, float width, float height, float r, float g, float b, float a=1.0f )

205 {

206const float right = x + width;

207const float bottom = y + height;

208

209 glBegin(GL_QUADS);

210

211 glColor4f(r, g, b, a);

212

213 glVertex2f(x, y);

214 glVertex2f(right, y);

215 glVertex2f(right, bottom);

216 glVertex2f(x, bottom);

217

218 glEnd();

219 }

220

221

222 #endif

223

LOG_GL

#define LOG_GL

OpenGL logging prefix.

Definition: glUtility.h:38

LogInfo

#define LogInfo(format, args...)

Log a printf-style info message (Log::INFO)

Definition: logging.h:168

glDrawRect

void glDrawRect(float x, float y, float width, float height, float r, float g, float b, float a=1.0f)

Render a filled rect in screen coordinates with the specified color.

Definition: glUtility.h:204

glDrawLine

void glDrawLine(float x1, float y1, float x2, float y2, float r, float g, float b, float a=1.0f, float thickness=2.0f)

Render a line in screen coordinates with the specified color.

Definition: glUtility.h:161

glDrawOutline

void glDrawOutline(float x, float y, float width, float height, float r, float g, float b, float a=1.0f, float thickness=2.0f)

Render the outline of a rect in screen coordinates with the specified color.

Definition: glUtility.h:180

uint

unsigned int uint

Definition: cudaMath.h:36

glPrintFreeMem

void glPrintFreeMem()

Print the amount of free GPU memory.

Definition: glUtility.h:141

logging.h

LogError

#define LogError(format, args...)

Log a printf-style error message (Log::ERROR)

Definition: logging.h:150

glCheckError

bool glCheckError(const char *msg, const char *file, int line)

OpenGL error-checking messsage function.

Definition: glUtility.h:68