1848b8605Smrg/* 2848b8605Smrg * Copyright 2006, Philippe Houdoin. All rights reserved. 3848b8605Smrg * Distributed under the terms of the MIT License. 4848b8605Smrg 5848b8605Smrg * This header defines BGLRenderer, the base class making up 6848b8605Smrg * the Haiku GL renderer add-ons (essentially selfcontained C++ 7848b8605Smrg * shared libraries that do the actual rendering such as 8848b8605Smrg * libswpipe.so and libswrast.so) 9848b8605Smrg */ 10848b8605Smrg#ifndef GLRENDERER_H 11848b8605Smrg#define GLRENDERER_H 12848b8605Smrg 13848b8605Smrg 14848b8605Smrg#include <BeBuild.h> 15848b8605Smrg#include <GLView.h> 16848b8605Smrg 17848b8605Smrg 18848b8605Smrgclass BGLDispatcher; 19848b8605Smrgclass GLRendererRoster; 20848b8605Smrg 21848b8605Smrgtypedef unsigned long renderer_id; 22848b8605Smrg 23848b8605Smrgclass BGLRenderer 24848b8605Smrg{ 25848b8605Smrg // Private unimplemented copy constructors 26848b8605Smrg BGLRenderer(const BGLRenderer &); 27848b8605Smrg BGLRenderer & operator=(const BGLRenderer &); 28848b8605Smrg 29848b8605Smrgpublic: 30848b8605Smrg BGLRenderer(BGLView *view, ulong bgl_options, 31848b8605Smrg BGLDispatcher *dispatcher); 32848b8605Smrg virtual ~BGLRenderer(); 33848b8605Smrg 34848b8605Smrg void Acquire(); 35848b8605Smrg void Release(); 36848b8605Smrg 37848b8605Smrg virtual void LockGL(); 38848b8605Smrg virtual void UnlockGL(); 39848b8605Smrg 40848b8605Smrg virtual void SwapBuffers(bool VSync = false); 41848b8605Smrg virtual void Draw(BRect updateRect); 42848b8605Smrg virtual status_t CopyPixelsOut(BPoint source, BBitmap *dest); 43848b8605Smrg virtual status_t CopyPixelsIn(BBitmap *source, BPoint dest); 44848b8605Smrg 45848b8605Smrg virtual void FrameResized(float width, float height); 46848b8605Smrg 47848b8605Smrg virtual void DirectConnected(direct_buffer_info *info); 48848b8605Smrg virtual void EnableDirectMode(bool enabled); 49848b8605Smrg 50848b8605Smrg inline int32 ReferenceCount() const { return fRefCount; }; 51848b8605Smrg inline ulong Options() const { return fOptions; }; 52848b8605Smrg inline BGLView* GLView() { return fView; }; 53848b8605Smrg inline BGLDispatcher* GLDispatcher() { return fDispatcher; }; 54848b8605Smrg 55848b8605Smrgprivate: 56848b8605Smrg friend class GLRendererRoster; 57848b8605Smrg 58848b8605Smrg virtual status_t _Reserved_Renderer_0(int32, void *); 59848b8605Smrg virtual status_t _Reserved_Renderer_1(int32, void *); 60848b8605Smrg virtual status_t _Reserved_Renderer_2(int32, void *); 61848b8605Smrg virtual status_t _Reserved_Renderer_3(int32, void *); 62848b8605Smrg virtual status_t _Reserved_Renderer_4(int32, void *); 63848b8605Smrg 64848b8605Smrg int32 fRefCount; // How much we're still useful 65848b8605Smrg BGLView* fView; // Never forget who is the boss! 66848b8605Smrg ulong fOptions; // Keep that tune in memory 67848b8605Smrg BGLDispatcher* fDispatcher;// Our personal GL API call dispatcher 68848b8605Smrg 69848b8605Smrg GLRendererRoster* fOwningRoster; 70848b8605Smrg renderer_id fID; 71848b8605Smrg}; 72848b8605Smrg 73848b8605Smrgextern "C" _EXPORT BGLRenderer* instantiate_gl_renderer(BGLView *view, ulong options, BGLDispatcher *dispatcher); 74848b8605Smrg 75848b8605Smrg 76848b8605Smrg#endif // GLRENDERER_H 77