/* * 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 *); int32 fRefCount; // How much we're still useful 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