QWT API (中文) 7.3.0
Qt绘图库 - 中文API文档
载入中...
搜索中...
未找到
qwt3d_openglhelper.h
1#ifndef QWT3D_OPENGLHELPER_H
2#define QWT3D_OPENGLHELPER_H
3
4#include "qglobal.h"
5
6#ifdef __APPLE__
7#include <OpenGL/glu.h>
8#else
9#ifdef Q_OS_WIN
10#include "windows.h"
11#endif
12#include <GL/glu.h>
13#endif
14
15namespace Qwt3D
16{
17
18#ifndef QWT3D_NOT_FOR_DOXYGEN
19
26{
27public:
28 GLStateBewarer(GLenum what, bool on, bool persist = false)
29 {
30 state_ = what;
31 stateval_ = glIsEnabled(what);
32 if (on)
33 turnOn(persist);
34 else
35 turnOff(persist);
36 }
37
39 {
40 if (stateval_)
41 glEnable(state_);
42 else
43 glDisable(state_);
44 }
45
46 void turnOn(bool persist = false)
47 {
48 glEnable(state_);
49 if (persist)
50 stateval_ = true;
51 }
52
53 void turnOff(bool persist = false)
54 {
55 glDisable(state_);
56 if (persist)
57 stateval_ = false;
58 }
59
60private:
61 GLenum state_;
62 bool stateval_;
63};
64
65// Returns OpenGL error string if an error occurred
66inline const GLubyte* gl_error()
67{
68 GLenum errcode;
69 const GLubyte* err = nullptr;
70
71 if ((errcode = glGetError()) != GL_NO_ERROR) {
72 err = gluErrorString(errcode);
73 }
74 return err;
75}
76
77// Safely deletes OpenGL display lists
78inline void SaveGlDeleteLists(GLuint& lstidx, GLsizei range)
79{
80 if (glIsList(lstidx))
81 glDeleteLists(lstidx, range);
82 lstidx = 0;
83}
84
89inline void getMatrices(GLdouble* modelMatrix, GLdouble* projMatrix, GLint* viewport)
90{
91 glGetIntegerv(GL_VIEWPORT, viewport);
92 glGetDoublev(GL_MODELVIEW_MATRIX, modelMatrix);
93 glGetDoublev(GL_PROJECTION_MATRIX, projMatrix);
94}
95
100inline bool ViewPort2World(double& objx, double& objy, double& objz, double winx, double winy, double winz)
101{
102 GLdouble modelMatrix[ 16 ];
103 GLdouble projMatrix[ 16 ];
104 GLint viewport[ 4 ];
105
106 getMatrices(modelMatrix, projMatrix, viewport);
107 int res = gluUnProject(winx, winy, winz, modelMatrix, projMatrix, viewport, &objx, &objy, &objz);
108
109 return (res == GL_FALSE) ? false : true;
110}
111
116inline bool World2ViewPort(double& winx, double& winy, double& winz, double objx, double objy, double objz)
117{
118 GLdouble modelMatrix[ 16 ];
119 GLdouble projMatrix[ 16 ];
120 GLint viewport[ 4 ];
121
122 getMatrices(modelMatrix, projMatrix, viewport);
123 int res = gluProject(objx, objy, objz, modelMatrix, projMatrix, viewport, &winx, &winy, &winz);
124
125 return (res == GL_FALSE) ? false : true;
126}
127
128#endif // QWT3D_NOT_FOR_DOXYGEN
129
130} // ns
131
132#endif // QWT3D_OPENGLHELPER_H
Helper class for managing OpenGL state enable/disable
Definition qwt3d_openglhelper.h:26