bgfxplatform.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. /*
  2. * Copyright 2011-2013 Branimir Karadzic. All rights reserved.
  3. * License: http://www.opensource.org/licenses/BSD-2-Clause
  4. */
  5. #ifndef __BGFXPLATFORM_H__
  6. #define __BGFXPLATFORM_H__
  7. // NOTICE:
  8. // This header file contains platform specific interfaces. It is only
  9. // necessary to use this header in conjunction with creating windows.
  10. #include <bx/bx.h>
  11. #if BX_PLATFORM_ANDROID
  12. # include <android/native_window.h>
  13. namespace bgfx
  14. {
  15. ///
  16. void androidSetWindow(::ANativeWindow* _window);
  17. } // namespace bgfx
  18. #elif BX_PLATFORM_IOS
  19. namespace bgfx
  20. {
  21. ///
  22. void iosSetEaglLayer(void* _layer);
  23. } // namespace bgfx
  24. #elif BX_PLATFORM_LINUX
  25. # include <X11/Xlib.h>
  26. namespace bgfx
  27. {
  28. ///
  29. void x11SetDisplayWindow(::Display* _display, ::Window _window);
  30. } // namespace bgfx
  31. #elif BX_PLATFORM_NACL
  32. # include <ppapi/c/ppb_graphics_3d.h>
  33. # include <ppapi/c/ppb_instance.h>
  34. namespace bgfx
  35. {
  36. typedef void (*PostSwapBuffersFn)(uint32_t _width, uint32_t _height);
  37. ///
  38. void naclSetIntefraces(::PP_Instance, const ::PPB_Instance*, const ::PPB_Graphics3D*, PostSwapBuffersFn);
  39. } // namespace bgfx
  40. #elif BX_PLATFORM_OSX
  41. namespace bgfx
  42. {
  43. ///
  44. void osxSetNSWindow(void* _window);
  45. } // namespace bgfx
  46. #elif BX_PLATFORM_WINDOWS
  47. # include <windows.h>
  48. namespace bgfx
  49. {
  50. ///
  51. void winSetHwnd(::HWND _window);
  52. } // namespace bgfx
  53. #endif // BX_PLATFORM_
  54. #if defined(_SDL_H)
  55. // If SDL.h is included before bgfxplatform.h we can enable SDL window
  56. // interop convenience code.
  57. # include <SDL2/SDL_syswm.h>
  58. namespace bgfx
  59. {
  60. ///
  61. inline bool sdlSetWindow(SDL_Window* _window)
  62. {
  63. SDL_SysWMinfo wmi;
  64. SDL_VERSION(&wmi.version);
  65. if (-1 == SDL_GetWindowWMInfo(_window, &wmi) )
  66. {
  67. return false;
  68. }
  69. # if BX_PLATFORM_LINUX
  70. x11SetDisplayWindow(wmi.info.x11.display, wmi.info.x11.window);
  71. # elif BX_PLATFORM_OSX
  72. osxSetNSWindow(wmi.info.cocoa.window);
  73. # elif BX_PLATFORM_WINDOWS
  74. winSetHwnd(wmi.info.win.window);
  75. # endif // BX_PLATFORM_
  76. return true;
  77. }
  78. } // namespace bgfx
  79. #elif defined(_glfw3_h_)
  80. // If GLFW/glfw3.h is included before bgfxplatform.h we can enable GLFW3
  81. // window interop convenience code.
  82. # if BX_PLATFORM_LINUX
  83. # define GLFW_EXPOSE_NATIVE_X11
  84. # define GLFW_EXPOSE_NATIVE_GLX
  85. # elif BX_PLATFORM_OSX
  86. # define GLFW_EXPOSE_NATIVE_COCOA
  87. # define GLFW_EXPOSE_NATIVE_NSGL
  88. # elif BX_PLATFORM_WINDOWS
  89. # define GLFW_EXPOSE_NATIVE_WIN32
  90. # define GLFW_EXPOSE_NATIVE_WGL
  91. # endif //
  92. # include <GLFW/glfw3native.h>
  93. namespace bgfx
  94. {
  95. inline void glfwSetWindow(GLFWwindow* _window)
  96. {
  97. # if BX_PLATFORM_LINUX
  98. ::Display* display = glfwGetX11Display();
  99. ::Window window = glfwGetX11Window(_window);
  100. x11SetDisplayWindow(display, window);
  101. # elif BX_PLATFORM_OSX
  102. void* id = glfwGetCocoaWindow(_window);
  103. osxSetNSWindow(id);
  104. # elif BX_PLATFORM_WINDOWS
  105. HWND hwnd = glfwGetWin32Window(_window);
  106. winSetHwnd(hwnd);
  107. # endif BX_PLATFORM_WINDOWS
  108. }
  109. } // namespace bgfx
  110. #endif // defined(_SDL_H)
  111. #endif // __BGFXPLATFORM_H__