1 /* 2 * Copyright 2006, Philippe Houdoin. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 5 * This header defines BGLRenderer, the base class making up 6 * the Haiku GL renderer add-ons (essentially selfcontained C++ 7 * shared libraries that do the actual rendering such as 8 * libswpipe.so and libswrast.so) 9 */ 10 #ifndef GLRENDERER_H 11 #define GLRENDERER_H 12 13 14 #include <BeBuild.h> 15 #include <GLView.h> 16 17 18 class BGLDispatcher; 19 class GLRendererRoster; 20 21 typedef unsigned long renderer_id; 22 23 class BGLRenderer 24 { 25 // Private unimplemented copy constructors 26 BGLRenderer(const BGLRenderer &); 27 BGLRenderer & operator=(const BGLRenderer &); 28 29 public: 30 BGLRenderer(BGLView *view, ulong bgl_options, 31 BGLDispatcher *dispatcher); 32 virtual ~BGLRenderer(); 33 34 void Acquire(); 35 void Release(); 36 37 virtual void LockGL(); 38 virtual void UnlockGL(); 39 40 virtual void SwapBuffers(bool VSync = false); 41 virtual void Draw(BRect updateRect); 42 virtual status_t CopyPixelsOut(BPoint source, BBitmap *dest); 43 virtual status_t CopyPixelsIn(BBitmap *source, BPoint dest); 44 45 virtual void FrameResized(float width, float height); 46 47 virtual void DirectConnected(direct_buffer_info *info); 48 virtual void EnableDirectMode(bool enabled); 49 ReferenceCount()50 inline int32 ReferenceCount() const { return fRefCount; }; Options()51 inline ulong Options() const { return fOptions; }; GLView()52 inline BGLView* GLView() { return fView; }; GLDispatcher()53 inline BGLDispatcher* GLDispatcher() { return fDispatcher; }; 54 55 private: 56 friend class GLRendererRoster; 57 58 virtual status_t _Reserved_Renderer_0(int32, void *); 59 virtual status_t _Reserved_Renderer_1(int32, void *); 60 virtual status_t _Reserved_Renderer_2(int32, void *); 61 virtual status_t _Reserved_Renderer_3(int32, void *); 62 virtual status_t _Reserved_Renderer_4(int32, void *); 63 64 int32 fRefCount; // How much we're still useful 65 BGLView* fView; // Never forget who is the boss! 66 ulong fOptions; // Keep that tune in memory 67 BGLDispatcher* fDispatcher;// Our personal GL API call dispatcher 68 69 GLRendererRoster* fOwningRoster; 70 renderer_id fID; 71 }; 72 73 extern "C" _EXPORT BGLRenderer* instantiate_gl_renderer(BGLView *view, ulong options, BGLDispatcher *dispatcher); 74 75 76 #endif // GLRENDERER_H 77