Browse Source

Added bgfx platform C99 header.

Branimir Karadžić 11 years ago
parent
commit
0f330a7a08
3 changed files with 132 additions and 2 deletions
  1. 85 0
      include/bgfxplatform.c99.h
  2. 2 2
      include/bgfxplatform.h
  3. 45 0
      src/bgfx.cpp

+ 85 - 0
include/bgfxplatform.c99.h

@@ -0,0 +1,85 @@
+/*
+ * Copyright 2011-2014 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx/blob/master/LICENSE
+ *
+ * vim: set tabstop=4 expandtab:
+ */
+
+#ifndef BGFX_PLATFORM_C99_H_HEADER_GUARD
+#define BGFX_PLATFORM_C99_H_HEADER_GUARD
+
+// NOTICE:
+// This header file contains platform specific interfaces. It is only
+// necessary to use this header in conjunction with creating windows.
+
+#include <bx/platform.h>
+
+typedef enum bgfx_render_frame
+{
+    BGFX_RENDER_FRAME_NO_CONTEXT,
+    BGFX_RENDER_FRAME_RENDER,
+    BGFX_RENDER_FRAME_EXITING,
+
+    BGFX_RENDER_FRAME_COUNT
+
+} bgfx_render_frame_t;
+
+/**
+ * WARNING: This call should be only used on platforms that don't
+ * allow creating separate rendering thread. If it is called before
+ * to bgfx_init, render thread won't be created by bgfx_init call.
+ */
+BGFX_C_API bgfx_render_frame_t bgfx_render_frame();
+
+#if BX_PLATFORM_ANDROID
+#    include <android/native_window.h>
+
+/**
+ *
+ */
+BGFX_C_API void bgfx_android_set_window(ANativeWindow* _window);
+
+#elif BX_PLATFORM_IOS
+
+/**
+ *
+ */
+BGFX_C_API void bgfx_ios_set_eagl_layer(void* _layer);
+
+#elif BX_PLATFORM_LINUX
+#    include <X11/Xlib.h>
+
+/**
+ *
+ */
+BGFX_C_API void bgfx_x11_set_display_window(Display* _display, Window _window);
+
+#elif BX_PLATFORM_NACL
+#    include <ppapi/c/ppb_graphics_3d.h>
+#    include <ppapi/c/ppb_instance.h>
+
+typedef void (*bgfx_post_swap_buffers_fn)(uint32_t _width, uint32_t _height);
+
+/**
+ *
+ */
+BGFX_C_API bool bgfx_nacl_set_interfaces(PP_Instance, const PPB_Instance*, const PPB_Graphics3D*, bgfx_post_swap_buffers_fn);
+
+#elif BX_PLATFORM_OSX
+
+/**
+ *
+ */
+BGFX_C_API void bgfx_osx_set_ns_window(void* _window);
+
+#elif BX_PLATFORM_WINDOWS
+#    include <windows.h>
+
+/**
+ *
+ */
+BGFX_C_API void bgfx_win_set_hwnd(HWND _window);
+
+#endif // BX_PLATFORM_
+
+#endif // BGFX_PLATFORM_C99_H_HEADER_GUARD

+ 2 - 2
include/bgfxplatform.h

@@ -1,6 +1,6 @@
 /*
  * Copyright 2011-2014 Branimir Karadzic. All rights reserved.
- * License: http://www.opensource.org/licenses/BSD-2-Clause
+ * License: https://github.com/bkaradzic/bgfx/blob/master/LICENSE
  */
 
 #ifndef BGFX_PLATFORM_H_HEADER_GUARD
@@ -10,7 +10,7 @@
 // This header file contains platform specific interfaces. It is only
 // necessary to use this header in conjunction with creating windows.
 
-#include <bx/bx.h>
+#include <bx/platform.h>
 
 namespace bgfx
 {

+ 45 - 0
src/bgfx.cpp

@@ -2605,12 +2605,14 @@ again:
 } // namespace bgfx
 
 #include <bgfx.c99.h>
+#include <bgfxplatform.c99.h>
 
 BX_STATIC_ASSERT(bgfx::RendererType::Count  == bgfx::RendererType::Enum(BGFX_RENDERER_TYPE_COUNT) );
 BX_STATIC_ASSERT(bgfx::Attrib::Count        == bgfx::Attrib::Enum(BGFX_ATTRIB_COUNT) );
 BX_STATIC_ASSERT(bgfx::AttribType::Count    == bgfx::AttribType::Enum(BGFX_ATTRIB_TYPE_COUNT) );
 BX_STATIC_ASSERT(bgfx::TextureFormat::Count == bgfx::TextureFormat::Enum(BGFX_TEXTURE_FORMAT_COUNT) );
 BX_STATIC_ASSERT(bgfx::UniformType::Count   == bgfx::UniformType::Enum(BGFX_UNIFORM_TYPE_COUNT) );
+BX_STATIC_ASSERT(bgfx::RenderFrame::Count   == bgfx::RenderFrame::Enum(BGFX_RENDER_FRAME_COUNT) );
 
 BX_STATIC_ASSERT(sizeof(bgfx::Memory)                == sizeof(bgfx_memory_t) );
 BX_STATIC_ASSERT(sizeof(bgfx::VertexDecl)            == sizeof(bgfx_vertex_decl_t) );
@@ -3196,3 +3198,46 @@ BGFX_C_API void bgfx_save_screen_shot(const char* _filePath)
 {
 	bgfx::saveScreenShot(_filePath);
 }
+
+BGFX_C_API bgfx_render_frame_t bgfx_render_frame()
+{
+	return bgfx_render_frame_t(bgfx::renderFrame() );
+}
+
+#if BX_PLATFORM_ANDROID
+BGFX_C_API void bgfx_android_set_window(ANativeWindow* _window)
+{
+	bgfx::androidSetWindow(_window);
+}
+
+#elif BX_PLATFORM_IOS
+BGFX_C_API void bgfx_ios_set_eagl_layer(void* _layer)
+{
+	bgfx::iosSetEaglLayer(_layer);
+}
+
+#elif BX_PLATFORM_LINUX
+BGFX_C_API void bgfx_x11_set_display_window(::Display* _display, ::Window _window)
+{
+	bgfx::x11SetDisplayWindow(_display, _window);
+}
+
+#elif BX_PLATFORM_NACL
+BGFX_C_API bool bgfx_nacl_set_interfaces(PP_Instance _instance, const PPB_Instance* _instInterface, const PPB_Graphics3D* _graphicsInterface, bgfx_post_swap_buffers_fn _postSwapBuffers)
+{
+	return bgfx::naclSetInterfaces(_instance, _instInterface, _graphicsInterface, _postSwapBuffers);
+}
+
+#elif BX_PLATFORM_OSX
+BGFX_C_API void bgfx_osx_set_ns_window(void* _window)
+{
+	bgfx::osxSetNSWindow(_window);
+}
+
+#elif BX_PLATFORM_WINDOWS
+BGFX_C_API void bgfx_win_set_hwnd(HWND _window)
+{
+	bgfx::winSetHwnd(_window);
+}
+
+#endif // BX_PLATFORM_*