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