summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChad Versace <chad.versace@intel.com>2015-01-20 09:53:44 -0800
committerChad Versace <chad.versace@intel.com>2015-01-20 09:53:44 -0800
commit6c46bfd71b522c510b736848625fc0dc382df6e7 (patch)
tree5117ed6f0a5e9e9e8f6d7ea8d577a9ffae2f3ce9
parente69f4129b5c79a9a9df414999c3c629a95e1197a (diff)
parent27be37613809db2f535e133a674b8b392eadcc71 (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
-rw-r--r--CMakeLists.txt2
-rw-r--r--Options.cmake5
-rw-r--r--cmake/Modules/WaffleDefineCompilerFlags.cmake4
-rw-r--r--cmake/Modules/WaffleValidateOptions.cmake31
-rw-r--r--cmake/toolchain-nacl-x86_32-glibc.cmake41
-rw-r--r--cmake/toolchain-nacl-x86_64-glibc.cmake41
-rw-r--r--examples/CMakeLists.txt6
-rw-r--r--include/waffle/waffle.h1
-rw-r--r--man/waffle_enum.3.xml1
-rw-r--r--man/waffle_init.3.xml8
-rw-r--r--src/utils/CMakeLists.txt4
-rw-r--r--src/waffle/CMakeLists.txt23
-rw-r--r--src/waffle/api/waffle_init.c11
-rw-r--r--src/waffle/core/wcore_util.c1
-rw-r--r--src/waffle/nacl/nacl_config.c63
-rw-r--r--src/waffle/nacl/nacl_config.h49
-rw-r--r--src/waffle/nacl/nacl_container.cpp66
-rw-r--r--src/waffle/nacl/nacl_container.h38
-rw-r--r--src/waffle/nacl/nacl_context.c65
-rw-r--r--src/waffle/nacl/nacl_context.h52
-rw-r--r--src/waffle/nacl/nacl_display.c70
-rw-r--r--src/waffle/nacl/nacl_display.h52
-rw-r--r--src/waffle/nacl/nacl_platform.c134
-rw-r--r--src/waffle/nacl/nacl_platform.h49
-rw-r--r--src/waffle/nacl/nacl_window.c90
-rw-r--r--src/waffle/nacl/nacl_window.h59
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);