Browse Source
Similarly to the windowless ones, one of them gets picked up to be platform.Application.pull/1/head
8 changed files with 511 additions and 0 deletions
@ -0,0 +1,94 @@ |
|||||||
|
#.rst: |
||||||
|
# Find GLFW |
||||||
|
# --------- |
||||||
|
# |
||||||
|
# Finds the GLFW library using its cmake config if that exists, otherwise |
||||||
|
# falls back to finding it manually. This module defines: |
||||||
|
# |
||||||
|
# GLFW_FOUND - True if GLFW library is found |
||||||
|
# GLFW::GLFW - GLFW imported target |
||||||
|
# |
||||||
|
# Additionally, in case the config was not found, these variables are defined |
||||||
|
# for internal usage: |
||||||
|
# |
||||||
|
# GLFW_LIBRARY - GLFW library |
||||||
|
# GLFW_INCLUDE_DIR - Root include dir |
||||||
|
# |
||||||
|
|
||||||
|
# |
||||||
|
# This file is part of Magnum. |
||||||
|
# |
||||||
|
# Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 |
||||||
|
# Vladimír Vondruš <mosra@centrum.cz> |
||||||
|
# Copyright © 2016 Jonathan Hale <squareys@googlemail.com> |
||||||
|
# |
||||||
|
# Permission is hereby granted, free of charge, to any person obtaining a |
||||||
|
# copy of this software and associated documentation files (the "Software"), |
||||||
|
# to deal in the Software without restriction, including without limitation |
||||||
|
# the rights to use, copy, modify, merge, publish, distribute, sublicense, |
||||||
|
# and/or sell copies of the Software, and to permit persons to whom the |
||||||
|
# Software is furnished to do so, subject to the following conditions: |
||||||
|
# |
||||||
|
# The above copyright notice and this permission notice shall be included |
||||||
|
# in all copies or substantial portions of the Software. |
||||||
|
# |
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||||
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
||||||
|
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||||
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
||||||
|
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
||||||
|
# DEALINGS IN THE SOFTWARE. |
||||||
|
# |
||||||
|
|
||||||
|
# GLFW installs cmake package config files to shared/ folder which handles |
||||||
|
# dependencies in case GLFW is built statically. Try to find first, quietly, so |
||||||
|
# it doesn't print loud messages when it's not found, since that's okay. |
||||||
|
find_package(glfw3 CONFIG QUIET) |
||||||
|
|
||||||
|
if(TARGET glfw) |
||||||
|
if(NOT TARGET GLFW::GLFW) |
||||||
|
# Aliases of (global) targets are only supported in CMake 3.11, so we |
||||||
|
# work around it by this. This is easier than fetching all possible |
||||||
|
# properties (which are impossible to track of) and then attempting to |
||||||
|
# rebuild them into a new target. |
||||||
|
add_library(GLFW::GLFW INTERFACE IMPORTED) |
||||||
|
set_target_properties(GLFW::GLFW PROPERTIES INTERFACE_LINK_LIBRARIES glfw) |
||||||
|
endif() |
||||||
|
|
||||||
|
# Just to make FPHSA print some meaningful location, nothing else |
||||||
|
get_target_property(_GLFW_INTERFACE_INCLUDE_DIRECTORIES glfw INTERFACE_INCLUDE_DIRECTORIES) |
||||||
|
include(FindPackageHandleStandardArgs) |
||||||
|
find_package_handle_standard_args("GLFW" DEFAULT_MSG |
||||||
|
_GLFW_INTERFACE_INCLUDE_DIRECTORIES) |
||||||
|
return() |
||||||
|
endif() |
||||||
|
|
||||||
|
# In case no config file was found, try manually finding the library. |
||||||
|
find_library(GLFW_LIBRARY NAMES glfw glfw3) |
||||||
|
|
||||||
|
# Include dir |
||||||
|
find_path(GLFW_INCLUDE_DIR |
||||||
|
NAMES GLFW/glfw3.h) |
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs) |
||||||
|
find_package_handle_standard_args("GLFW" DEFAULT_MSG |
||||||
|
GLFW_LIBRARY |
||||||
|
GLFW_INCLUDE_DIR) |
||||||
|
|
||||||
|
if(NOT TARGET GLFW::GLFW) |
||||||
|
add_library(GLFW::GLFW UNKNOWN IMPORTED) |
||||||
|
|
||||||
|
# Work around BUGGY framework support on macOS |
||||||
|
# https://cmake.org/Bug/view.php?id=14105 |
||||||
|
if(CORRADE_TARGET_APPLE AND ${GLFW_LIBRARY} MATCHES "\\.framework$") |
||||||
|
set_property(TARGET GLFW::GLFW PROPERTY IMPORTED_LOCATION ${GLFW_LIBRARY}/GLFW) |
||||||
|
else() |
||||||
|
set_property(TARGET GLFW::GLFW PROPERTY IMPORTED_LOCATION ${GLFW_LIBRARY}) |
||||||
|
endif() |
||||||
|
|
||||||
|
set_property(TARGET GLFW::GLFW PROPERTY |
||||||
|
INTERFACE_INCLUDE_DIRECTORIES ${GLFW_INCLUDE_DIR}) |
||||||
|
endif() |
||||||
|
|
||||||
|
mark_as_advanced(GLFW_LIBRARY GLFW_INCLUDE_DIR) |
||||||
@ -0,0 +1,173 @@ |
|||||||
|
#.rst: |
||||||
|
# Find SDL2 |
||||||
|
# --------- |
||||||
|
# |
||||||
|
# Finds the SDL2 library. This module defines: |
||||||
|
# |
||||||
|
# SDL2_FOUND - True if SDL2 library is found |
||||||
|
# SDL2::SDL2 - SDL2 imported target |
||||||
|
# |
||||||
|
# Additionally these variables are defined for internal usage: |
||||||
|
# |
||||||
|
# SDL2_LIBRARY_DEBUG - SDL2 debug library, if found |
||||||
|
# SDL2_LIBRARY_RELEASE - SDL2 release library, if found |
||||||
|
# SDL2_INCLUDE_DIR - Root include dir |
||||||
|
# |
||||||
|
|
||||||
|
# |
||||||
|
# This file is part of Magnum. |
||||||
|
# |
||||||
|
# Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 |
||||||
|
# Vladimír Vondruš <mosra@centrum.cz> |
||||||
|
# Copyright © 2018 Jonathan Hale <squareys@googlemail.com> |
||||||
|
# |
||||||
|
# Permission is hereby granted, free of charge, to any person obtaining a |
||||||
|
# copy of this software and associated documentation files (the "Software"), |
||||||
|
# to deal in the Software without restriction, including without limitation |
||||||
|
# the rights to use, copy, modify, merge, publish, distribute, sublicense, |
||||||
|
# and/or sell copies of the Software, and to permit persons to whom the |
||||||
|
# Software is furnished to do so, subject to the following conditions: |
||||||
|
# |
||||||
|
# The above copyright notice and this permission notice shall be included |
||||||
|
# in all copies or substantial portions of the Software. |
||||||
|
# |
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||||
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
||||||
|
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||||
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
||||||
|
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
||||||
|
# DEALINGS IN THE SOFTWARE. |
||||||
|
# |
||||||
|
|
||||||
|
# In Emscripten SDL is linked automatically, thus no need to find the library. |
||||||
|
# Also the includes are in SDL subdirectory, not SDL2. |
||||||
|
if(CORRADE_TARGET_EMSCRIPTEN) |
||||||
|
set(_SDL2_PATH_SUFFIXES SDL) |
||||||
|
else() |
||||||
|
set(_SDL2_PATH_SUFFIXES SDL2) |
||||||
|
if(WIN32) |
||||||
|
# Precompiled libraries for MSVC are in x86/x64 subdirectories |
||||||
|
if(MSVC) |
||||||
|
if(CMAKE_SIZEOF_VOID_P EQUAL 8) |
||||||
|
set(_SDL2_LIBRARY_PATH_SUFFIX lib/x64) |
||||||
|
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) |
||||||
|
set(_SDL2_LIBRARY_PATH_SUFFIX lib/x86) |
||||||
|
endif() |
||||||
|
|
||||||
|
# Both includes and libraries for MinGW are in some directory deep |
||||||
|
# inside. There's also a CMake config file but it has HARDCODED path |
||||||
|
# to /opt/local/i686-w64-mingw32, which doesn't make ANY SENSE, |
||||||
|
# especially on Windows. |
||||||
|
elseif(MINGW) |
||||||
|
if(CMAKE_SIZEOF_VOID_P EQUAL 8) |
||||||
|
set(_SDL2_LIBRARY_PATH_SUFFIX x86_64-w64-mingw32/lib) |
||||||
|
list(APPEND _SDL2_PATH_SUFFIXES x86_64-w64-mingw32/include/SDL2) |
||||||
|
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) |
||||||
|
set(_SDL2_LIBRARY_PATH_SUFFIX i686-w64-mingw32/lib) |
||||||
|
list(APPEND _SDL2_PATH_SUFFIXES i686-w64-mingw32/include/SDL2) |
||||||
|
endif() |
||||||
|
endif() |
||||||
|
endif() |
||||||
|
|
||||||
|
find_library(SDL2_LIBRARY_RELEASE |
||||||
|
# Compiling SDL2 from scratch on macOS creates dead libSDL2.so symlink |
||||||
|
# which CMake somehow prefers before the SDL2-2.0.dylib file. Making |
||||||
|
# the dylib first so it is preferred. Not sure how this maps to debug |
||||||
|
# config though :/ |
||||||
|
NAMES SDL2-2.0 SDL2 |
||||||
|
PATH_SUFFIXES ${_SDL2_LIBRARY_PATH_SUFFIX}) |
||||||
|
find_library(SDL2_LIBRARY_DEBUG |
||||||
|
NAMES SDL2d |
||||||
|
PATH_SUFFIXES ${_SDL2_LIBRARY_PATH_SUFFIX}) |
||||||
|
# FPHSA needs one of the _DEBUG/_RELEASE variables to check that the |
||||||
|
# library was found -- using SDL_LIBRARY, which will get populated by |
||||||
|
# select_library_configurations() below. |
||||||
|
set(SDL2_LIBRARY_NEEDED SDL2_LIBRARY) |
||||||
|
endif() |
||||||
|
|
||||||
|
include(SelectLibraryConfigurations) |
||||||
|
select_library_configurations(SDL2) |
||||||
|
|
||||||
|
# Include dir |
||||||
|
find_path(SDL2_INCLUDE_DIR |
||||||
|
# We must search file which is present only in SDL2 and not in SDL1. |
||||||
|
# Apparently when both SDL.h and SDL_scancode.h are specified, CMake is |
||||||
|
# happy enough that it found SDL.h and doesn't bother about the other. |
||||||
|
# |
||||||
|
# On macOS, where the includes are not in SDL2/SDL.h form (which would |
||||||
|
# solve this issue), but rather SDL2.framework/Headers/SDL.h, CMake might |
||||||
|
# find SDL.framework/Headers/SDL.h if SDL1 is installed, which is wrong. |
||||||
|
NAMES SDL_scancode.h |
||||||
|
PATH_SUFFIXES ${_SDL2_PATH_SUFFIXES}) |
||||||
|
|
||||||
|
# iOS dependencies |
||||||
|
if(CORRADE_TARGET_IOS) |
||||||
|
set(_SDL2_FRAMEWORKS |
||||||
|
AudioToolbox |
||||||
|
AVFoundation |
||||||
|
CoreGraphics |
||||||
|
CoreMotion |
||||||
|
Foundation |
||||||
|
GameController |
||||||
|
QuartzCore |
||||||
|
UIKit) |
||||||
|
set(_SDL2_FRAMEWORK_LIBRARIES ) |
||||||
|
foreach(framework ${_SDL2_FRAMEWORKS}) |
||||||
|
find_library(_SDL2_${framework}_LIBRARY ${framework}) |
||||||
|
mark_as_advanced(_SDL2_${framework}_LIBRARY) |
||||||
|
list(APPEND _SDL2_FRAMEWORK_LIBRARIES ${_SDL2_${framework}_LIBRARY}) |
||||||
|
list(APPEND _SDL2_FRAMEWORK_LIBRARY_NAMES _SDL2_${framework}_LIBRARY) |
||||||
|
endforeach() |
||||||
|
endif() |
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs) |
||||||
|
find_package_handle_standard_args("SDL2" DEFAULT_MSG |
||||||
|
${SDL2_LIBRARY_NEEDED} |
||||||
|
${_SDL2_FRAMEWORK_LIBRARY_NAMES} |
||||||
|
SDL2_INCLUDE_DIR) |
||||||
|
|
||||||
|
if(NOT TARGET SDL2::SDL2) |
||||||
|
if(SDL2_LIBRARY_NEEDED) |
||||||
|
add_library(SDL2::SDL2 UNKNOWN IMPORTED) |
||||||
|
|
||||||
|
# Work around BUGGY framework support on macOS |
||||||
|
# https://cmake.org/Bug/view.php?id=14105 |
||||||
|
if(CORRADE_TARGET_APPLE AND SDL2_LIBRARY_RELEASE MATCHES "\\.framework$") |
||||||
|
set_property(TARGET SDL2::SDL2 APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) |
||||||
|
set_property(TARGET SDL2::SDL2 PROPERTY IMPORTED_LOCATION_RELEASE ${SDL2_LIBRARY_RELEASE}/SDL2) |
||||||
|
else() |
||||||
|
if(SDL2_LIBRARY_RELEASE) |
||||||
|
set_property(TARGET SDL2::SDL2 APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) |
||||||
|
set_property(TARGET SDL2::SDL2 PROPERTY IMPORTED_LOCATION_RELEASE ${SDL2_LIBRARY_RELEASE}) |
||||||
|
endif() |
||||||
|
|
||||||
|
if(SDL2_LIBRARY_DEBUG) |
||||||
|
set_property(TARGET SDL2::SDL2 APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG) |
||||||
|
set_property(TARGET SDL2::SDL2 PROPERTY IMPORTED_LOCATION_DEBUG ${SDL2_LIBRARY_DEBUG}) |
||||||
|
endif() |
||||||
|
endif() |
||||||
|
|
||||||
|
# Link additional `dl` and `pthread` libraries required by a static |
||||||
|
# build of SDL on Unixy platforms (except Apple, where it is most |
||||||
|
# probably some frameworks instead) |
||||||
|
if(CORRADE_TARGET_UNIX AND NOT CORRADE_TARGET_APPLE AND SDL2_LIBRARY MATCHES "${CMAKE_STATIC_LIBRARY_SUFFIX}$") |
||||||
|
find_package(Threads) |
||||||
|
set_property(TARGET SDL2::SDL2 APPEND PROPERTY |
||||||
|
INTERFACE_LINK_LIBRARIES ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS}) |
||||||
|
endif() |
||||||
|
|
||||||
|
# Link frameworks on iOS |
||||||
|
if(CORRADE_TARGET_IOS) |
||||||
|
set_property(TARGET SDL2::SDL2 APPEND PROPERTY |
||||||
|
INTERFACE_LINK_LIBRARIES ${_SDL2_FRAMEWORK_LIBRARIES}) |
||||||
|
endif() |
||||||
|
else() |
||||||
|
add_library(SDL2::SDL2 INTERFACE IMPORTED) |
||||||
|
endif() |
||||||
|
|
||||||
|
set_property(TARGET SDL2::SDL2 PROPERTY |
||||||
|
INTERFACE_INCLUDE_DIRECTORIES ${SDL2_INCLUDE_DIR}) |
||||||
|
endif() |
||||||
|
|
||||||
|
mark_as_advanced(SDL2_INCLUDE_DIR) |
||||||
@ -0,0 +1,72 @@ |
|||||||
|
/*
|
||||||
|
This file is part of Magnum. |
||||||
|
|
||||||
|
Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 |
||||||
|
Vladimír Vondruš <mosra@centrum.cz> |
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a |
||||||
|
copy of this software and associated documentation files (the "Software"), |
||||||
|
to deal in the Software without restriction, including without limitation |
||||||
|
the rights to use, copy, modify, merge, publish, distribute, sublicense, |
||||||
|
and/or sell copies of the Software, and to permit persons to whom the |
||||||
|
Software is furnished to do so, subject to the following conditions: |
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included |
||||||
|
in all copies or substantial portions of the Software. |
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
||||||
|
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
||||||
|
DEALINGS IN THE SOFTWARE. |
||||||
|
*/ |
||||||
|
|
||||||
|
#include <pybind11/pybind11.h> |
||||||
|
|
||||||
|
#include "magnum/bootstrap.h" |
||||||
|
|
||||||
|
namespace magnum { namespace platform { |
||||||
|
|
||||||
|
template<class T, class Trampoline> void application(py::class_<T, Trampoline>& c) { |
||||||
|
py::class_<typename T::Configuration> configuration{c, "Configuration", "Configuration"}; |
||||||
|
configuration |
||||||
|
.def(py::init()) |
||||||
|
.def_property("title", &T::Configuration::title, |
||||||
|
[](typename T::Configuration& self, const std::string& title) { |
||||||
|
self.setTitle(title); |
||||||
|
}, "Window title") |
||||||
|
.def_property("size", &T::Configuration::size, |
||||||
|
[](typename T::Configuration& self, const Vector2i& size) { |
||||||
|
self.setSize(size); |
||||||
|
}, "Window size"); |
||||||
|
/** @todo others */ |
||||||
|
|
||||||
|
py::class_<typename T::GLConfiguration> glConfiguration{c, "GLConfiguration", "OpenGL context configuration"}; |
||||||
|
glConfiguration |
||||||
|
.def(py::init()); |
||||||
|
/** @todo others */ |
||||||
|
|
||||||
|
c |
||||||
|
/* Constructor */ |
||||||
|
.def(py::init<const typename T::Configuration&, const typename T::GLConfiguration&>(), py::arg("configuration") = typename T::Configuration{}, py::arg("gl_configuration") = typename T::GLConfiguration{}, |
||||||
|
"Constructor") |
||||||
|
/** @todo the nocreate ones */ |
||||||
|
|
||||||
|
/* Basic things */ |
||||||
|
.def("exec", &T::exec, "Execute application main loop") |
||||||
|
.def("exit", &T::exit, "Exit application main loop") |
||||||
|
|
||||||
|
/* Screen handling */ |
||||||
|
.def("swap_buffers", &T::swapBuffers, "Swap buffers") |
||||||
|
/** @todo setMinimalLoopPeriod, needs a getter */ |
||||||
|
.def("redraw", &T::redraw, "Redraw immediately") |
||||||
|
|
||||||
|
/* Event handlers */ |
||||||
|
.def("draw_event", &T::drawEvent, "Draw event") |
||||||
|
/** @todo more */ |
||||||
|
; |
||||||
|
} |
||||||
|
|
||||||
|
}} |
||||||
@ -0,0 +1,68 @@ |
|||||||
|
/*
|
||||||
|
This file is part of Magnum. |
||||||
|
|
||||||
|
Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 |
||||||
|
Vladimír Vondruš <mosra@centrum.cz> |
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a |
||||||
|
copy of this software and associated documentation files (the "Software"), |
||||||
|
to deal in the Software without restriction, including without limitation |
||||||
|
the rights to use, copy, modify, merge, publish, distribute, sublicense, |
||||||
|
and/or sell copies of the Software, and to permit persons to whom the |
||||||
|
Software is furnished to do so, subject to the following conditions: |
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included |
||||||
|
in all copies or substantial portions of the Software. |
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
||||||
|
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
||||||
|
DEALINGS IN THE SOFTWARE. |
||||||
|
*/ |
||||||
|
|
||||||
|
#include <pybind11/pybind11.h> |
||||||
|
#include <Magnum/Platform/GlfwApplication.h> |
||||||
|
|
||||||
|
#include "magnum/bootstrap.h" |
||||||
|
#include "magnum/platform/application.h" |
||||||
|
|
||||||
|
namespace magnum { namespace platform { namespace { |
||||||
|
|
||||||
|
int argc = 0; |
||||||
|
|
||||||
|
void glfw(py::module& m) { |
||||||
|
struct PublicizedApplication: Platform::Application { |
||||||
|
explicit PublicizedApplication(const Configuration& configuration, const GLConfiguration& glConfiguration): Platform::Application{Arguments{argc, nullptr}, configuration, glConfiguration} {} |
||||||
|
|
||||||
|
void drawEvent() override = 0; |
||||||
|
}; |
||||||
|
|
||||||
|
struct PyApplication: PublicizedApplication { |
||||||
|
using PublicizedApplication::PublicizedApplication; |
||||||
|
|
||||||
|
void drawEvent() override { |
||||||
|
PYBIND11_OVERLOAD_PURE_NAME( |
||||||
|
void, |
||||||
|
PublicizedApplication, |
||||||
|
"draw_event", |
||||||
|
drawEvent |
||||||
|
); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
py::class_<PublicizedApplication, PyApplication> glfwApplication{m, "Application", "GLFW application"}; |
||||||
|
/** @todo def_property_writeonly for swap_interval */ |
||||||
|
|
||||||
|
application(glfwApplication); |
||||||
|
} |
||||||
|
|
||||||
|
}}} |
||||||
|
|
||||||
|
PYBIND11_MODULE(glfw, m) { |
||||||
|
m.doc() = "GLFW-based platform integration"; |
||||||
|
|
||||||
|
magnum::platform::glfw(m); |
||||||
|
} |
||||||
@ -0,0 +1,72 @@ |
|||||||
|
/*
|
||||||
|
This file is part of Magnum. |
||||||
|
|
||||||
|
Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 |
||||||
|
Vladimír Vondruš <mosra@centrum.cz> |
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a |
||||||
|
copy of this software and associated documentation files (the "Software"), |
||||||
|
to deal in the Software without restriction, including without limitation |
||||||
|
the rights to use, copy, modify, merge, publish, distribute, sublicense, |
||||||
|
and/or sell copies of the Software, and to permit persons to whom the |
||||||
|
Software is furnished to do so, subject to the following conditions: |
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included |
||||||
|
in all copies or substantial portions of the Software. |
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
||||||
|
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
||||||
|
DEALINGS IN THE SOFTWARE. |
||||||
|
*/ |
||||||
|
|
||||||
|
#include <pybind11/pybind11.h> |
||||||
|
#include <Magnum/Platform/Sdl2Application.h> |
||||||
|
|
||||||
|
#include "magnum/bootstrap.h" |
||||||
|
#include "magnum/platform/application.h" |
||||||
|
|
||||||
|
namespace magnum { namespace platform { namespace { |
||||||
|
|
||||||
|
int argc = 0; |
||||||
|
|
||||||
|
void sdl2(py::module& m) { |
||||||
|
struct PublicizedApplication: Platform::Application { |
||||||
|
explicit PublicizedApplication(const Configuration& configuration, const GLConfiguration& glConfiguration): Platform::Application{Arguments{argc, nullptr}, configuration, glConfiguration} {} |
||||||
|
|
||||||
|
void drawEvent() override = 0; |
||||||
|
}; |
||||||
|
|
||||||
|
struct PyApplication: PublicizedApplication { |
||||||
|
using PublicizedApplication::PublicizedApplication; |
||||||
|
|
||||||
|
void drawEvent() override { |
||||||
|
PYBIND11_OVERLOAD_PURE_NAME( |
||||||
|
void, |
||||||
|
PublicizedApplication, |
||||||
|
"draw_event", |
||||||
|
drawEvent |
||||||
|
); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
py::class_<PublicizedApplication, PyApplication> sdl2application{m, "Application", "SDL2 application"}; |
||||||
|
sdl2application |
||||||
|
.def_property("swap_interval", &PyApplication::swapInterval, |
||||||
|
[](PublicizedApplication& self, Int interval) { |
||||||
|
self.setSwapInterval(interval); |
||||||
|
}, "Swap interval"); |
||||||
|
|
||||||
|
application(sdl2application); |
||||||
|
} |
||||||
|
|
||||||
|
}}} |
||||||
|
|
||||||
|
PYBIND11_MODULE(sdl2, m) { |
||||||
|
m.doc() = "SDL2-based platform integration"; |
||||||
|
|
||||||
|
magnum::platform::sdl2(m); |
||||||
|
} |
||||||
Loading…
Reference in new issue