Mercurial > hg > pub > prymula > com
comparison DPF-Prymula-audioplugins/dpf/dgl/src/pugl-extra/haiku_gl.cpp @ 3:84e66ea83026
DPF-Prymula-audioplugins-0.231015-2
author | prymula <prymula76@outlook.com> |
---|---|
date | Mon, 16 Oct 2023 21:53:34 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
2:cf2cb71d31dd | 3:84e66ea83026 |
---|---|
1 // Copyright 2012-2022 David Robillard <d@drobilla.net> | |
2 // Copyright 2021-2022 Filipe Coelho <falktx@falktx.com> | |
3 // SPDX-License-Identifier: ISC | |
4 | |
5 #include "../pugl-upstream/src/stub.h" | |
6 #include "haiku.h" | |
7 | |
8 #include "pugl/pugl.h" | |
9 | |
10 #include <stdio.h> | |
11 #include <stdlib.h> | |
12 | |
13 #include <GL/gl.h> | |
14 #include <opengl/GLView.h> | |
15 | |
16 typedef struct { | |
17 BGLView* view; | |
18 } PuglHaikuGlSurface; | |
19 | |
20 static PuglStatus | |
21 puglHaikuGlConfigure(PuglView* view) | |
22 { | |
23 PuglInternals* const impl = view->impl; | |
24 | |
25 PuglHaikuGlSurface* const surface = | |
26 (PuglHaikuGlSurface*)calloc(1, sizeof(PuglHaikuGlSurface)); | |
27 impl->surface = surface; | |
28 | |
29 return PUGL_SUCCESS; | |
30 } | |
31 | |
32 PUGL_WARN_UNUSED_RESULT | |
33 static PuglStatus | |
34 puglHaikuGlEnter(PuglView* const view, const PuglExposeEvent* PUGL_UNUSED(expose)) | |
35 { | |
36 PuglHaikuGlSurface* const surface = (PuglHaikuGlSurface*)view->impl->surface; | |
37 if (!surface || !surface->view) { | |
38 return PUGL_FAILURE; | |
39 } | |
40 | |
41 surface->view->LockGL(); | |
42 return PUGL_SUCCESS; | |
43 } | |
44 | |
45 PUGL_WARN_UNUSED_RESULT | |
46 static PuglStatus | |
47 puglHaikuGlLeave(PuglView* const view, const PuglExposeEvent* const expose) | |
48 { | |
49 PuglHaikuGlSurface* const surface = (PuglHaikuGlSurface*)view->impl->surface; | |
50 if (!surface || !surface->view) { | |
51 return PUGL_FAILURE; | |
52 } | |
53 | |
54 if (expose) | |
55 surface->view->SwapBuffers(); | |
56 | |
57 surface->view->UnlockGL(); | |
58 return PUGL_SUCCESS; | |
59 } | |
60 | |
61 static PuglStatus | |
62 puglHaikuGlCreate(PuglView* view) | |
63 { | |
64 return PUGL_SUCCESS; | |
65 } | |
66 | |
67 static void | |
68 puglHaikuGlDestroy(PuglView* view) | |
69 { | |
70 PuglHaikuGlSurface* surface = (PuglHaikuGlSurface*)view->impl->surface; | |
71 if (surface) { | |
72 free(surface); | |
73 view->impl->surface = NULL; | |
74 } | |
75 } | |
76 | |
77 const PuglBackend* | |
78 puglGlBackend(void) | |
79 { | |
80 static const PuglBackend backend = {puglHaikuGlConfigure, | |
81 puglHaikuGlCreate, | |
82 puglHaikuGlDestroy, | |
83 puglHaikuGlEnter, | |
84 puglHaikuGlLeave, | |
85 puglStubGetContext}; | |
86 return &backend; | |
87 } |