diff options
author | Chad Versace <chad.versace@intel.com> | 2015-01-20 09:53:44 -0800 |
---|---|---|
committer | Chad Versace <chad.versace@intel.com> | 2015-01-20 09:53:44 -0800 |
commit | 6c46bfd71b522c510b736848625fc0dc382df6e7 (patch) | |
tree | 5117ed6f0a5e9e9e8f6d7ea8d577a9ffae2f3ce9 | |
parent | e69f4129b5c79a9a9df414999c3c629a95e1197a (diff) | |
parent | 27be37613809db2f535e133a674b8b392eadcc71 (diff) |
Merge branch 'tpalli/nacl' into master
* cooking/tpalli/nacl:
waffle: update man pages with nacl changes
waffle: initial empty implementation of nacl backend
waffle: add support for building Waffle using NaCl toolchain
examples: add waffle_has_x11_egl check for simple-x11-egl
26 files changed, 961 insertions, 5 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 9bbe387..02e995e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,7 +23,7 @@ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -project(waffle1 C) +project(waffle1 C CXX) cmake_minimum_required(VERSION 2.8.11) diff --git a/Options.cmake b/Options.cmake index c316070..4f097a0 100644 --- a/Options.cmake +++ b/Options.cmake @@ -28,6 +28,11 @@ if(waffle_on_linux) option(waffle_has_wayland "Build support for Wayland" ${wayland_default}) option(waffle_has_x11_egl "Build support for X11/EGL" ${x11_egl_default}) option(waffle_has_gbm "Build support for GBM" ${gbm_default}) + option(waffle_has_nacl "Build support for NaCl" OFF) + + # NaCl specific settings. + set(nacl_sdk_path "" CACHE STRING "Set nacl_sdk path here") + set(nacl_version "pepper_39" CACHE STRING "Set NaCl bundle here") endif() option(waffle_build_tests "Build tests" ON) diff --git a/cmake/Modules/WaffleDefineCompilerFlags.cmake b/cmake/Modules/WaffleDefineCompilerFlags.cmake index 710b7e0..7532a91 100644 --- a/cmake/Modules/WaffleDefineCompilerFlags.cmake +++ b/cmake/Modules/WaffleDefineCompilerFlags.cmake @@ -125,6 +125,10 @@ if(waffle_on_linux) add_definitions(-D_XOPEN_SOURCE=600) endif() +if(waffle_has_nacl) + add_definitions(-DWAFFLE_HAS_NACL) +endif() + if(waffle_on_windows) add_definitions(-DWAFFLE_HAS_WGL) endif() diff --git a/cmake/Modules/WaffleValidateOptions.cmake b/cmake/Modules/WaffleValidateOptions.cmake index ea60b0e..1275463 100644 --- a/cmake/Modules/WaffleValidateOptions.cmake +++ b/cmake/Modules/WaffleValidateOptions.cmake @@ -46,11 +46,38 @@ endif() if(waffle_on_linux) if(NOT waffle_has_glx AND NOT waffle_has_wayland AND - NOT waffle_has_x11_egl AND NOT waffle_has_gbm) + NOT waffle_has_x11_egl AND NOT waffle_has_gbm AND + NOT waffle_has_nacl) message(FATAL_ERROR "Must enable at least one of: " "waffle_has_glx, waffle_has_wayland, " - "waffle_has_x11_egl, waffle_has_gbm.") + "waffle_has_x11_egl, waffle_has_gbm, " + "waffle_has_nacl.") + endif() + if(waffle_has_nacl) + if(NOT EXISTS ${nacl_sdk_path}) + message(FATAL_ERROR "NaCl SDK path not found : ${nacl_sdk_path}") + endif() + + if(NOT EXISTS ${CMAKE_TOOLCHAIN_FILE}) + message(FATAL_ERROR "Toolchain for Nacl not found. This must be " + "configured using CMAKE_TOOLCHAIN_FILE.") + endif() + + # Warn the user that building tests is disabled. + if(waffle_build_tests) + message(WARNING "Building the tests with the NaCl backend " + "is not supported, skipping tests.") + set(waffle_build_tests OFF) + endif() + + # When building for NaCl, disable incompatible backends. + set(waffle_has_gbm OFF) + set(waffle_has_egl OFF) + set(waffle_has_glx OFF) + set(waffle_has_x11 OFF) + set(waffle_has_x11_egl OFF) + set(waffle_has_wayland OFF) endif() if(waffle_has_gbm) if(NOT gbm_FOUND) diff --git a/cmake/toolchain-nacl-x86_32-glibc.cmake b/cmake/toolchain-nacl-x86_32-glibc.cmake new file mode 100644 index 0000000..ec5779f --- /dev/null +++ b/cmake/toolchain-nacl-x86_32-glibc.cmake @@ -0,0 +1,41 @@ +# +# NaCl toolchain file for 32bit x86 using glibc C library +# + +if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux") + set(CMAKE_SYSTEM_NAME "Linux") + set(nacl_host_os "linux") +else() + message(FATAL_ERROR "TODO: NaCl support on ${CMAKE_HOST_SYSTEM_NAME}") +endif() + +set(nacl_target_arch "i686") +set(nacl_ports "glibc_x86_32") +set(nacl_toolchain "${nacl_host_os}_x86_glibc") + +# setup paths for nacl +set(nacl_root ${nacl_sdk_path}/${nacl_version}) +set(nacl_toolpath ${nacl_root}/toolchain/${nacl_toolchain}/bin) + +# setup compilers from toolchain +set(CMAKE_C_COMPILER ${nacl_toolpath}/${nacl_target_arch}-nacl-gcc) +set(CMAKE_CXX_COMPILER ${nacl_toolpath}/${nacl_target_arch}-nacl-g++) + +set(CMAKE_FIND_ROOT_PATH ${nacl_root}) + +# for FIND_LIBRARY|INCLUDE use ${nacl_root} only, +# for helper programs during build time, use host +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) + +# setup nacl includes and required libraries +set(nacl_INCLUDE_DIRS ${nacl_INCLUDE_DIRS} ${nacl_sdk_path}/${nacl_version}/include) +set(nacl_LIBS ${nacl_sdk_path}/${nacl_version}/lib/${nacl_ports}/${CMAKE_BUILD_TYPE}) +set(nacl_LDFLAGS + -L${nacl_LIBS} + -lppapi_cpp + -lppapi + -lpthread + -ldl + ) diff --git a/cmake/toolchain-nacl-x86_64-glibc.cmake b/cmake/toolchain-nacl-x86_64-glibc.cmake new file mode 100644 index 0000000..f3109ab --- /dev/null +++ b/cmake/toolchain-nacl-x86_64-glibc.cmake @@ -0,0 +1,41 @@ +# +# NaCl toolchain file for 64bit x86 using glibc C library +# + +if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux") + set(CMAKE_SYSTEM_NAME "Linux") + set(nacl_host_os "linux") +else() + message(FATAL_ERROR "TODO: NaCl support on ${CMAKE_HOST_SYSTEM_NAME}") +endif() + +set(nacl_target_arch "x86_64") +set(nacl_ports "glibc_x86_64") +set(nacl_toolchain "${nacl_host_os}_x86_glibc") + +# setup paths for nacl +set(nacl_root ${nacl_sdk_path}/${nacl_version}) +set(nacl_toolpath ${nacl_root}/toolchain/${nacl_toolchain}/bin) + +# setup compilers from toolchain +set(CMAKE_C_COMPILER ${nacl_toolpath}/${nacl_target_arch}-nacl-gcc) +set(CMAKE_CXX_COMPILER ${nacl_toolpath}/${nacl_target_arch}-nacl-g++) + +set(CMAKE_FIND_ROOT_PATH ${nacl_root}) + +# for FIND_LIBRARY|INCLUDE use ${nacl_root} only, +# for helper programs during build time, use host +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) + +# setup nacl includes and required libraries +set(nacl_INCLUDE_DIRS ${nacl_INCLUDE_DIRS} ${nacl_sdk_path}/${nacl_version}/include) +set(nacl_LIBS ${nacl_sdk_path}/${nacl_version}/lib/${nacl_ports}/${CMAKE_BUILD_TYPE}) +set(nacl_LDFLAGS + -L${nacl_LIBS} + -lppapi_cpp + -lppapi + -lpthread + -ldl + ) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 281ef47..fc0bda2 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -11,7 +11,7 @@ install( # Target: simple-x11-egl (executable) # ---------------------------------------------------------------------------- -if(waffle_on_linux) +if(waffle_on_linux AND waffle_has_x11_egl) add_executable(simple-x11-egl simple-x11-egl.c) target_link_libraries(simple-x11-egl ${waffle_libname}) endif() @@ -20,6 +20,10 @@ endif() # Target: gl_basic (executable) # ---------------------------------------------------------------------------- +if(waffle_has_nacl) + return() +endif() + add_executable(gl_basic gl_basic.c) target_link_libraries(gl_basic ${waffle_libname} ${GETOPT_LIBRARIES}) diff --git a/include/waffle/waffle.h b/include/waffle/waffle.h index e04b23f..77885a4 100644 --- a/include/waffle/waffle.h +++ b/include/waffle/waffle.h @@ -104,6 +104,7 @@ enum waffle_enum { WAFFLE_PLATFORM_X11_EGL = 0x0015, WAFFLE_PLATFORM_GBM = 0x0016, WAFFLE_PLATFORM_WGL = 0x0017, + WAFFLE_PLATFORM_NACL = 0x0018, // ------------------------------------------------------------------ // For waffle_config_choose() diff --git a/man/waffle_enum.3.xml b/man/waffle_enum.3.xml index a96bd20..07edd6c 100644 --- a/man/waffle_enum.3.xml +++ b/man/waffle_enum.3.xml @@ -101,6 +101,7 @@ enum waffle_enum { WAFFLE_PLATFORM_X11_EGL = 0x0015, WAFFLE_PLATFORM_GBM = 0x0016, WAFFLE_PLATFORM_WGL = 0x0017, + WAFFLE_PLATFORM_NACL = 0x0018, // ------------------------------------------------------------------ // For waffle_config_choose() diff --git a/man/waffle_init.3.xml b/man/waffle_init.3.xml index a22723d..d74601a 100644 --- a/man/waffle_init.3.xml +++ b/man/waffle_init.3.xml @@ -121,6 +121,14 @@ </listitem> </varlistentry> <varlistentry> + <term><constant>WAFFLE_PLATFORM_NACL</constant></term> + <listitem> + <para> + [Linux only, other systems not yet supported] + </para> + </listitem> + </varlistentry> + <varlistentry> <term><constant>WAFFLE_PLATFORM_WAYLAND</constant></term> <listitem> <para> diff --git a/src/utils/CMakeLists.txt b/src/utils/CMakeLists.txt index 9cb6cc7..22edc6e 100644 --- a/src/utils/CMakeLists.txt +++ b/src/utils/CMakeLists.txt @@ -2,6 +2,10 @@ # Target: wflinfo (executable) # ---------------------------------------------------------------------------- +if(waffle_has_nacl) + return() +endif() + add_executable(wflinfo wflinfo.c) target_link_libraries(wflinfo ${waffle_libname} ${GETOPT_LIBRARIES}) diff --git a/src/waffle/CMakeLists.txt b/src/waffle/CMakeLists.txt index d76e029..ac9b415 100644 --- a/src/waffle/CMakeLists.txt +++ b/src/waffle/CMakeLists.txt @@ -15,6 +15,7 @@ include_directories( egl glx linux + nacl wayland wgl x11 @@ -25,6 +26,7 @@ include_directories( ${gl_INCLUDE_DIRS} ${GLEXT_INCLUDE_DIR} ${libudev_INCLUDE_DIRS} + ${nacl_INCLUDE_DIRS} ${wayland-client_INCLUDE_DIRS} ${wayland-egl_INCLUDE_DIRS} ${x11-xcb_INCLUDE_DIRS} @@ -57,6 +59,12 @@ if(waffle_on_linux) endif() endif() +if(waffle_has_nacl) + list(APPEND waffle_libdeps + ${nacl_LDFLAGS} + ) +endif() + set(waffle_sources api/api_priv.c api/waffle_attrib_list.c @@ -173,6 +181,19 @@ if(waffle_on_windows) ) endif() +if(waffle_has_nacl) + list(APPEND waffle_sources + nacl/nacl_config.c + nacl/nacl_context.c + nacl/nacl_display.c + nacl/nacl_platform.c + nacl/nacl_window.c + ) + list(APPEND waffle_cxx_sources + nacl/nacl_container.cpp + ) +endif() + # CMake will pass to the C compiler only C sources. CMake does not recognize the # .m extension and ignores any such files in the source lists. To coerce CMake # to pass .m files to the compiler, we must lie and claim that they are @@ -202,7 +223,7 @@ include_directories( ${XCB_INCLUDE_DIRS} ) -add_library(${waffle_libname} SHARED ${waffle_sources}) +add_library(${waffle_libname} SHARED ${waffle_sources} ${waffle_cxx_sources}) # Debian's packaging system emits warnings if wflinfo directly links to any # library that it doesn't directly use. Silence the warnings by annotating diff --git a/src/waffle/api/waffle_init.c b/src/waffle/api/waffle_init.c index ebc6cd5..fcf8456 100644 --- a/src/waffle/api/waffle_init.c +++ b/src/waffle/api/waffle_init.c @@ -35,6 +35,7 @@ struct wcore_platform* wayland_platform_create(void); struct wcore_platform* xegl_platform_create(void); struct wcore_platform* wgbm_platform_create(void); struct wcore_platform* wgl_platform_create(void); +struct wcore_platform* nacl_platform_create(void); static bool waffle_init_parse_attrib_list( @@ -104,6 +105,12 @@ waffle_init_parse_attrib_list( CASE_UNDEFINED_PLATFORM(WGL) #endif +#ifdef WAFFLE_HAS_NACL + CASE_DEFINED_PLATFORM(NACL) +#else + CASE_UNDEFINED_PLATFORM(NACL) +#endif + default: wcore_errorf(WAFFLE_ERROR_BAD_ATTRIBUTE, "WAFFLE_PLATFORM has bad value 0x%x", @@ -164,6 +171,10 @@ waffle_init_create_platform(int32_t waffle_platform) case WAFFLE_PLATFORM_WGL: return wgl_platform_create(); #endif +#ifdef WAFFLE_HAS_NACL + case WAFFLE_PLATFORM_NACL: + return nacl_platform_create(); +#endif default: assert(false); return NULL; diff --git a/src/waffle/core/wcore_util.c b/src/waffle/core/wcore_util.c index deee1bf..b2dafe4 100644 --- a/src/waffle/core/wcore_util.c +++ b/src/waffle/core/wcore_util.c @@ -62,6 +62,7 @@ wcore_enum_to_string(int32_t e) CASE(WAFFLE_PLATFORM_X11_EGL); CASE(WAFFLE_PLATFORM_GBM); CASE(WAFFLE_PLATFORM_WGL); + CASE(WAFFLE_PLATFORM_NACL); CASE(WAFFLE_CONTEXT_API); CASE(WAFFLE_CONTEXT_OPENGL); CASE(WAFFLE_CONTEXT_OPENGL_ES1); diff --git a/src/waffle/nacl/nacl_config.c b/src/waffle/nacl/nacl_config.c new file mode 100644 index 0000000..27a75e1 --- /dev/null +++ b/src/waffle/nacl/nacl_config.c @@ -0,0 +1,63 @@ +// Copyright 2014 Intel Corporation +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// - Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// +// - Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include "nacl_config.h" + +bool +nacl_config_destroy(struct wcore_config *wc_self) +{ + bool ok = true; + + if (wc_self == NULL) + return ok; + + ok &= wcore_config_teardown(wc_self); + free(nacl_config(wc_self)); + return ok; +} + +struct wcore_config* +nacl_config_choose(struct wcore_platform *wc_plat, + struct wcore_display *wc_dpy, + const struct wcore_config_attrs *attrs) +{ + struct nacl_config *self; + bool ok = true; + + self = wcore_calloc(sizeof(*self)); + if (self == NULL) + return NULL; + + ok = wcore_config_init(&self->wcore, wc_dpy, attrs); + if (!ok) + goto error; + + return &self->wcore; + +error: + nacl_config_destroy(&self->wcore); + self = NULL; + return NULL; +} diff --git a/src/waffle/nacl/nacl_config.h b/src/waffle/nacl/nacl_config.h new file mode 100644 index 0000000..3270179 --- /dev/null +++ b/src/waffle/nacl/nacl_config.h @@ -0,0 +1,49 @@ +// Copyright 2014 Intel Corporation +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// - Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// +// - Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#pragma once + +#include "wcore_config.h" +#include "wcore_util.h" + +struct wcore_config_attrs; +struct wcore_platform; + +struct nacl_config { + struct wcore_config wcore; +}; + +DEFINE_CONTAINER_CAST_FUNC(nacl_config, + struct nacl_config, + struct wcore_config, + wcore) + +struct wcore_config* +nacl_config_choose(struct wcore_platform *wc_plat, + struct wcore_display *wc_dpy, + const struct wcore_config_attrs *attrs); + +bool +nacl_config_destroy(struct wcore_config *wc_self); diff --git a/src/waffle/nacl/nacl_container.cpp b/src/waffle/nacl/nacl_container.cpp new file mode 100644 index 0000000..3e8073c --- /dev/null +++ b/src/waffle/nacl/nacl_container.cpp @@ -0,0 +1,66 @@ +// Copyright 2014 Intel Corporation +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// - Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// +// - Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include "ppapi/cpp/graphics_3d.h" +#include "nacl_container.h" + +namespace waffle { + +struct nacl_container { + pp::Graphics3D ctx; +}; + +static void +nacl_container_dtor(waffle::nacl_container *nc) +{ + if (!nc) + return; + delete nc; +} + +static nacl_container* +nacl_container_ctor() +{ + nacl_container *nc = new nacl_container; + + if (!nc) + return NULL; + + return nc; +} + +}; // namespace waffle ends + +extern "C" struct nacl_container* +nacl_init() +{ + return reinterpret_cast<nacl_container*>(waffle::nacl_container_ctor()); +} + +extern "C" void +nacl_teardown(nacl_container *nc) +{ + waffle::nacl_container_dtor(reinterpret_cast<waffle::nacl_container*>(nc)); +} diff --git a/src/waffle/nacl/nacl_container.h b/src/waffle/nacl/nacl_container.h new file mode 100644 index 0000000..61d935c --- /dev/null +++ b/src/waffle/nacl/nacl_container.h @@ -0,0 +1,38 @@ +// Copyright 2014 Intel Corporation +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// - Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// +// - Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#ifdef __cplusplus + +extern "C" { +#endif + +struct nacl_container; + +struct nacl_container *nacl_init(); +void nacl_teardown(struct nacl_container *nc); + +#ifdef __cplusplus +}; +#endif diff --git a/src/waffle/nacl/nacl_context.c b/src/waffle/nacl/nacl_context.c new file mode 100644 index 0000000..2e68a64 --- /dev/null +++ b/src/waffle/nacl/nacl_context.c @@ -0,0 +1,65 @@ +// Copyright 2014 Intel Corporation +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// - Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// +// - Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include "nacl_context.h" + +bool +nacl_context_destroy(struct wcore_context *wc_self) +{ + struct nacl_context *self; + bool ok = true; + + if (!wc_self) + return ok; + + self = nacl_context(wc_self); + + ok &= wcore_context_teardown(wc_self); + free(self); + return ok; +} + +struct wcore_context* +nacl_context_create(struct wcore_platform *wc_plat, + struct wcore_config *wc_config, + struct wcore_context *wc_share_ctx) +{ + struct nacl_context *self; + bool ok = true; + + self = wcore_calloc(sizeof(*self)); + if (self == NULL) + return NULL; + + ok = wcore_context_init(&self->wcore, wc_config); + if (!ok) + goto error; + + return &self->wcore; + +error: + nacl_context_destroy(&self->wcore); + return NULL; +} diff --git a/src/waffle/nacl/nacl_context.h b/src/waffle/nacl/nacl_context.h new file mode 100644 index 0000000..bb4481a --- /dev/null +++ b/src/waffle/nacl/nacl_context.h @@ -0,0 +1,52 @@ +// Copyright 2014 Intel Corporation +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// - Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// +// - Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#pragma once + +#include "wcore_context.h" +#include "wcore_util.h" + +#include "nacl_display.h" +#include "nacl_platform.h" + +struct wcore_config; +struct wcore_platform; + +struct nacl_context { + struct wcore_context wcore; +}; + +DEFINE_CONTAINER_CAST_FUNC(nacl_context, + struct nacl_context, + struct wcore_context, + wcore) + +struct wcore_context* +nacl_context_create(struct wcore_platform *wc_plat, + struct wcore_config *wc_config, + struct wcore_context *wc_share_ctx); + +bool +nacl_context_destroy(struct wcore_context *wc_self); diff --git a/src/waffle/nacl/nacl_display.c b/src/waffle/nacl/nacl_display.c new file mode 100644 index 0000000..2d1162e --- /dev/null +++ b/src/waffle/nacl/nacl_display.c @@ -0,0 +1,70 @@ +// Copyright 2014 Intel Corporation +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// - Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// +// - Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include "nacl_display.h" + +bool +nacl_display_destroy(struct wcore_display *wc_self) +{ + struct nacl_display *self = nacl_display(wc_self); + bool ok = true; + + if (!self) + return ok; + + ok &= wcore_display_teardown(&self->wcore); + + free(self); + return ok; +} + +struct wcore_display* +nacl_display_connect(struct wcore_platform *wc_plat, + const char *name) +{ + struct nacl_display *self; + bool ok = true; + + self = wcore_calloc(sizeof(*self)); + if (self == NULL) + return NULL; + + ok = wcore_display_init(&self->wcore, wc_plat); + if (!ok) + goto error; + + return &self->wcore; + +error: + nacl_display_destroy(&self->wcore); + return NULL; +} + +bool +nacl_display_supports_context_api(struct wcore_display *wc_self, + int32_t context_api) +{ + return false; +} diff --git a/src/waffle/nacl/nacl_display.h b/src/waffle/nacl/nacl_display.h new file mode 100644 index 0000000..34eee21 --- /dev/null +++ b/src/waffle/nacl/nacl_display.h @@ -0,0 +1,52 @@ +// Copyright 2014 Intel Corporation +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// - Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// +// - Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#pragma once + +#include "wcore_display.h" +#include "wcore_error.h" +#include "wcore_util.h" + +struct wcore_platform; + +struct nacl_display { + struct wcore_display wcore; +}; + +DEFINE_CONTAINER_CAST_FUNC(nacl_display, + struct nacl_display, + struct wcore_display, + wcore) + +struct wcore_display* +nacl_display_connect(struct wcore_platform *wc_plat, + const char *name); + +bool +nacl_display_destroy(struct wcore_display *wc_self); + +bool +nacl_display_supports_context_api(struct wcore_display *wc_self, + int32_t context_api); diff --git a/src/waffle/nacl/nacl_platform.c b/src/waffle/nacl/nacl_platform.c new file mode 100644 index 0000000..b4df9d9 --- /dev/null +++ b/src/waffle/nacl/nacl_platform.c @@ -0,0 +1,134 @@ +// Copyright 2014 Intel Corporation +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// - Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// +// - Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <dlfcn.h> +#include <stdio.h> + +#include "nacl_platform.h" + +static const struct wcore_platform_vtbl nacl_platform_vtbl; + +static bool +nacl_platform_destroy(struct wcore_platform *wc_self) +{ + struct nacl_platform *self = nacl_platform(wc_self); + bool ok = true; + + if (!self) + return true; + + ok &= wcore_platform_teardown(wc_self); + + nacl_teardown(self->nacl); + + free(self); + return ok; +} + +static bool +nacl_platform_dl_can_open(struct wcore_platform *wc_self, + int32_t waffle_dl) +{ + return false; +} + +static void* +nacl_platform_dl_sym(struct wcore_platform *wc_self, + int32_t waffle_dl, + const char *name) +{ + return NULL; +} + +static bool +nacl_platform_make_current(struct wcore_platform *wc_self, + struct wcore_display *wc_dpy, + struct wcore_window *wc_window, + struct wcore_context *wc_ctx) +{ + return false; +} + +struct wcore_platform* +nacl_platform_create(void) +{ + struct nacl_platform *self; + bool ok = true; + + self = wcore_calloc(sizeof(*self)); + if (self == NULL) + return NULL; + + ok = wcore_platform_init(&self->wcore); + if (!ok) + goto error; + + self->nacl = nacl_init(); + if (!self->nacl) + goto error; + + self->wcore.vtbl = &nacl_platform_vtbl; + return &self->wcore; + +error: + nacl_platform_destroy(&self->wcore); + return NULL; +} + +static const struct wcore_platform_vtbl nacl_platform_vtbl = { + .destroy = nacl_platform_destroy, + + .make_current = nacl_platform_make_current, + .dl_can_open = nacl_platform_dl_can_open, + .dl_sym = nacl_platform_dl_sym, + + .display = { + .connect = nacl_display_connect, + .destroy = nacl_display_destroy, + .supports_context_api = nacl_display_supports_context_api, + .get_native = NULL, + }, + + .config = { + .choose = nacl_config_choose, + .destroy = nacl_config_destroy, + .get_native = NULL, + }, + + .context = { + .create = nacl_context_create, + .destroy = nacl_context_destroy, + .get_native = NULL, + }, + + .window = { + .create = nacl_window_create, + .destroy = nacl_window_destroy, + .show = nacl_window_show, + .swap_buffers = nacl_window_swap_buffers, + .resize = nacl_window_resize, + .get_native = NULL, + }, +}; diff --git a/src/waffle/nacl/nacl_platform.h b/src/waffle/nacl/nacl_platform.h new file mode 100644 index 0000000..ba58de5 --- /dev/null +++ b/src/waffle/nacl/nacl_platform.h @@ -0,0 +1,49 @@ +// Copyright 2014 Intel Corporation +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// - Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// +// - Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#pragma once + +#include "wcore_platform.h" +#include "wcore_error.h" +#include "wcore_util.h" + +#include "nacl_config.h" +#include "nacl_container.h" +#include "nacl_context.h" +#include "nacl_display.h" +#include "nacl_window.h" + +struct nacl_platform { + struct wcore_platform wcore; + struct nacl_container *nacl; +}; + +DEFINE_CONTAINER_CAST_FUNC(nacl_platform, + struct nacl_platform, + struct wcore_platform, + wcore) + +struct wcore_platform* +nacl_platform_create(void); diff --git a/src/waffle/nacl/nacl_window.c b/src/waffle/nacl/nacl_window.c new file mode 100644 index 0000000..c5ba4e0 --- /dev/null +++ b/src/waffle/nacl/nacl_window.c @@ -0,0 +1,90 @@ +// Copyright 2014 Intel Corporation +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// - Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// +// - Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include "wcore_error.h" +#include "nacl_config.h" +#include "nacl_display.h" +#include "nacl_window.h" +#include "nacl_platform.h" + +bool +nacl_window_destroy(struct wcore_window *wc_self) +{ + struct nacl_window *self = nacl_window(wc_self); + bool ok = true; + + if (!wc_self) + return ok; + + ok &= wcore_window_teardown(wc_self); + free(self); + return ok; +} + +struct wcore_window* +nacl_window_create(struct wcore_platform *wc_plat, + struct wcore_config *wc_config, + int width, + int height) +{ + struct nacl_window *self; + bool ok = true; + + self = wcore_calloc(sizeof(*self)); + if (self == NULL) + return NULL; + + ok = wcore_window_init(&self->wcore, wc_config); + if (!ok) + goto error; + + if (!ok) + goto error; + + return &self->wcore; + +error: + nacl_window_destroy(&self->wcore); + return NULL; +} + +bool +nacl_window_show(struct wcore_window *wc_self) +{ + return true; +} + +bool +nacl_window_resize(struct wcore_window *wc_self, + int32_t width, int32_t height) +{ + return false; +} + +bool +nacl_window_swap_buffers(struct wcore_window *wc_self) +{ + return false; +} diff --git a/src/waffle/nacl/nacl_window.h b/src/waffle/nacl/nacl_window.h new file mode 100644 index 0000000..5f0906d --- /dev/null +++ b/src/waffle/nacl/nacl_window.h @@ -0,0 +1,59 @@ +// Copyright 2014 Intel Corporation +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// - Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// +// - Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#pragma once + +#include "wcore_window.h" +#include "wcore_util.h" +#include "nacl_platform.h" + +struct wcore_platform; + +struct nacl_window { + struct wcore_window wcore; +}; + +DEFINE_CONTAINER_CAST_FUNC(nacl_window, + struct nacl_window, + struct wcore_window, + wcore) +struct wcore_window* +nacl_window_create(struct wcore_platform *wc_plat, + struct wcore_config *wc_config, + int width, + int height); + +bool +nacl_window_destroy(struct wcore_window *wc_self); + +bool +nacl_window_show(struct wcore_window *wc_self); + +bool +nacl_window_resize(struct wcore_window *wc_self, + int32_t width, int32_t height); + +bool +nacl_window_swap_buffers(struct wcore_window *wc_self); |