diff DPF-Prymula-audioplugins/dpf/dgl/OpenGL.hpp @ 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/OpenGL.hpp	Mon Oct 16 21:53:34 2023 +0200
@@ -0,0 +1,222 @@
+/*
+ * DISTRHO Plugin Framework (DPF)
+ * Copyright (C) 2012-2022 Filipe Coelho <falktx@falktx.com>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any purpose with
+ * or without fee is hereby granted, provided that the above copyright notice and this
+ * permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
+ * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
+ * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
+ * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef DGL_OPENGL_HPP_INCLUDED
+#define DGL_OPENGL_HPP_INCLUDED
+
+#include "ImageBase.hpp"
+#include "ImageBaseWidgets.hpp"
+
+#include "OpenGL-include.hpp"
+
+START_NAMESPACE_DGL
+
+// -----------------------------------------------------------------------
+
+/**
+   OpenGL Graphics context.
+ */
+struct OpenGLGraphicsContext : GraphicsContext
+{
+#ifdef DGL_USE_OPENGL3
+#endif
+};
+
+// -----------------------------------------------------------------------
+
+static inline
+ImageFormat asDISTRHOImageFormat(const GLenum format)
+{
+    switch (format)
+    {
+#ifdef DGL_USE_OPENGL3
+    case GL_RED:
+#else
+    case GL_LUMINANCE:
+#endif
+        return kImageFormatGrayscale;
+    case GL_BGR:
+        return kImageFormatBGR;
+    case GL_BGRA:
+        return kImageFormatBGRA;
+    case GL_RGB:
+        return kImageFormatRGB;
+    case GL_RGBA:
+        return kImageFormatRGBA;
+    }
+
+    return kImageFormatNull;
+}
+
+static inline
+GLenum asOpenGLImageFormat(const ImageFormat format)
+{
+    switch (format)
+    {
+    case kImageFormatNull:
+        break;
+    case kImageFormatGrayscale:
+#ifdef DGL_USE_OPENGL3
+        return GL_RED;
+#else
+        return GL_LUMINANCE;
+#endif
+    case kImageFormatBGR:
+        return GL_BGR;
+    case kImageFormatBGRA:
+        return GL_BGRA;
+    case kImageFormatRGB:
+        return GL_RGB;
+    case kImageFormatRGBA:
+        return GL_RGBA;
+    }
+
+    return 0x0;
+}
+
+// -----------------------------------------------------------------------
+
+/**
+   OpenGL Image class.
+
+   This is an Image class that handles raw image data in pixels.
+   You can init the image data on the contructor or later on by calling loadFromMemory().
+
+   To generate raw data useful for this class see the utils/png2rgba.py script.
+   Be careful when using a PNG without alpha channel, for those the format is 'GL_BGR'
+   instead of the default 'GL_BGRA'.
+
+   Images are drawn on screen via 2D textures.
+ */
+class OpenGLImage : public ImageBase
+{
+public:
+   /**
+      Constructor for a null Image.
+    */
+    OpenGLImage();
+
+   /**
+      Constructor using raw image data.
+      @note @a rawData must remain valid for the lifetime of this Image.
+    */
+    OpenGLImage(const char* rawData, uint width, uint height, ImageFormat format = kImageFormatBGRA);
+
+   /**
+      Constructor using raw image data.
+      @note @a rawData must remain valid for the lifetime of this Image.
+    */
+    OpenGLImage(const char* rawData, const Size<uint>& size, ImageFormat format = kImageFormatBGRA);
+
+   /**
+      Constructor using another image data.
+    */
+    OpenGLImage(const OpenGLImage& image);
+
+   /**
+      Destructor.
+    */
+    ~OpenGLImage() override;
+
+   /**
+      Load image data from memory.
+      @note @a rawData must remain valid for the lifetime of this Image.
+    */
+    void loadFromMemory(const char* rawData,
+                        const Size<uint>& size,
+                        ImageFormat format = kImageFormatBGRA) noexcept override;
+
+   /**
+      Draw this image at position @a pos using the graphics context @a context.
+    */
+    void drawAt(const GraphicsContext& context, const Point<int>& pos) override;
+
+   /**
+      TODO document this.
+    */
+    OpenGLImage& operator=(const OpenGLImage& image) noexcept;
+
+    // FIXME this should not be needed
+    inline void loadFromMemory(const char* rdata, uint w, uint h, ImageFormat fmt = kImageFormatBGRA)
+    { loadFromMemory(rdata, Size<uint>(w, h), fmt); }
+    inline void draw(const GraphicsContext& context)
+    { drawAt(context, Point<int>(0, 0)); }
+    inline void drawAt(const GraphicsContext& context, int x, int y)
+    { drawAt(context, Point<int>(x, y)); }
+
+   /**
+      Constructor using raw image data, specifying an OpenGL image format.
+      @note @a rawData must remain valid for the lifetime of this Image.
+      DEPRECATED This constructor uses OpenGL image format instead of DISTRHO one.
+    */
+    DISTRHO_DEPRECATED_BY("OpenGLImage(const char*, uint, uint, ImageFormat)")
+    explicit OpenGLImage(const char* rawData, uint width, uint height, GLenum glFormat);
+
+   /**
+      Constructor using raw image data, specifying an OpenGL image format.
+      @note @a rawData must remain valid for the lifetime of this Image.
+      DEPRECATED This constructor uses OpenGL image format instead of DISTRHO one.
+    */
+    DISTRHO_DEPRECATED_BY("OpenGLImage(const char*, const Size<uint>&, ImageFormat)")
+    explicit OpenGLImage(const char* rawData, const Size<uint>& size, GLenum glFormat);
+
+   /**
+      Draw this image at (0, 0) point using the current OpenGL context.
+      DEPRECATED This function does not take into consideration the current graphics context and only works in OpenGL.
+    */
+    DISTRHO_DEPRECATED_BY("draw(const GraphicsContext&)")
+    void draw();
+
+   /**
+      Draw this image at (x, y) point using the current OpenGL context.
+      DEPRECATED This function does not take into consideration the current graphics context and only works in OpenGL.
+    */
+    DISTRHO_DEPRECATED_BY("drawAt(const GraphicsContext&, int, int)")
+    void drawAt(int x, int y);
+
+   /**
+      Draw this image at position @a pos using the current OpenGL context.
+      DEPRECATED This function does not take into consideration the current graphics context and only works in OpenGL.
+    */
+    DISTRHO_DEPRECATED_BY("drawAt(const GraphicsContext&, const Point<int>&)")
+    void drawAt(const Point<int>& pos);
+
+   /**
+      Get the image type.
+      DEPRECATED Type is always assumed to be GL_UNSIGNED_BYTE.
+    */
+    DISTRHO_DEPRECATED
+    GLenum getType() const noexcept { return GL_UNSIGNED_BYTE; }
+
+private:
+    bool setupCalled;
+    bool textureInit;
+    GLuint textureId;
+};
+
+// -----------------------------------------------------------------------
+
+typedef ImageBaseAboutWindow<OpenGLImage> OpenGLImageAboutWindow;
+typedef ImageBaseButton<OpenGLImage> OpenGLImageButton;
+typedef ImageBaseKnob<OpenGLImage> OpenGLImageKnob;
+typedef ImageBaseSlider<OpenGLImage> OpenGLImageSlider;
+typedef ImageBaseSwitch<OpenGLImage> OpenGLImageSwitch;
+
+// -----------------------------------------------------------------------
+
+END_NAMESPACE_DGL
+
+#endif // DGL_OPENGL_HPP_INCLUDED