Haiku: Add in public GL kit headers
authorAlexander von Gluck IV <kallisti5@unixzen.com>
Sat, 14 Dec 2013 17:46:05 +0000 (11:46 -0600)
committerAlexander von Gluck IV <kallisti5@unixzen.com>
Tue, 17 Dec 2013 00:18:12 +0000 (18:18 -0600)
* These make up the base of what C++ GL Haiku applications
  use for 3D rendering.
* Not placed in includes/GL to prevent Haiku headers from
  getting installed on non-Haiku systems.

Acked-by: Brian Paul <brianp@vmware.com>
include/HaikuGL/GLRenderer.h [new file with mode: 0644]
include/HaikuGL/GLView.h [new file with mode: 0644]
include/HaikuGL/OpenGLKit.h [new file with mode: 0644]
include/HaikuGL/README [new file with mode: 0644]

diff --git a/include/HaikuGL/GLRenderer.h b/include/HaikuGL/GLRenderer.h
new file mode 100644 (file)
index 0000000..7ffcc34
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2006, Philippe Houdoin. All rights reserved.
+ * Distributed under the terms of the MIT License.
+
+ * This header defines BGLRenderer, the base class making up
+ * the Haiku GL renderer add-ons (essentially selfcontained C++
+ * shared libraries that do the actual rendering such as
+ * libswpipe.so and libswrast.so)
+ */
+#ifndef GLRENDERER_H
+#define GLRENDERER_H
+
+
+#include <BeBuild.h>
+#include <GLView.h>
+
+
+class BGLDispatcher;
+class GLRendererRoster;
+
+typedef unsigned long renderer_id;
+
+class BGLRenderer
+{
+                                                       // Private unimplemented copy constructors
+                                                       BGLRenderer(const BGLRenderer &);
+                                                       BGLRenderer & operator=(const BGLRenderer &);
+       
+public:
+                                                       BGLRenderer(BGLView *view, ulong bgl_options,
+                                                               BGLDispatcher *dispatcher);
+       virtual                                 ~BGLRenderer();
+
+       void                                    Acquire();
+       void                                    Release();
+
+       virtual void                    LockGL();
+       virtual void                    UnlockGL();
+       
+       virtual void                    SwapBuffers(bool VSync = false);
+       virtual void                    Draw(BRect updateRect);
+       virtual status_t                CopyPixelsOut(BPoint source, BBitmap *dest);
+       virtual status_t        CopyPixelsIn(BBitmap *source, BPoint dest);
+
+       virtual void                    FrameResized(float width, float height);
+       
+       virtual void                    DirectConnected(direct_buffer_info *info);
+       virtual void                    EnableDirectMode(bool enabled);
+
+       inline  int32                   ReferenceCount() const { return fRefCount; };
+       inline  ulong                   Options() const { return fOptions; };
+       inline  BGLView*                GLView() { return fView; };
+       inline  BGLDispatcher*  GLDispatcher() { return fDispatcher; };
+
+private:
+       friend class GLRendererRoster;
+
+       virtual status_t                _Reserved_Renderer_0(int32, void *);
+       virtual status_t                _Reserved_Renderer_1(int32, void *);
+       virtual status_t                _Reserved_Renderer_2(int32, void *);
+       virtual status_t                _Reserved_Renderer_3(int32, void *);
+       virtual status_t                _Reserved_Renderer_4(int32, void *);
+
+       volatile int32                  fRefCount;      // How much we're still usefull?
+       BGLView*                                fView;          // Never forget who is the boss!
+       ulong                                   fOptions;       // Keep that tune in memory
+       BGLDispatcher*                  fDispatcher;// Our personal GL API call dispatcher
+
+       GLRendererRoster*               fOwningRoster;
+       renderer_id                             fID;
+};
+
+extern "C" _EXPORT BGLRenderer* instantiate_gl_renderer(BGLView *view, ulong options, BGLDispatcher *dispatcher);
+
+
+#endif // GLRENDERER_H
diff --git a/include/HaikuGL/GLView.h b/include/HaikuGL/GLView.h
new file mode 100644 (file)
index 0000000..b848578
--- /dev/null
@@ -0,0 +1,193 @@
+/*
+ * Copyright 2008-2013, Haiku, Inc. All Rights Reserved.
+ * Distributed under the terms of the MIT License.
+ *
+ * This header defines BGLView, the base class making up
+ * the Haiku GL Kit.
+ *
+ */
+#ifndef BGLVIEW_H
+#define BGLVIEW_H
+
+
+#include <GL/gl.h>
+
+#define BGL_RGB                        0
+#define BGL_INDEX              1
+#define BGL_SINGLE             0
+#define BGL_DOUBLE             2
+#define BGL_DIRECT             0
+#define BGL_INDIRECT   4
+#define BGL_ACCUM              8
+#define BGL_ALPHA              16
+#define BGL_DEPTH              32
+#define BGL_OVERLAY            64
+#define BGL_UNDERLAY   128
+#define BGL_STENCIL            512
+
+#ifdef __cplusplus
+
+#include <AppKit.h>
+#include <Bitmap.h>
+#include <DirectWindow.h>
+#include <View.h>
+#include <Window.h>
+#include <WindowScreen.h>
+
+
+struct glview_direct_info;
+class BGLRenderer;
+class GLRendererRoster;
+
+class BGLView : public BView {
+public:
+                                                       BGLView(BRect rect, const char* name,
+                                                               ulong resizingMode, ulong mode,
+                                                               ulong options);
+       virtual                                 ~BGLView();
+
+                       void                    LockGL();
+                       void                    UnlockGL();
+                       void                    SwapBuffers();
+                       void                    SwapBuffers(bool vSync);
+
+                       BView*                  EmbeddedView(); // deprecated, returns NULL
+                       void*                   GetGLProcAddress(const char* procName);
+
+                       status_t                CopyPixelsOut(BPoint source, BBitmap *dest);
+                       status_t                CopyPixelsIn(BBitmap *source, BPoint dest);
+
+       // Mesa's GLenum is uint where Be's ones was ulong!
+       virtual void                    ErrorCallback(unsigned long errorCode);
+
+       virtual void                    Draw(BRect updateRect);
+       virtual void                    AttachedToWindow();
+       virtual void                    AllAttached();
+       virtual void                    DetachedFromWindow();
+       virtual void                    AllDetached();
+
+       virtual void                    FrameResized(float newWidth, float newHeight);
+       virtual status_t                Perform(perform_code d, void *arg);
+
+       virtual status_t                Archive(BMessage *data, bool deep = true) const;
+
+       virtual void                    MessageReceived(BMessage *message);
+       virtual void                    SetResizingMode(uint32 mode);
+
+       virtual void                    Show();
+       virtual void                    Hide();
+
+       virtual BHandler*               ResolveSpecifier(BMessage *msg, int32 index,
+                                                               BMessage *specifier, int32 form,
+                                                               const char *property);
+       virtual status_t                GetSupportedSuites(BMessage *data);
+
+                       void                    DirectConnected(direct_buffer_info *info);
+                       void                    EnableDirectMode(bool enabled);
+
+                       void*                   getGC() { return fGc; } // ???
+
+       virtual void                    GetPreferredSize(float* width, float* height);
+
+private:
+
+       virtual void                    _ReservedGLView1();
+       virtual void                    _ReservedGLView2();
+       virtual void                    _ReservedGLView3();
+       virtual void                    _ReservedGLView4();
+       virtual void                    _ReservedGLView5();
+       virtual void                    _ReservedGLView6();
+       virtual void                    _ReservedGLView7();
+       virtual void                    _ReservedGLView8();
+
+                                                       BGLView(const BGLView &);
+                                                       BGLView &operator=(const BGLView &);
+
+                       void                    _DitherFront();
+                       bool                    _ConfirmDither();
+                       void                    _Draw(BRect rect);
+                       void                    _CallDirectConnected();
+
+                       void*                   fGc;
+                       uint32                  fOptions;
+                       uint32                  fDitherCount;
+                       BLocker                 fDrawLock;
+                       BLocker                 fDisplayLock;
+                       glview_direct_info* fClipInfo;
+
+                       BGLRenderer*    fRenderer;
+                       GLRendererRoster* fRoster;
+
+                       BBitmap*                fDitherMap;
+                       BRect                   fBounds;
+                       int16*                  fErrorBuffer[2];
+                       uint64                  _reserved[8];
+
+                       void                    _LockDraw();
+                       void                    _UnlockDraw();
+
+// BeOS compatibility
+private:
+                                                       BGLView(BRect rect, char* name,
+                                                               ulong resizingMode, ulong mode,
+                                                               ulong options);
+};
+
+
+class BGLScreen : public BWindowScreen {
+public:
+                                                       BGLScreen(char* name,
+                                                               ulong screenMode, ulong options,
+                                                               status_t *error, bool debug=false);
+                                                       ~BGLScreen();
+
+                       void                    LockGL();
+                       void                    UnlockGL();
+                       void                    SwapBuffers();
+                                                       // Mesa's GLenum is uint where Be's ones was ulong!
+       virtual void                    ErrorCallback(unsigned long errorCode);
+
+       virtual void                    ScreenConnected(bool connected);
+       virtual void                    FrameResized(float width, float height);
+       virtual status_t                Perform(perform_code code, void *arg);
+
+       virtual status_t                Archive(BMessage *data, bool deep = true) const;
+       virtual void                    MessageReceived(BMessage *message);
+
+       virtual void                    Show();
+       virtual void                    Hide();
+
+       virtual BHandler*               ResolveSpecifier(BMessage *message,
+                                                               int32 index,
+                                                               BMessage *specifier,
+                                                               int32 form,
+                                                               const char *property);
+       virtual status_t                GetSupportedSuites(BMessage *data);
+
+private:
+
+       virtual void                    _ReservedGLScreen1();
+       virtual void                    _ReservedGLScreen2();
+       virtual void                    _ReservedGLScreen3();
+       virtual void                    _ReservedGLScreen4();
+       virtual void                    _ReservedGLScreen5();
+       virtual void                    _ReservedGLScreen6();
+       virtual void                    _ReservedGLScreen7();
+       virtual void                    _ReservedGLScreen8();
+
+                                                       BGLScreen(const BGLScreen &);
+                                                       BGLScreen &operator=(const BGLScreen &);
+
+                       void*                   fGc;
+                       long                    fOptions;
+                       BLocker                 fDrawLock;
+
+                       int32                   fColorSpace;
+                       uint32                  fScreenMode;
+
+                       uint64                  _reserved[7];
+};
+
+#endif // __cplusplus
+
+#endif // BGLVIEW_H
diff --git a/include/HaikuGL/OpenGLKit.h b/include/HaikuGL/OpenGLKit.h
new file mode 100644 (file)
index 0000000..f482871
--- /dev/null
@@ -0,0 +1,10 @@
+/*
+ * Master include file for the Haiku OpenGL Kit.
+ */
+
+#include <GL/gl.h>
+#include <GLView.h>
+
+// Projects needing GL/glu.h and GL/glut.h should now
+// include these headers independently as glu and glut
+// are no longe core parts of mesa
diff --git a/include/HaikuGL/README b/include/HaikuGL/README
new file mode 100644 (file)
index 0000000..0f8503f
--- /dev/null
@@ -0,0 +1,28 @@
+These headers make up the Haiku Op*nGL kit.
+
+Headers in this directory preserve some BeOS™ compatibility
+compatibility, so changes should be mentioned to the Haiku
+project mailing list.
+
+http://haiku-os.org
+
+Normal Haiku Op*enGL layout:
+
+  * headers/os/OpenGLKit.h
+  * headers/os/opengl/GLView.h
+  * headers/os/opengl/GLRenderer.h
+  * headers/os/opengl/GL/gl.h
+  * headers/os/opengl/GL/gl_mangle.h
+  * headers/os/opengl/GL/glext.h
+  * headers/os/opengl/GL/osmesa.h (needed?)
+
+Extras:
+
+  * headers/os/opengl/GL/glu.h
+  * headers/os/opengl/GL/glut.h
+
+OpenGL™ is a trademark of SGI. The usage of this trademark
+in the Haiku GL Kit is not a sign of any certification or
+endorsement by SGI or its affiliates. Usage is purely to
+allow legacy compatibility with the BeOS™ and its 3D GL
+rendering subsystem.