Easy3D 2.6.1
Loading...
Searching...
No Matches
opengl_util.h
1/********************************************************************
2 * Copyright (C) 2015 Liangliang Nan <liangliang.nan@gmail.com>
3 * https://3d.bk.tudelft.nl/liangliang/
4 *
5 * This file is part of Easy3D. If it is useful in your research/work,
6 * I would be grateful if you show your appreciation by citing it:
7 * ------------------------------------------------------------------
8 * Liangliang Nan.
9 * Easy3D: a lightweight, easy-to-use, and efficient C++ library
10 * for processing and rendering 3D data.
11 * Journal of Open Source Software, 6(64), 3255, 2021.
12 * ------------------------------------------------------------------
13 *
14 * Easy3D is free software; you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License Version 3
16 * as published by the Free Software Foundation.
17 *
18 * Easy3D is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
22 *
23 * You should have received a copy of the GNU General Public License
24 * along with this program. If not, see <http://www.gnu.org/licenses/>.
25 ********************************************************************/
26
27#ifndef EASY3D_RENDERER_OPENGL_UTIL_H
28#define EASY3D_RENDERER_OPENGL_UTIL_H
29
30#include <string>
31#include <iostream>
32#include <unordered_map>
33
34
35namespace easy3d {
36
41 class OpenglUtil {
42 public:
47 static bool init();
52 static bool is_initialized();
53
54 // -------------- general information --------------
55
60 static int gl_profile();
61
67 static bool is_supported(const std::string &name); // e.g., "GL_VERSION_3_2", "GL_ARB_vertex_array_object"
73 static bool has_extension(const std::string &name); // e.g., "GL_EXT_framebuffer_object"
78 static std::string glew_version();
83 static std::string gl_vendor();
88 static std::string gl_renderer();
93 static std::string gl_version();
98 static std::string gl_extensions();
103 static std::string glsl_version();
108 static int gl_major_version();
113 static int gl_minor_version();
118 static float glew_version_number();
123 static float gl_version_number();
128 static float glsl_version_number();
133 static int samples();
134
142 static void viewport(int &x, int &y, int &width, int &height);
143
144 // ----------------- GPU memory -------------------
145
151 static int total_gpu_memory();
156 static int available_gpu_memory();
157
158 // ----------------- print information -------------------
159
164 static void set_output(std::ostream *out);
165
166 // --------------- buffer information ----------------
167
171 static void get_current_buffer_info();
172
178 static void get_buffer_info(unsigned int target, int bufferName);
179
180 // --------------- GLSL information (GLSL version 4.2 is supported )----------------
181
186 static void get_vao_info(unsigned int buffer);
187
192 static void get_program_info(unsigned int program);
193
198 static void get_attributes_info(unsigned int program);
199
204 static void get_uniforms_info(unsigned int program);
205
211 static void get_uniform_info(unsigned int program, const std::string &uniName);
212
219 static void
220 get_uniform_in_block_info(unsigned int program, const std::string &blockName, const std::string &uniName);
221
222 private:
224 static void _add_message(std::string format, ...);
225
226 static bool _init();
227
228 static int _get_rows(unsigned int type);
229
230 static int _get_columns(unsigned int type);
231
232 static void _display_uniformf(float *f, int rows, int columns);
233
234 static void _display_uniformi(int *f, int rows, int columns);
235
236 static void _display_uniformui(unsigned int *f, int rows, int columns);
237
238 static void _display_uniformd(double *f, int rows, int columns);
239
240 static int _get_uniform_byte_size(int size, int uniType, int arrayStride, int matStride);
241
242 enum Types {
243 DONT_KNOW, INT, UNSIGNED_INT, FLOAT, DOUBLE
244 };
245
246 static Types _get_type(unsigned int type);
247
248 private:
249 static bool _glew_initialized;
250
251 static bool _spInit;
252
253 static std::ostream *_output_stream;
254
255 static std::unordered_map<int, std::string> spBufferAccess;
256 static std::unordered_map<int, std::string> spBufferUsage;
257 static std::unordered_map<int, std::string> spBufferBinding;
258 static std::unordered_map<int, int> spBufferBound;
259 static std::unordered_map<int, int> spBoundBuffer;
260 static std::unordered_map<int, std::string> spDataF;
261 static std::unordered_map<int, std::string> spGLSLType;
262 static std::unordered_map<int, int> spGLSLTypeSize;
263 static std::unordered_map<int, std::string> spShaderType;
264 static std::unordered_map<int, std::string> spTransFeedBufferMode;
265 static std::unordered_map<int, std::string> spGLSLPrimitives;
266 static std::unordered_map<int, std::string> spTessGenSpacing;
267 static std::unordered_map<int, std::string> spVertexOrder;
268 };
269
270}
271
272#endif // EASY3D_RENDERER_OPENGL_UTIL_H
273
274
Utilities for OpenGL initialization and states query.
Definition opengl_util.h:41
static bool has_extension(const std::string &name)
Check if a specific OpenGL extension is available.
Definition opengl_util.cpp:78
static std::string gl_extensions()
Get the OpenGL extensions.
Definition opengl_util.cpp:134
static void get_uniform_in_block_info(unsigned int program, const std::string &blockName, const std::string &uniName)
Get the values for a uniform in a named block.
Definition opengl_util.cpp:590
static std::string glsl_version()
Get the GLSL version.
Definition opengl_util.cpp:153
static float gl_version_number()
Get the OpenGL version number.
Definition opengl_util.cpp:190
static void get_vao_info(unsigned int buffer)
Get VAO information, including its attributes.
Definition opengl_util.cpp:351
static int gl_minor_version()
Get the minor version of OpenGL.
Definition opengl_util.cpp:169
static int samples()
Get the number of samples.
Definition opengl_util.cpp:215
static std::string gl_vendor()
Get the OpenGL vendor.
Definition opengl_util.cpp:108
static void set_output(std::ostream *out)
Set the output stream for the messages.
Definition opengl_util.cpp:260
static void get_uniform_info(unsigned int program, const std::string &uniName)
Get a uniform's value(s).
Definition opengl_util.cpp:543
static int total_gpu_memory()
Get the total GPU memory.
Definition opengl_util.cpp:232
static bool is_supported(const std::string &name)
Check if a specific OpenGL feature is supported.
Definition opengl_util.cpp:71
static std::string gl_version()
Get the OpenGL version.
Definition opengl_util.cpp:126
static float glew_version_number()
Get the GLEW version number.
Definition opengl_util.cpp:176
static void get_program_info(unsigned int program)
Get detailed info for a program.
Definition opengl_util.cpp:689
static bool is_initialized()
Check if OpenGL is initialized.
Definition opengl_util.cpp:66
static std::string gl_renderer()
Get the OpenGL renderer.
Definition opengl_util.cpp:117
static float glsl_version_number()
Get the GLSL version number.
Definition opengl_util.cpp:208
static int gl_major_version()
Get the major version of OpenGL.
Definition opengl_util.cpp:162
static void viewport(int &x, int &y, int &width, int &height)
Query the OpenGL viewport. The parameters are the same as in glViewport(x, y, width,...
Definition opengl_util.cpp:222
static void get_current_buffer_info()
Get current bound buffer info.
Definition opengl_util.cpp:288
static std::string glew_version()
Get the GLEW version.
Definition opengl_util.cpp:142
static int gl_profile()
Get the OpenGL profile.
Definition opengl_util.cpp:91
static int available_gpu_memory()
Get the available GPU memory.
Definition opengl_util.cpp:245
static void get_attributes_info(unsigned int program)
Get detailed info for attributes in a program.
Definition opengl_util.cpp:660
static void get_uniforms_info(unsigned int program)
Get info for all active uniforms in a program.
Definition opengl_util.cpp:414
static bool init()
Initialize OpenGL.
Definition opengl_util.cpp:49
static void get_buffer_info(unsigned int target, int bufferName)
Get the buffer information.
Definition opengl_util.cpp:322
Functions for updating render buffers.
Definition buffer.cpp:45
Definition collider.cpp:182