summaryrefslogtreecommitdiffstats
path: root/include/HaikuGL
diff options
context:
space:
mode:
Diffstat (limited to 'include/HaikuGL')
-rw-r--r--include/HaikuGL/GLRenderer.h76
-rw-r--r--include/HaikuGL/GLView.h193
-rw-r--r--include/HaikuGL/OpenGLKit.h10
-rw-r--r--include/HaikuGL/README28
4 files changed, 307 insertions, 0 deletions
diff --git a/include/HaikuGL/GLRenderer.h b/include/HaikuGL/GLRenderer.h
new file mode 100644
index 00000000000..7ffcc34bb12
--- /dev/null
+++ b/include/HaikuGL/GLRenderer.h
@@ -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
index 00000000000..b848578f67a
--- /dev/null
+++ b/include/HaikuGL/GLView.h
@@ -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
index 00000000000..f4828714cab
--- /dev/null
+++ b/include/HaikuGL/OpenGLKit.h
@@ -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
index 00000000000..0f8503f086f
--- /dev/null
+++ b/include/HaikuGL/README
@@ -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.