diff options
author | 2015-02-01 10:14:17 +0100 | |
---|---|---|
committer | 2015-02-01 10:14:17 +0100 | |
commit | b3303c3a32b94b61f82e739d8d494752047f11c1 (patch) | |
tree | 1383c753eaebdfa039f1768f55c96fe800ce020f /3rdparty/bgfx/examples/common/entry/entry_p.h | |
parent | 09b6ec9869349cf9befd8c3589f1dccb32bacd1a (diff) |
Added BGFX latest code to 3rdparty (nw)
Diffstat (limited to '3rdparty/bgfx/examples/common/entry/entry_p.h')
-rw-r--r-- | 3rdparty/bgfx/examples/common/entry/entry_p.h | 255 |
1 files changed, 255 insertions, 0 deletions
diff --git a/3rdparty/bgfx/examples/common/entry/entry_p.h b/3rdparty/bgfx/examples/common/entry/entry_p.h new file mode 100644 index 00000000000..09fa203bde5 --- /dev/null +++ b/3rdparty/bgfx/examples/common/entry/entry_p.h @@ -0,0 +1,255 @@ +/* + * Copyright 2011-2015 Branimir Karadzic. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#ifndef ENTRY_PRIVATE_H_HEADER_GUARD +#define ENTRY_PRIVATE_H_HEADER_GUARD + +#include <bx/spscqueue.h> + +#include "entry.h" +#include <string.h> // memcpy + +#ifndef ENTRY_CONFIG_USE_SDL +# define ENTRY_CONFIG_USE_SDL 0 +#endif // ENTRY_CONFIG_USE_SDL + +#if !ENTRY_CONFIG_USE_SDL && \ + !defined(ENTRY_CONFIG_USE_NATIVE) +# define ENTRY_CONFIG_USE_NATIVE 1 +#else +# define ENTRY_CONFIG_USE_NATIVE 0 +#endif // ... + +#ifndef ENTRY_CONFIG_MAX_WINDOWS +# define ENTRY_CONFIG_MAX_WINDOWS 8 +#endif // ENTRY_CONFIG_MAX_WINDOWS + +#ifndef ENTRY_CONFIG_MAX_GAMEPADS +# define ENTRY_CONFIG_MAX_GAMEPADS 4 +#endif // ENTRY_CONFIG_MAX_GAMEPADS + +#if !defined(ENTRY_DEFAULT_WIDTH) && !defined(ENTRY_DEFAULT_HEIGHT) +# define ENTRY_DEFAULT_WIDTH 1280 +# define ENTRY_DEFAULT_HEIGHT 720 +#elif !defined(ENTRY_DEFAULT_WIDTH) || !defined(ENTRY_DEFAULT_HEIGHT) +# error "Both ENTRY_DEFAULT_WIDTH and ENTRY_DEFAULT_HEIGHT must be defined." +#endif // ENTRY_DEFAULT_WIDTH + +#define ENTRY_IMPLEMENT_EVENT(_class, _type) \ + _class(WindowHandle _handle) : Event(_type, _handle) {} + +namespace entry +{ + int main(int _argc, char** _argv); + + struct Event + { + enum Enum + { + Axis, + Char, + Exit, + Gamepad, + Key, + Mouse, + Size, + Window, + }; + + Event(Enum _type) + : m_type(_type) + { + m_handle.idx = UINT16_MAX; + } + + Event(Enum _type, WindowHandle _handle) + : m_type(_type) + , m_handle(_handle) + { + } + + Event::Enum m_type; + WindowHandle m_handle; + }; + + struct AxisEvent : public Event + { + ENTRY_IMPLEMENT_EVENT(AxisEvent, Event::Axis); + + GamepadAxis::Enum m_axis; + int32_t m_value; + GamepadHandle m_gamepad; + }; + + struct CharEvent : public Event + { + ENTRY_IMPLEMENT_EVENT(CharEvent, Event::Char); + + uint8_t m_len; + uint8_t m_char[4]; + }; + + struct GamepadEvent : public Event + { + ENTRY_IMPLEMENT_EVENT(GamepadEvent, Event::Gamepad); + + GamepadHandle m_gamepad; + bool m_connected; + }; + + struct KeyEvent : public Event + { + ENTRY_IMPLEMENT_EVENT(KeyEvent, Event::Key); + + Key::Enum m_key; + uint8_t m_modifiers; + bool m_down; + }; + + struct MouseEvent : public Event + { + ENTRY_IMPLEMENT_EVENT(MouseEvent, Event::Mouse); + + int32_t m_mx; + int32_t m_my; + int32_t m_mz; + MouseButton::Enum m_button; + bool m_down; + bool m_move; + }; + + struct SizeEvent : public Event + { + ENTRY_IMPLEMENT_EVENT(SizeEvent, Event::Size); + + uint32_t m_width; + uint32_t m_height; + }; + + struct WindowEvent : public Event + { + ENTRY_IMPLEMENT_EVENT(WindowEvent, Event::Window); + + void* m_nwh; + }; + + const Event* poll(); + const Event* poll(WindowHandle _handle); + void release(const Event* _event); + + class EventQueue + { + public: + void postAxisEvent(WindowHandle _handle, GamepadHandle _gamepad, GamepadAxis::Enum _axis, int32_t _value) + { + AxisEvent* ev = new AxisEvent(_handle); + ev->m_gamepad = _gamepad; + ev->m_axis = _axis; + ev->m_value = _value; + m_queue.push(ev); + } + + void postCharEvent(WindowHandle _handle, uint8_t _len, const uint8_t _char[4]) + { + CharEvent* ev = new CharEvent(_handle); + ev->m_len = _len; + memcpy(ev->m_char, _char, 4); + m_queue.push(ev); + } + + void postExitEvent() + { + Event* ev = new Event(Event::Exit); + m_queue.push(ev); + } + + void postGamepadEvent(WindowHandle _handle, GamepadHandle _gamepad, bool _connected) + { + GamepadEvent* ev = new GamepadEvent(_handle); + ev->m_gamepad = _gamepad; + ev->m_connected = _connected; + m_queue.push(ev); + } + + void postKeyEvent(WindowHandle _handle, Key::Enum _key, uint8_t _modifiers, bool _down) + { + KeyEvent* ev = new KeyEvent(_handle); + ev->m_key = _key; + ev->m_modifiers = _modifiers; + ev->m_down = _down; + m_queue.push(ev); + } + + void postMouseEvent(WindowHandle _handle, int32_t _mx, int32_t _my, int32_t _mz) + { + MouseEvent* ev = new MouseEvent(_handle); + ev->m_mx = _mx; + ev->m_my = _my; + ev->m_mz = _mz; + ev->m_button = MouseButton::None; + ev->m_down = false; + ev->m_move = true; + m_queue.push(ev); + } + + void postMouseEvent(WindowHandle _handle, int32_t _mx, int32_t _my, int32_t _mz, MouseButton::Enum _button, bool _down) + { + MouseEvent* ev = new MouseEvent(_handle); + ev->m_mx = _mx; + ev->m_my = _my; + ev->m_mz = _mz; + ev->m_button = _button; + ev->m_down = _down; + ev->m_move = false; + m_queue.push(ev); + } + + void postSizeEvent(WindowHandle _handle, uint32_t _width, uint32_t _height) + { + SizeEvent* ev = new SizeEvent(_handle); + ev->m_width = _width; + ev->m_height = _height; + m_queue.push(ev); + } + + void postWindowEvent(WindowHandle _handle, void* _nwh = NULL) + { + WindowEvent* ev = new WindowEvent(_handle); + ev->m_nwh = _nwh; + m_queue.push(ev); + } + + const Event* poll() + { + return m_queue.pop(); + } + + const Event* poll(WindowHandle _handle) + { + if (isValid(_handle) ) + { + Event* ev = m_queue.peek(); + if (NULL == ev + || ev->m_handle.idx != _handle.idx) + { + return NULL; + } + } + + return poll(); + } + + void release(const Event* _event) const + { + delete _event; + } + + private: + bx::SpScUnboundedQueue<Event> m_queue; + }; + +} // namespace entry + +#endif // ENTRY_PRIVATE_H_HEADER_GUARD |