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