Blue Brain BioExplorer
BaseWindow.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015-2016, EPFL/Blue Brain Project
3  *
4  * The Blue Brain BioExplorer is a tool for scientists to extract and analyse
5  * scientific data from visualization
6  *
7  * This file is part of Blue Brain BioExplorer <https://github.com/BlueBrain/BioExplorer>
8  *
9  * This program is free software: you can redistribute it and/or modify it under
10  * the terms of the GNU General Public License as published by the Free Software
11  * Foundation, either version 3 of the License, or (at your option) any later
12  * version.
13  *
14  * This program is distributed in the hope that it will be useful, but WITHOUT
15  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
17  * details.
18  *
19  * You should have received a copy of the GNU General Public License along with
20  * this program. If not, see <https://www.gnu.org/licenses/>.
21  */
22 
23 #pragma once
24 
25 #ifdef __linux__
26 #include <unistd.h>
27 #endif
28 
31 
32 namespace core
33 {
35 
36 void initGLUT(int* ac, const char** av);
37 
39 void runGLUT();
40 
44 enum class FrameBufferMode
45 {
46  COLOR_I8,
47  COLOR_F32,
48  DEPTH_F32,
49 };
50 
52 {
53 public:
55  virtual ~BaseWindow();
56 
59 
61  virtual void forceRedraw();
62 
64  void setTitle(const std::string& title) { _setTitle(title.c_str()); }
65 
66  // ------------------------------------------------------------------
67  // event handling - override this to change this widgets behavior
68  // to input events
69  // ------------------------------------------------------------------
70  virtual void mouseButton(int button, bool released, const Vector2i& pos);
71 
72  virtual void motion(const Vector2i& pos);
73 
74  virtual void passiveMotion(const Vector2i& pos);
75 
76  virtual void reshape(const Vector2i& newSize);
77 
78  virtual void idle();
79 
83  virtual void display();
84 
85  // ------------------------------------------------------------------
86  // helper functions
87  // ------------------------------------------------------------------
90  virtual void activate();
91 
92  void create(const char* title, size_t width, size_t height);
93 
95  void clearPixels();
96 
99  void drawPixels(const int* framebuffer);
100 
103  void drawPixels(const Vector3f* framebuffer);
104 
105  virtual void keypress(char key, const Vector2f& where);
106  virtual void specialkey(int key, const Vector2f& where);
107 
108 protected:
109  void _setTitle(const char* title);
110  void _setHint(const std::string& message, const uint64_t milliseconds = 3000);
111 
112  virtual void _registerKeyboardShortcuts();
113  void _renderBitmapString(float x, float y, const std::string& text);
114 
116 
121  u_int64_t _lastButtonState;
122  u_int64_t _currButtonState;
123  u_int64_t _currModifiers;
124 
126 
129 
131 
132  uint64_t _gid;
133 
137 
140 
141  std::string _hintMessage;
142  uint64_t _hintDelay{0};
143  std::chrono::time_point<std::chrono::steady_clock> _chrono;
144 
145 private:
146  strings _rendererTypes;
147  uint64_t _currentRendererTypeIndex{0};
148 
149  void _exitApplication();
150  void _toggleFrameBuffer();
151  void _toggleRendererType();
152  void _toggleHeadLight();
153 
154  // ------------------------------------------------------------------
155  // GLUT camera helper code
156  // ------------------------------------------------------------------
157  static BaseWindow* _activeWindow;
158  friend void glut3dReshape(int x, int y);
159  friend void glut3dDisplay(void);
160  friend void glut3dKeyboard(unsigned char key, int x, int y);
161  friend void glut3dSpecial(int key, int x, int y);
162  friend void glut3dIdle(void);
163  friend void glut3dMotionFunc(int x, int y);
164  friend void glut3dMouseFunc(int whichButton, int released, int x, int y);
165  friend void glut3dPassiveMouseFunc(int x, int y);
166 };
167 } // namespace core
u_int64_t _currModifiers
Definition: BaseWindow.h:123
u_int64_t _currButtonState
Definition: BaseWindow.h:122
friend void glut3dPassiveMouseFunc(int x, int y)
Definition: BaseWindow.cpp:113
virtual void display()
Definition: BaseWindow.cpp:247
friend void glut3dMouseFunc(int whichButton, int released, int x, int y)
Definition: BaseWindow.cpp:107
void _renderBitmapString(float x, float y, const std::string &text)
Definition: BaseWindow.cpp:451
Vector2i _currMousePos
Definition: BaseWindow.h:119
virtual void reshape(const Vector2i &newSize)
Definition: BaseWindow.cpp:228
virtual ~BaseWindow()
Definition: BaseWindow.cpp:149
BaseWindow(Core &core, FrameBufferMode frameBufferMode=FrameBufferMode::COLOR_I8)
Definition: BaseWindow.cpp:125
virtual void keypress(char key, const Vector2f &where)
Definition: BaseWindow.cpp:378
FrameBufferMode _frameBufferMode
Definition: BaseWindow.h:125
void _setTitle(const char *title)
Definition: BaseWindow.cpp:354
friend void glut3dReshape(int x, int y)
Definition: BaseWindow.cpp:71
Vector2ui _windowSize
Definition: BaseWindow.h:128
std::string _hintMessage
Definition: BaseWindow.h:141
void setTitle(const std::string &title)
Definition: BaseWindow.h:64
std::chrono::time_point< std::chrono::steady_clock > _chrono
Definition: BaseWindow.h:143
Vector2i _mouse
Definition: BaseWindow.h:120
friend void glut3dIdle(void)
Definition: BaseWindow.cpp:96
virtual void motion(const Vector2i &pos)
Definition: BaseWindow.cpp:188
RenderOutput _renderOutput
Definition: BaseWindow.h:139
void create(const char *title, size_t width, size_t height)
Definition: BaseWindow.cpp:361
virtual void activate()
Definition: BaseWindow.cpp:236
u_int64_t _lastButtonState
Definition: BaseWindow.h:121
Vector2ui _windowPosition
Definition: BaseWindow.h:136
virtual void passiveMotion(const Vector2i &pos)
Definition: BaseWindow.cpp:218
void drawPixels(const int *framebuffer)
Definition: BaseWindow.cpp:342
friend void glut3dSpecial(int key, int x, int y)
Definition: BaseWindow.cpp:90
uint64_t _hintDelay
Definition: BaseWindow.h:142
virtual void mouseButton(int button, bool released, const Vector2i &pos)
Definition: BaseWindow.cpp:151
virtual void specialkey(int key, const Vector2f &where)
Definition: BaseWindow.cpp:409
friend void glut3dMotionFunc(int x, int y)
Definition: BaseWindow.cpp:101
friend void glut3dKeyboard(unsigned char key, int x, int y)
Definition: BaseWindow.cpp:85
void _setHint(const std::string &message, const uint64_t milliseconds=3000)
Definition: BaseWindow.cpp:514
virtual void idle()
Definition: BaseWindow.cpp:223
virtual void _registerKeyboardShortcuts()
Definition: BaseWindow.cpp:439
Vector2i _lastMousePos
Definition: BaseWindow.h:117
RenderInput _renderInput
Definition: BaseWindow.h:138
static Vector2i _defaultInitSize
Definition: BaseWindow.h:58
friend void glut3dDisplay(void)
Definition: BaseWindow.cpp:77
virtual void forceRedraw()
Definition: BaseWindow.cpp:242
void initGLUT(int *ac, const char **av)
dedicated namespace for 3D glut viewer widget
Definition: BaseWindow.cpp:62
glm::vec3 Vector3f
Definition: MathTypes.h:137
glm::vec2 Vector2f
Definition: MathTypes.h:136
glm::vec< 2, int32_t > Vector2i
Definition: MathTypes.h:130
void runGLUT()
Definition: BaseWindow.cpp:57
FrameBufferMode
Definition: BaseWindow.h:45
glm::vec< 2, uint32_t > Vector2ui
Definition: MathTypes.h:133
std::vector< std::string > strings
Definition: Types.h:44