25 #include <qmatrix4x4.h>
26 #include <qopengldebug.h>
27 #include <qopenglwidget.h>
29 #include <qsurfaceformat.h>
30 #include <qtextstream.h>
31 #include <qvector3d.h>
37 #define IMG(id) OLocalizator::getPicture("TYRenderWindow", (id))
40 : QOpenGLWidget(parent), _cachedViewport(nullptr, QRect())
54 QSurfaceFormat debugFormat(format());
55 debugFormat.setMajorVersion(4);
56 debugFormat.setMinorVersion(3);
57 debugFormat.setProfile(QSurfaceFormat::CompatibilityProfile);
58 debugFormat.setOptions(QSurfaceFormat::DebugContext | QSurfaceFormat::DeprecatedFunctions);
59 setFormat(debugFormat);
61 _pGLLogger =
new QOpenGLDebugLogger(context());
70 oColor.
r = oColor.
g = oColor.
b = 0.5;
88 setFocusProxy(parentWidget());
122 if (!qEnvironmentVariableIsSet(
"TYMPAN_DEBUG_OPENGL_ALL_MESSAGES"))
126 _pGLLogger->enableMessages(QOpenGLDebugMessage::AnySource, QOpenGLDebugMessage::ErrorType);
129 if (qEnvironmentVariableIsSet(
"TYMPAN_DEBUG_OPENGL_SYNC"))
131 _pGLLogger->startLogging(QOpenGLDebugLogger::SynchronousLogging);
135 _pGLLogger->startLogging(QOpenGLDebugLogger::AsynchronousLogging);
150 clock_t timeBefore = clock();
159 clock_t timeAfter = clock();
161 double timeElaspedInSec = ((double)(timeAfter - timeBefore)) / (
double)CLOCKS_PER_SEC;
165 writeOutputMsg(QString(
"FPS = %1").arg(1.0 / timeElaspedInSec, 0,
'f', 2));
175 _pActiveCamera, QRect(0, 0, width() * devicePixelRatioF(), height() * devicePixelRatioF()));
183 return point * devicePixelRatioF();
186 static inline const char* printableDebugMessageSource(QOpenGLDebugMessage::Source source)
190 case QOpenGLDebugMessage::APISource:
192 case QOpenGLDebugMessage::WindowSystemSource:
193 return "Window system";
194 case QOpenGLDebugMessage::ShaderCompilerSource:
195 return "Shader compiler";
196 case QOpenGLDebugMessage::ThirdPartySource:
197 return "Third party";
198 case QOpenGLDebugMessage::ApplicationSource:
199 return "Application";
200 case QOpenGLDebugMessage::OtherSource:
202 case QOpenGLDebugMessage::AnySource:
203 case QOpenGLDebugMessage::InvalidSource:
209 static inline const char* printableDebugMessageType(QOpenGLDebugMessage::Type messageType)
213 case QOpenGLDebugMessage::ErrorType:
215 case QOpenGLDebugMessage::DeprecatedBehaviorType:
216 return "Deprecated behavior";
217 case QOpenGLDebugMessage::UndefinedBehaviorType:
218 return "Undefined behavior";
219 case QOpenGLDebugMessage::PortabilityType:
220 return "Portability";
221 case QOpenGLDebugMessage::PerformanceType:
222 return "Performance";
223 case QOpenGLDebugMessage::MarkerType:
225 case QOpenGLDebugMessage::GroupPushType:
227 case QOpenGLDebugMessage::GroupPopType:
229 case QOpenGLDebugMessage::OtherType:
231 case QOpenGLDebugMessage::InvalidType:
232 case QOpenGLDebugMessage::AnyType:
238 static inline const char* printableDebugMessageSeverity(QOpenGLDebugMessage::Severity severity)
242 case QOpenGLDebugMessage::HighSeverity:
244 case QOpenGLDebugMessage::MediumSeverity:
246 case QOpenGLDebugMessage::LowSeverity:
248 case QOpenGLDebugMessage::NotificationSeverity:
249 return "Notification";
250 case QOpenGLDebugMessage::InvalidSeverity:
251 case QOpenGLDebugMessage::AnySeverity:
257 static const char* OGL_DEBUG_MESSAGE_FORMAT =
"OpenGL message\n"
266 QString output = QString(OGL_DEBUG_MESSAGE_FORMAT)
267 .arg(printableDebugMessageType(message.type()))
268 .arg(printableDebugMessageSource(message.source()))
269 .arg(printableDebugMessageSeverity(message.severity()))
270 .arg(message.message());
271 QTextStream(stdout) << output << Qt::endl;
void writeOutputMsg(QString msg)
Affiche un message dans la fenetre de sortie.
pour l'application Tympan (fichier header)
Classe generique pour une fenetre de modeleur (fichier header)
Contexte de rendu utilisé par les fonctions d'affichage.
@ Display
The current render is intended to be displayed on screen.
@ Default
The current render pass is for 3D elements.
association du graphic (OpenGL) au modeleur (fichier header)
void setSize(int w, int h)
void setVisibility(bool bVisible)
void setDisplayPosition(double displayPositionX, double displayPositionY)
void setColor(const OColor &oColor)
void setTextToDisplay(const QString &qsText)
void setFont(const QString &qsFontPath)
Generic class for a modeler window.
Realise le rendu VTK et le rendu OpenGL.
void addOGLElement(OGLElement *pOGLElement)
void OpenGLRender(TYRenderContext &renderContext, int x=0, int y=0)
void handleLoggedMessage(QOpenGLDebugMessage debugMessage)
virtual void initializeGL()
const TYRenderViewport & getViewport() const
OGLCamera * _pActiveCamera
TYRenderViewport _cachedViewport
virtual void resizeGL(int w, int h)
QPoint toViewport(QPoint point)
QOpenGLDebugLogger * _pGLLogger
TYOpenGLRenderer * _pRenderer
bool _viewportNeedsUpdate
void showInfos(bool state)
TYOpenGLRenderer * getRenderer()
OGLTextElement * _pOGLTextInfoLabel
TYRenderWindow(QWidget *pParent=0, const char *name=0)