diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DPF-Prymula-audioplugins/dpf/dgl/src/pugl-extra/haiku_gl.cpp	Mon Oct 16 21:53:34 2023 +0200
@@ -0,0 +1,87 @@
+// Copyright 2012-2022 David Robillard <d@drobilla.net>
+// Copyright 2021-2022 Filipe Coelho <falktx@falktx.com>
+// SPDX-License-Identifier: ISC
+
+#include "../pugl-upstream/src/stub.h"
+#include "haiku.h"
+
+#include "pugl/pugl.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <GL/gl.h>
+#include <opengl/GLView.h>
+
+typedef struct {
+  BGLView* view;
+} PuglHaikuGlSurface;
+
+static PuglStatus
+puglHaikuGlConfigure(PuglView* view)
+{
+  PuglInternals* const impl = view->impl;
+
+  PuglHaikuGlSurface* const surface =
+    (PuglHaikuGlSurface*)calloc(1, sizeof(PuglHaikuGlSurface));
+  impl->surface = surface;
+
+  return PUGL_SUCCESS;
+}
+
+PUGL_WARN_UNUSED_RESULT
+static PuglStatus
+puglHaikuGlEnter(PuglView* const view, const PuglExposeEvent* PUGL_UNUSED(expose))
+{
+  PuglHaikuGlSurface* const surface = (PuglHaikuGlSurface*)view->impl->surface;
+  if (!surface || !surface->view) {
+    return PUGL_FAILURE;
+  }
+
+  surface->view->LockGL();
+  return PUGL_SUCCESS;
+}
+
+PUGL_WARN_UNUSED_RESULT
+static PuglStatus
+puglHaikuGlLeave(PuglView* const view, const PuglExposeEvent* const expose)
+{
+  PuglHaikuGlSurface* const surface = (PuglHaikuGlSurface*)view->impl->surface;
+  if (!surface || !surface->view) {
+    return PUGL_FAILURE;
+  }
+
+  if (expose)
+      surface->view->SwapBuffers();
+
+  surface->view->UnlockGL();
+  return PUGL_SUCCESS;
+}
+
+static PuglStatus
+puglHaikuGlCreate(PuglView* view)
+{
+  return PUGL_SUCCESS;
+}
+
+static void
+puglHaikuGlDestroy(PuglView* view)
+{
+  PuglHaikuGlSurface* surface = (PuglHaikuGlSurface*)view->impl->surface;
+  if (surface) {
+    free(surface);
+    view->impl->surface = NULL;
+  }
+}
+
+const PuglBackend*
+puglGlBackend(void)
+{
+  static const PuglBackend backend = {puglHaikuGlConfigure,
+                                      puglHaikuGlCreate,
+                                      puglHaikuGlDestroy,
+                                      puglHaikuGlEnter,
+                                      puglHaikuGlLeave,
+                                      puglStubGetContext};
+  return &backend;
+}