Browse Source

Haiku: Add in public GL kit headers

* These make up the base of what C++ GL Haiku applications
  use for 3D rendering.
* Not placed in includes/GL to prevent Haiku headers from
  getting installed on non-Haiku systems.

Acked-by: Brian Paul <brianp@vmware.com>
tags/mesa-10.1-rc1
Alexander von Gluck IV 11 years ago
parent
commit
56d920a5c1
4 changed files with 307 additions and 0 deletions
  1. 76
    0
      include/HaikuGL/GLRenderer.h
  2. 193
    0
      include/HaikuGL/GLView.h
  3. 10
    0
      include/HaikuGL/OpenGLKit.h
  4. 28
    0
      include/HaikuGL/README

+ 76
- 0
include/HaikuGL/GLRenderer.h View File

@@ -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

+ 193
- 0
include/HaikuGL/GLView.h View File

@@ -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

+ 10
- 0
include/HaikuGL/OpenGLKit.h View File

@@ -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

+ 28
- 0
include/HaikuGL/README View File

@@ -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.

Loading…
Cancel
Save