Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright 2008-2013, Haiku, Inc. All Rights Reserved.
  3.  * Distributed under the terms of the MIT License.
  4.  *
  5.  * This header defines BGLView, the base class making up
  6.  * the Haiku GL Kit.
  7.  *
  8.  */
  9. #ifndef BGLVIEW_H
  10. #define BGLVIEW_H
  11.  
  12.  
  13. #include <GL/gl.h>
  14.  
  15. #define BGL_RGB                 0
  16. #define BGL_INDEX               1
  17. #define BGL_SINGLE              0
  18. #define BGL_DOUBLE              2
  19. #define BGL_DIRECT              0
  20. #define BGL_INDIRECT    4
  21. #define BGL_ACCUM               8
  22. #define BGL_ALPHA               16
  23. #define BGL_DEPTH               32
  24. #define BGL_OVERLAY             64
  25. #define BGL_UNDERLAY    128
  26. #define BGL_STENCIL             512
  27.  
  28. #ifdef __cplusplus
  29.  
  30. #include <AppKit.h>
  31. #include <Bitmap.h>
  32. #include <DirectWindow.h>
  33. #include <View.h>
  34. #include <Window.h>
  35. #include <WindowScreen.h>
  36.  
  37.  
  38. struct glview_direct_info;
  39. class BGLRenderer;
  40. class GLRendererRoster;
  41.  
  42. class BGLView : public BView {
  43. public:
  44.                                                         BGLView(BRect rect, const char* name,
  45.                                                                 ulong resizingMode, ulong mode,
  46.                                                                 ulong options);
  47.         virtual                                 ~BGLView();
  48.  
  49.                         void                    LockGL();
  50.                         void                    UnlockGL();
  51.                         void                    SwapBuffers();
  52.                         void                    SwapBuffers(bool vSync);
  53.  
  54.                         BView*                  EmbeddedView(); // deprecated, returns NULL
  55.                         void*                   GetGLProcAddress(const char* procName);
  56.  
  57.                         status_t                CopyPixelsOut(BPoint source, BBitmap *dest);
  58.                         status_t                CopyPixelsIn(BBitmap *source, BPoint dest);
  59.  
  60.         // Mesa's GLenum is uint where Be's ones was ulong!
  61.         virtual void                    ErrorCallback(unsigned long errorCode);
  62.  
  63.         virtual void                    Draw(BRect updateRect);
  64.         virtual void                    AttachedToWindow();
  65.         virtual void                    AllAttached();
  66.         virtual void                    DetachedFromWindow();
  67.         virtual void                    AllDetached();
  68.  
  69.         virtual void                    FrameResized(float newWidth, float newHeight);
  70.         virtual status_t                Perform(perform_code d, void *arg);
  71.  
  72.         virtual status_t                Archive(BMessage *data, bool deep = true) const;
  73.  
  74.         virtual void                    MessageReceived(BMessage *message);
  75.         virtual void                    SetResizingMode(uint32 mode);
  76.  
  77.         virtual void                    Show();
  78.         virtual void                    Hide();
  79.  
  80.         virtual BHandler*               ResolveSpecifier(BMessage *msg, int32 index,
  81.                                                                 BMessage *specifier, int32 form,
  82.                                                                 const char *property);
  83.         virtual status_t                GetSupportedSuites(BMessage *data);
  84.  
  85.                         void                    DirectConnected(direct_buffer_info *info);
  86.                         void                    EnableDirectMode(bool enabled);
  87.  
  88.                         void*                   getGC() { return fGc; } // ???
  89.  
  90.         virtual void                    GetPreferredSize(float* width, float* height);
  91.  
  92. private:
  93.  
  94.         virtual void                    _ReservedGLView1();
  95.         virtual void                    _ReservedGLView2();
  96.         virtual void                    _ReservedGLView3();
  97.         virtual void                    _ReservedGLView4();
  98.         virtual void                    _ReservedGLView5();
  99.         virtual void                    _ReservedGLView6();
  100.         virtual void                    _ReservedGLView7();
  101.         virtual void                    _ReservedGLView8();
  102.  
  103.                                                         BGLView(const BGLView &);
  104.                                                         BGLView &operator=(const BGLView &);
  105.  
  106.                         void                    _DitherFront();
  107.                         bool                    _ConfirmDither();
  108.                         void                    _Draw(BRect rect);
  109.                         void                    _CallDirectConnected();
  110.  
  111.                         void*                   fGc;
  112.                         uint32                  fOptions;
  113.                         uint32                  fDitherCount;
  114.                         BLocker                 fDrawLock;
  115.                         BLocker                 fDisplayLock;
  116.                         glview_direct_info* fClipInfo;
  117.  
  118.                         BGLRenderer*    fRenderer;
  119.                         GLRendererRoster* fRoster;
  120.  
  121.                         BBitmap*                fDitherMap;
  122.                         BRect                   fBounds;
  123.                         int16*                  fErrorBuffer[2];
  124.                         uint64                  _reserved[8];
  125.  
  126.                         void                    _LockDraw();
  127.                         void                    _UnlockDraw();
  128.  
  129. // BeOS compatibility
  130. private:
  131.                                                         BGLView(BRect rect, char* name,
  132.                                                                 ulong resizingMode, ulong mode,
  133.                                                                 ulong options);
  134. };
  135.  
  136.  
  137. class BGLScreen : public BWindowScreen {
  138. public:
  139.                                                         BGLScreen(char* name,
  140.                                                                 ulong screenMode, ulong options,
  141.                                                                 status_t *error, bool debug=false);
  142.                                                         ~BGLScreen();
  143.  
  144.                         void                    LockGL();
  145.                         void                    UnlockGL();
  146.                         void                    SwapBuffers();
  147.                                                         // Mesa's GLenum is uint where Be's ones was ulong!
  148.         virtual void                    ErrorCallback(unsigned long errorCode);
  149.  
  150.         virtual void                    ScreenConnected(bool connected);
  151.         virtual void                    FrameResized(float width, float height);
  152.         virtual status_t                Perform(perform_code code, void *arg);
  153.  
  154.         virtual status_t                Archive(BMessage *data, bool deep = true) const;
  155.         virtual void                    MessageReceived(BMessage *message);
  156.  
  157.         virtual void                    Show();
  158.         virtual void                    Hide();
  159.  
  160.         virtual BHandler*               ResolveSpecifier(BMessage *message,
  161.                                                                 int32 index,
  162.                                                                 BMessage *specifier,
  163.                                                                 int32 form,
  164.                                                                 const char *property);
  165.         virtual status_t                GetSupportedSuites(BMessage *data);
  166.  
  167. private:
  168.  
  169.         virtual void                    _ReservedGLScreen1();
  170.         virtual void                    _ReservedGLScreen2();
  171.         virtual void                    _ReservedGLScreen3();
  172.         virtual void                    _ReservedGLScreen4();
  173.         virtual void                    _ReservedGLScreen5();
  174.         virtual void                    _ReservedGLScreen6();
  175.         virtual void                    _ReservedGLScreen7();
  176.         virtual void                    _ReservedGLScreen8();
  177.  
  178.                                                         BGLScreen(const BGLScreen &);
  179.                                                         BGLScreen &operator=(const BGLScreen &);
  180.  
  181.                         void*                   fGc;
  182.                         long                    fOptions;
  183.                         BLocker                 fDrawLock;
  184.  
  185.                         int32                   fColorSpace;
  186.                         uint32                  fScreenMode;
  187.  
  188.                         uint64                  _reserved[7];
  189. };
  190.  
  191. #endif // __cplusplus
  192.  
  193. #endif // BGLVIEW_H
  194.