]> git.sesse.net Git - nageru/blob - context.cpp
Allow symlinked frame files. Useful for testing.
[nageru] / context.cpp
1 #include <QGL>
2 #include <QOffscreenSurface>
3 #include <QOpenGLContext>
4 #include <QSurface>
5 #include <QSurfaceFormat>
6 #include <stdio.h>
7 #include <string>
8
9 QGLWidget *global_share_widget = nullptr;
10
11 using namespace std;
12
13 QSurface *create_surface()
14 {
15         QSurfaceFormat fmt;
16         fmt.setDepthBufferSize(0);
17         fmt.setStencilBufferSize(0);
18         fmt.setProfile(QSurfaceFormat::CoreProfile);
19         fmt.setMajorVersion(4);
20         fmt.setMinorVersion(5);
21         fmt.setSwapInterval(0);
22         QOffscreenSurface *surface = new QOffscreenSurface;
23         surface->setFormat(fmt);
24         surface->create();
25         if (!surface->isValid()) {
26                 fprintf(stderr, "ERROR: surface not valid!\n");
27                 exit(1);
28         }
29         return surface;
30 }
31
32 QSurface *create_surface(const QSurfaceFormat &format)
33 {
34         QOffscreenSurface *surface = new QOffscreenSurface;
35         surface->setFormat(format);
36         surface->create();
37         if (!surface->isValid()) {
38                 fprintf(stderr, "ERROR: surface not valid!\n");
39                 exit(1);
40         }
41         return surface;
42 }
43
44 QSurface *create_surface_with_same_format(const QSurface *surface)
45 {
46         return create_surface(surface->format());
47 }
48
49 QOpenGLContext *create_context(const QSurface *surface)
50 {
51         QOpenGLContext *context = new QOpenGLContext;
52         context->setShareContext(global_share_widget->context()->contextHandle());
53         context->setFormat(surface->format());
54         context->create();
55         return context;
56 }
57
58 bool make_current(QOpenGLContext *context, QSurface *surface)
59 {
60         return context->makeCurrent(surface);
61 }
62
63 void delete_context(QOpenGLContext *context)
64 {
65         delete context;
66 }