• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Stellarium / stellarium / 5770622832

pending completion
5770622832

Pull #3348

github

gzotti
Fixed a logic error introduced by previous edit.
Pull Request #3348: Fix: orbit details

58 of 58 new or added lines in 5 files covered. (100.0%)

14813 of 124420 relevant lines covered (11.91%)

27935.46 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/core/StelApp.hpp
1
/*
2
 * Stellarium
3
 * Copyright (C) 2006 Fabien Chereau
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA  02110-1335, USA.
18
 */
19

20
#ifndef STELAPP_HPP
21
#define STELAPP_HPP
22

23
#include <memory>
24
#include <qopengl.h>
25
#include <qguiapplication.h>
26
#include <QString>
27
#include <QObject>
28
#include <QRandomGenerator>
29
#include "StelTextureTypes.hpp"
30
#include "StelModule.hpp"
31
#include "VecMath.hpp"
32

33
// Predeclaration of some classes
34
class StelCore;
35
class StelTextureMgr;
36
class StelObjectMgr;
37
class StelLocaleMgr;
38
class StelModuleMgr;
39
class StelMainView;
40
class StelSkyCultureMgr;
41
class StelViewportEffect;
42
class QOpenGLFramebufferObject;
43
class QOpenGLVertexArrayObject;
44
class QOpenGLShaderProgram;
45
class QOpenGLBuffer;
46
class QOpenGLFunctions;
47
class QSettings;
48
class QNetworkAccessManager;
49
class QNetworkReply;
50
class QTimer;
51
class StelLocationMgr;
52
class StelSkyLayerMgr;
53
class StelAudioMgr;
54
class StelVideoMgr;
55
class StelGuiBase;
56
class StelMainScriptAPIProxy;
57
class StelScriptMgr;
58
class StelActionMgr;
59
class StelPropertyMgr;
60
class StelProgressController;
61

62
#ifdef         ENABLE_SPOUT
63
class SpoutSender;
64
#endif
65

66
//! @class StelApp
67
//! Singleton main Stellarium application class.
68
//! This is the central class of Stellarium.  Only one singleton instance of
69
//! this class is created and can be accessed from anywhere else.  This class
70
//! is the access point to several "Manager" class which provide application-wide
71
//! services for management of font, textures, localization, sky culture, and in
72
//! theory all other services used by the other part of the program.
73
//!
74
//! The StelApp class is also the one managing the StelModule in a generic manner
75
//! by calling their update, drawing and other methods when needed.
76
//! @author Fabien Chereau
77
class StelApp : public QObject
78
{
79
        Q_OBJECT
80
        Q_PROPERTY(bool nightMode READ getVisionModeNight WRITE setVisionModeNight NOTIFY visionNightModeChanged)
81
        Q_PROPERTY(bool flagShowDecimalDegrees  READ getFlagShowDecimalDegrees  WRITE setFlagShowDecimalDegrees  NOTIFY flagShowDecimalDegreesChanged)
82
        Q_PROPERTY(bool flagUseAzimuthFromSouth READ getFlagSouthAzimuthUsage   WRITE setFlagSouthAzimuthUsage   NOTIFY flagUseAzimuthFromSouthChanged)
83
        Q_PROPERTY(bool flagUseCCSDesignation   READ getFlagUseCCSDesignation   WRITE setFlagUseCCSDesignation   NOTIFY flagUseCCSDesignationChanged)
84
        Q_PROPERTY(bool flagUseFormattingOutput READ getFlagUseFormattingOutput WRITE setFlagUseFormattingOutput NOTIFY flagUseFormattingOutputChanged)
85
        Q_PROPERTY(bool flagOverwriteInfoColor  READ getFlagOverwriteInfoColor  WRITE setFlagOverwriteInfoColor  NOTIFY flagOverwriteInfoColorChanged)
86
        Q_PROPERTY(Vec3f overwriteInfoColor        READ getOverwriteInfoColor        WRITE setOverwriteInfoColor         NOTIFY overwriteInfoColorChanged)
87
        Q_PROPERTY(Vec3f daylightInfoColor        READ getDaylightInfoColor        WRITE setDaylightInfoColor         NOTIFY daylightInfoColorChanged)
88
        Q_PROPERTY(int  screenFontSize          READ getScreenFontSize          WRITE setScreenFontSize          NOTIFY screenFontSizeChanged)
89
        Q_PROPERTY(int  guiFontSize             READ getGuiFontSize             WRITE setGuiFontSize             NOTIFY guiFontSizeChanged)
90
        Q_PROPERTY(bool flagImmediateSave       READ getFlagImmediateSave       WRITE setFlagImmediateSave       NOTIFY flagImmediateSaveChanged)
91

92
        Q_PROPERTY(QString version READ getVersion CONSTANT)
93

94
public:
95
        friend class StelAppGraphicsWidget;
96
        friend class StelMainView;
97
        friend class StelRootItem;
98

99
        //! Create and initialize the main Stellarium application.
100
        //! @param parent the QObject parent
101
        //! The configFile will be searched for in the search path by the StelFileMgr,
102
        //! it is therefore possible to specify either just a file name or path within the
103
        //! search path, or use a full path or even a relative path to an existing file
104
        StelApp(StelMainView* parent);
105

106
        //! Deinitialize and destroy the main Stellarium application.
107
        virtual ~StelApp() Q_DECL_OVERRIDE;
108

109
        //! Initialize core and all the modules.
110
        void init(QSettings* conf);
111
        //! Deinitialize core and all the modules.
112
        void deinit();
113

114
        //! Load and initialize external modules (plugins)
115
        void initPlugIns();
116

117
        //! Registers all loaded StelModules with the ScriptMgr, and queues starting of the startup script.
118
        void initScriptMgr();
119

120
        //! Returns all arguments passed on the command line, together with the contents of the STEL_OPTS environment variable.
121
        //! You can use the CLIProcessor class to help parse it.
122
        //! @return the arguments passed to Stellarium on the command line concatenated with the STEL_OPTS environment variable
123
        static QStringList getCommandlineArguments();
124

125
        //! Get the StelApp singleton instance.
126
        //! @return the StelApp singleton instance
127
        static StelApp& getInstance() {Q_ASSERT(singleton); return *singleton;}
×
128

129
        //! Get the module manager to use for accessing any module loaded in the application.
130
        //! @return the module manager.
131
        StelModuleMgr& getModuleMgr() const {return *moduleMgr;}
×
132

133
        //! Get the corresponding module or Q_NULLPTR if can't find it.
134
        //! This is a shortcut for getModleMgr().getModule().
135
        //! @return the module pointer.
136
        StelModule* getModule(const QString& moduleID) const;
137

138
        //! Get the locale manager to use for i18n & date/time localization.
139
        //! @return the font manager to use for loading fonts.
140
        StelLocaleMgr& getLocaleMgr() const {return *localeMgr;}
×
141

142
        //! Get the sky cultures manager.
143
        //! @return the sky cultures manager
144
        StelSkyCultureMgr& getSkyCultureMgr() const {return *skyCultureMgr;}
×
145

146
        //! Get the texture manager to use for loading textures.
147
        //! @return the texture manager to use for loading textures.
148
        StelTextureMgr& getTextureManager() const {return *textureMgr;}
×
149

150
        //! Get the Location manager to use for managing stored locations
151
        //! @return the Location manager to use for managing stored locations
152
        StelLocationMgr& getLocationMgr() const {return *planetLocationMgr;}
×
153

154
        //! Get the StelObject manager to use for querying from all stellarium objects.
155
        //! @return the StelObject manager to use for querying from all stellarium objects         .
156
        StelObjectMgr& getStelObjectMgr() const {return *stelObjectMgr;}
×
157

158
        StelSkyLayerMgr& getSkyImageMgr() const {return *skyImageMgr;}
159

160
        //! Get the audio manager
161
        StelAudioMgr* getStelAudioMgr() const {return audioMgr;}
×
162

163
        //! Get the actions manager to use for managing and editing actions
164
        StelActionMgr* getStelActionManager() const {return actionMgr;}
×
165

166
        //! Return the property manager
167
        StelPropertyMgr* getStelPropertyManager() const {return propMgr;}
×
168

169
        //! Get the video manager
170
        StelVideoMgr* getStelVideoMgr() const {return videoMgr;}
×
171

172
        //! Get the core of the program.
173
        //! It is the one which provide the projection, navigation and tone converter.
174
        //! @return the StelCore instance of the program
175
        StelCore* getCore() const {return core;}
×
176

177
        //! get a pseudo-random integer
178
        quint32 getRand() const {Q_ASSERT(randomGenerator); return randomGenerator->generate();}
179
        int getRandBounded(int lowest, int highest) const {Q_ASSERT(randomGenerator); return randomGenerator->bounded(lowest, highest);}
×
180
        //! shortcut to retrieve a random float [0...1).
181
        float getRandF() const {Q_ASSERT(randomGenerator); return static_cast<float>(randomGenerator->generateDouble());}
×
182
        float getRandFp1() const {Q_ASSERT(randomGenerator); return static_cast<float>(randomGenerator->generate()) / (static_cast<float>(RAND_MAX)+1.f);}
183

184
        //! Get the common instance of QNetworkAccessManager used in stellarium
185
        QNetworkAccessManager* getNetworkAccessManager() const {return networkAccessManager;}
×
186

187
        //! Update translations, font for GUI and sky everywhere in the program.
188
        void updateI18n();
189

190
        //! Return the main configuration options
191
        QSettings* getSettings() const {return confSettings;}
×
192

193
        //! Return the currently used style
194
        const QString getCurrentStelStyle() const {
×
195
                if (qApp->property("onetime_custom_css").isValid())
×
196
                        return qApp->property("onetime_custom_css").toString();
×
197
                else
198
                        return "default";
×
199
        }
200

201
        //! Update all object according to the deltaTime in seconds.
202
        void update(double deltaTime);
203

204
        //! Draw all registered StelModule in the order defined by the order lists.
205
        // 2014-11: OLD COMMENT? What does a void return?
206
        // @return the max squared distance in pixels that any object has travelled since the last update.
207
        void draw();
208

209
        //! Get the ratio between real device pixel and "Device Independent Pixel".
210
        //! Usually this value is 1, but for a mac with retina screen this will be value 2.
211
        qreal getDevicePixelsPerPixel() const {return devicePixelsPerPixel;}
×
212
        void setDevicePixelsPerPixel(qreal dppp);
213
        
214
        //! Get the scaling ratio to apply on all display elements, like GUI, text etc..
215
        //! When this ratio is 1, all pixel sizes used in Stellarium will look OK on a regular
216
        //! computer screen with 96 pixel per inch (reference for tuning sizes).
217
        float getGlobalScalingRatio() const {return globalScalingRatio;}
×
218
        void setGlobalScalingRatio(float r) {globalScalingRatio=r;}
219

220
        //! Get the fontsize used for screen text.
221
        int getScreenFontSize() const { return screenFontSize; }
×
222
        //! Change screen font size.
223
        void setScreenFontSize(int s);
224
        //! Get the principal font size used for GUI panels.
225
        int getGuiFontSize() const;
226
        //! change GUI font size.
227
        void setGuiFontSize(int s);
228

229
        //! Get the GUI instance implementing the abstract GUI interface.
230
        StelGuiBase* getGui() const {return stelGui;}
×
231
        //! Tell the StelApp instance which GUI is currently being used.
232
        //! The caller is responsible for destroying the GUI.
233
        void setGui(StelGuiBase* b) {stelGui=b;}
×
234

235
#ifdef ENABLE_SCRIPTING
236
        //! Get the script API proxy (for signal handling)
237
        StelMainScriptAPIProxy* getMainScriptAPIProxy() const {return scriptAPIProxy;}
×
238
        //! Get the script manager
239
        StelScriptMgr& getScriptMgr() const {return *scriptMgr;}
×
240
#endif
241

242
        static void initStatic();
243
        static void deinitStatic();
244

245
        //! Allow immediate storing of config.ini entries.
246
        //! Storing only takes place if property StelApp.flagImmediateSave is set.
247
        static void immediateSave(const QString &key, const QVariant &value);
248

249
        //! Add a progression indicator to the GUI (if applicable).
250
        //! @return a controller which can be used to indicate the current status.
251
        //! The StelApp instance remains the owner of the controller.
252
        StelProgressController* addProgressBar();
253
        void removeProgressBar(StelProgressController* p);
254

255
        //! Define the type of viewport effect to use
256
        //! @param effectName must be one of 'none', 'framebufferOnly', 'sphericMirrorDistorter'
257
        void setViewportEffect(const QString& effectName);
258
        //! Get the type of viewport effect currently used
259
        QString getViewportEffect() const;
260

261
        //! Dump diagnostics about action call priorities
262
        void dumpModuleActionPriorities(StelModule::StelModuleActionName actionName) const;
263
        
264
        ///////////////////////////////////////////////////////////////////////////
265
        // Scriptable methods
266
public slots:
267
        //! Call this when the size of the GL window has changed.
268
        void glWindowHasBeenResized(const QRectF &rect);
269

270
        //! Set flag for activating night vision mode.
271
        void setVisionModeNight(bool);
272
        //! Get flag for activating night vision mode.
273
        bool getVisionModeNight() const {return flagNightVision;}
×
274

275
        //! Set flag for activating overwrite mode for text color in info panel.
276
        void setFlagOverwriteInfoColor(bool);
277
        //! Get flag for activating overwrite mode for text color in info panel.
278
        bool getFlagOverwriteInfoColor() const {return flagOverwriteInfoColor; }
×
279

280
        //! Set flag for showing decimal degree in various places.
281
        void setFlagShowDecimalDegrees(bool b);
282
        //! Get flag for showing decimal degree in various places.
283
        bool getFlagShowDecimalDegrees() const {return flagShowDecimalDegrees;}
×
284

285
        //! Set flag for using calculation of azimuth from south towards west (instead north towards east)
286
        bool getFlagSouthAzimuthUsage() const { return flagUseAzimuthFromSouth; }
×
287
        //! Get flag for using calculation of azimuth from south towards west (instead north towards east)
288
        void setFlagSouthAzimuthUsage(bool use) { flagUseAzimuthFromSouth=use; emit flagUseAzimuthFromSouthChanged(use);}
×
289
        
290
        //! Set flag for using of formatting output for coordinates
291
        void setFlagUseFormattingOutput(bool b);
292
        //! Get flag for using of formatting output for coordinates
293
        bool getFlagUseFormattingOutput() const {return flagUseFormattingOutput;}
×
294

295
        //! Set flag for using designations for celestial coordinate systems
296
        void setFlagUseCCSDesignation(bool b);
297
        //! Get flag for using designations for celestial coordinate systems
298
        bool getFlagUseCCSDesignation() const {return flagUseCCSDesignation;}
×
299

300
        //! Define info text color for overwrites
301
        void setOverwriteInfoColor(const Vec3f& color);
302
        //! Get info text color
303
        Vec3f getOverwriteInfoColor() const;
304

305
        //! Define info text color for daylight mode
306
        void setDaylightInfoColor(const Vec3f& color);
307
        //! Get info text color
308
        Vec3f getDaylightInfoColor() const;
309

310
        //! Set flag for storing some settings immediately
311
        void setFlagImmediateSave(bool b);
312
        //! Get flag about storing some settings immediately
313
        bool getFlagImmediateSave() const {return flagImmediateSave;}
×
314

315
        //! Get the current number of frame per second.
316
        //! @return the FPS averaged on the last second
317
        float getFps() const {return fps;}
×
318

319
        //! Set global application font.
320
        //! To retrieve, you can use QGuiApplication::font().
321
        //! emits fontChanged(font)
322
        void setAppFont(QFont font);
323

324
        //! Returns the default FBO handle, to be used when StelModule instances want to release their own FBOs.
325
        //! Note that this is usually not the same as QOpenGLContext::defaultFramebufferObject(),
326
        //! so use this call instead of the Qt version!
327
        //! Valid through a StelModule::draw() call, do not use elsewhere.
328
        quint32 getDefaultFBO() const { return currentFbo; }
×
329

330
        //! Makes sure the correct GL context used for main drawing is made current.
331
        //! This is always the case during init() and draw() calls, but if OpenGL access is required elsewhere,
332
        //! this MUST be called before using any GL functions.
333
        void ensureGLContextCurrent();
334

335
        //! Return the time since when stellarium is running in second.
336
        static double getTotalRunTime();
337

338
        //! Return the scaled time for animated objects
339
        static double getAnimationTime();
340

341
        //! Report that a download occurred. This is used for statistics purposes.
342
        //! Connect this slot to QNetworkAccessManager::finished() slot to obtain statistics at the end of the program.
343
        void reportFileDownloadFinished(QNetworkReply* reply);
344

345
        //! do some cleanup and call QCoreApplication::exit(0)
346
        void quit();
347
signals:
348
        void visionNightModeChanged(bool);
349
        void flagShowDecimalDegreesChanged(bool);
350
        void flagUseAzimuthFromSouthChanged(bool);
351
        void flagUseCCSDesignationChanged(bool);
352
        void flagUseFormattingOutputChanged(bool);
353
        void flagOverwriteInfoColorChanged(bool);
354
        void colorSchemeChanged(const QString&);
355
        void languageChanged();
356
        void screenFontSizeChanged(int);
357
        void guiFontSizeChanged(int);
358
        void fontChanged(QFont);
359
        void overwriteInfoColorChanged(const Vec3f & color);
360
        void daylightInfoColorChanged(const Vec3f & color);
361
        void flagImmediateSaveChanged(bool);
362

363
        //! Called just after a progress bar is added.
364
        void progressBarAdded(const StelProgressController*);
365
        //! Called just before a progress bar is removed.
366
        void progressBarRemoved(const StelProgressController*);
367
        //! Called just before we exit Qt mainloop.
368
        void aboutToQuit();
369

370
private:
371
        //! Handle mouse clics.
372
        void handleClick(class QMouseEvent* event);
373
        //! Handle mouse wheel.
374
        void handleWheel(class QWheelEvent* event);
375
        //! Handle mouse move.
376
        bool handleMove(qreal x, qreal y, Qt::MouseButtons b);
377
        //! Handle key press and release.
378
        void handleKeys(class QKeyEvent* event);
379
        //! Handle pinch on multi touch devices.
380
        void handlePinch(qreal scale, bool started);
381

382
        //! Used internally to set the viewport effects.
383
        void prepareRenderBuffer();
384
        //! Used internally to set the viewport effects.
385
        //! @param drawFbo the OpenGL fbo we need to render into.
386
        void applyRenderBuffer(quint32 drawFbo=0);
387

388
        void setupPostProcessor();
389
        void highGraphicsModeDraw();
390

391
        QString getVersion() const;
392

393
        // The StelApp singleton
394
        static StelApp* singleton;
395

396
        //! The app-global random number generator
397
        QRandomGenerator *randomGenerator;
398

399
        //! The main window which is the parent of this object
400
        StelMainView* mainWin;
401

402
        // The associated StelCore instance
403
        StelCore* core;
404

405
        // Module manager for the application
406
        StelModuleMgr* moduleMgr;
407

408
        // Locale manager for the application
409
        StelLocaleMgr* localeMgr;
410

411
        // Sky cultures manager for the application
412
        StelSkyCultureMgr* skyCultureMgr;
413

414
        //Actions manager for the application.  Will replace shortcutMgr.
415
        StelActionMgr* actionMgr;
416

417
        //Property manager for the application
418
        StelPropertyMgr* propMgr;
419

420
        // Textures manager for the application
421
        StelTextureMgr* textureMgr;
422

423
        // Manager for all the StelObjects of the program
424
        StelObjectMgr* stelObjectMgr;
425

426
        // Manager for the list of observer locations on planets
427
        StelLocationMgr* planetLocationMgr;
428

429
        // Main network manager used for the program
430
        QNetworkAccessManager* networkAccessManager;
431

432
        //! Get proxy settings from config file... if not set use http_proxy env var
433
        void setupNetworkProxy();
434

435
        // The audio manager.  Must execute in the main thread.
436
        StelAudioMgr* audioMgr;
437

438
        // The video manager.  Must execute in the main thread.
439
        StelVideoMgr* videoMgr;
440

441
        StelSkyLayerMgr* skyImageMgr;
442

443
#ifdef ENABLE_SCRIPTING
444
        // The script API proxy object (for bridging threads)
445
        StelMainScriptAPIProxy* scriptAPIProxy;
446

447
        // The script manager based on Qt script engine
448
        StelScriptMgr* scriptMgr;
449
#endif
450

451
        StelGuiBase* stelGui;
452
        
453
        // Store the ratio between real device pixel in "Device Independent Pixel"
454
        // Usually this value is 1, but for a mac with retina screen this will be value 2.
455
        qreal devicePixelsPerPixel;
456

457
        // The scaling ratio to apply on all display elements, like GUI, text etc..
458
        float globalScalingRatio;
459
        
460
        float fps;
461
        int frame;
462
        double frameTimeAccum;                // Used for fps counter
463

464
        //! Define whether we are in night vision mode
465
        bool flagNightVision;
466

467
        QSettings* confSettings;
468

469
        // Define whether the StelApp instance has completed initialization
470
        bool initialized;
471

472
        static qint64 startMSecs;
473
        static double animationScale;
474

475
        // Temporary variables used to store the last gl window resize
476
        // if the core was not yet initialized
477
        qreal saveProjW;
478
        qreal saveProjH;
479

480
        //! Store the number of downloaded files for statistics.
481
        int nbDownloadedFiles;
482
        //! Store the summed size of all downloaded files in bytes.
483
        qint64 totalDownloadedSize;
484

485
        //! Store the number of downloaded files read from the cache for statistics.
486
        int nbUsedCache;
487
        //! Store the summed size of all downloaded files read from the cache in bytes.
488
        qint64 totalUsedCacheSize;
489

490
        QList<StelProgressController*> progressControllers;
491

492
        int screenFontSize;
493
        int numMultiSamples = 1;
494

495
        // Framebuffer object used for viewport effects.
496
        QOpenGLFramebufferObject* renderBuffer;
497
        std::unique_ptr<QOpenGLBuffer> postProcessorVBO;
498
        std::unique_ptr<QOpenGLVertexArrayObject> postProcessorVAO;
499
        std::unique_ptr<QOpenGLShaderProgram> postProcessorProgram;
500
        std::unique_ptr<QOpenGLShaderProgram> postProcessorProgramMS; // multisampled
501
        std::unique_ptr<QOpenGLFramebufferObject> sceneFBO;
502
        GLuint sceneMultisampledFBO = 0;
503
        GLuint sceneMultisampledTex = 0;
504
        GLuint sceneMultisampledRenderbuffer = 0;
505
        StelTextureSP ditherPatternTex;
506
        struct PostProcessorUniformLocations
507
        {
508
                int tex;
509
                int ditherPattern;
510
                int rgbMaxValue;
511
        } postProcessorUniformLocations;
512
        struct PostProcessorUniformLocationsMS
513
        {
514
                int tex;
515
                int ditherPattern;
516
                int rgbMaxValue;
517
                int numMultiSamples;
518
        } postProcessorUniformLocationsMS;
519
        StelViewportEffect* viewportEffect;
520
        QOpenGLFunctions* gl;
521
        
522
        bool flagShowDecimalDegrees;  // Format infotext with decimal degrees, not minutes/seconds
523
        bool flagUseAzimuthFromSouth; // Display calculate azimuth from south towards west (as in some astronomical literature)
524
        bool flagUseFormattingOutput; // Use tabular coordinate format for infotext
525
        bool flagUseCCSDesignation;   // Use symbols like alpha (RA), delta (declination) for coordinate system labels
526
        bool flagOverwriteInfoColor; // Overwrite and use color for text in info panel
527
        Vec3f overwriteInfoColor;
528
        Vec3f daylightInfoColor;
529
        bool flagImmediateSave;       // set true to allow more immediate-mode settings. For now this is limited to detail settings, e.g. orbit or nomenclature details, DSO filter types, ...
530
#ifdef         ENABLE_SPOUT
531
        SpoutSender* spoutSender;
532
#endif
533

534
        // The current main FBO/render target handle, without requiring GL queries. Valid through a draw() call
535
        quint32 currentFbo;
536
};
537

538
#endif // STELAPP_HPP
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc