| 124 | } |
| 125 | |
| 126 | void Renderer::registerScriptBindings(pybind11::module& m) |
| 127 | { |
| 128 | using namespace pybind11::literals; |
| 129 | |
| 130 | pybind11::class_<Renderer> renderer(m, "Renderer"); |
| 131 | renderer.def(kRunScript.c_str(), &Renderer::loadScript, "path"_a); |
| 132 | renderer.def(kLoadScene.c_str(), &Renderer::loadScene, "path"_a, "buildFlags"_a = SceneBuilder::Flags::Default); |
| 133 | renderer.def(kUnloadScene.c_str(), &Renderer::unloadScene); |
| 134 | renderer.def(kSaveConfig.c_str(), &Renderer::saveConfig, "path"_a); |
| 135 | renderer.def(kAddGraph.c_str(), &Renderer::addGraph, "graph"_a); |
| 136 | renderer.def(kSetActiveGraph.c_str(), |
| 137 | [](Renderer* pRenderer, const ref<RenderGraph>& pGraph) |
| 138 | { |
| 139 | pRenderer->setActiveGraph(pGraph); |
| 140 | }, "graph"_a); |
| 141 | renderer.def(kRemoveGraph.c_str(), pybind11::overload_cast<const std::string&>(&Renderer::removeGraph), "name"_a); |
| 142 | renderer.def(kRemoveGraph.c_str(), pybind11::overload_cast<const ref<RenderGraph>&>(&Renderer::removeGraph), "graph"_a); |
| 143 | renderer.def(kGetGraph.c_str(), &Renderer::getGraph, "name"_a); |
| 144 | renderer.def_property(kSceneUpdateCallback.c_str(), &Renderer::getSceneUpdateCallback, &Renderer::setSceneUpdateCallback); |
| 145 | |
| 146 | auto resizeFrameBuffer = [](Renderer* pRenderer, uint32_t width, uint32_t height) { pRenderer->resizeFrameBuffer(width, height); }; |
| 147 | renderer.def(kResizeFrameBuffer.c_str(), resizeFrameBuffer); |
| 148 | renderer.def("resizeSwapChain", resizeFrameBuffer); // PYTHONDEPRECATED |
| 149 | |
| 150 | auto renderFrame = [](Renderer* pRenderer) { pRenderer->getProgressBar().close(); pRenderer->renderFrame(); }; |
| 151 | renderer.def(kRenderFrame.c_str(), renderFrame); |
| 152 | |
| 153 | renderer.def_property_readonly(kScene.c_str(), &Renderer::getScene); |
| 154 | renderer.def_property_readonly(kActiveGraph.c_str(), &Renderer::getActiveGraph); |
| 155 | renderer.def_property_readonly(kClock.c_str(), [] (Renderer* pRenderer) { return &pRenderer->getGlobalClock(); }); |
| 156 | renderer.def_property_readonly(kProfiler.c_str(), [] (Renderer* pRenderer) { return pRenderer->getDevice()->getProfiler(); }); |
| 157 | |
| 158 | auto getUI = [](Renderer* pRenderer) { return pRenderer->isUiEnabled(); }; |
| 159 | auto setUI = [](Renderer* pRenderer, bool show) { pRenderer->toggleUI(show); }; |
| 160 | renderer.def_property(kUI.c_str(), getUI, setUI); |
| 161 | |
| 162 | renderer.def_property(kKeyCallback.c_str(), &Renderer::getKeyCallback, &Renderer::setKeyCallback); |
| 163 | |
| 164 | for (auto& pe : mpExtensions) |
| 165 | { |
| 166 | pe->registerScriptBindings(m); |
| 167 | if (auto var = pe->getScriptVar(); !var.empty()) |
| 168 | { |
| 169 | renderer.def_property_readonly(var.c_str(), [&pe] (Renderer* pRenderer) { return pe.get(); }); |
| 170 | } |
| 171 | } |
| 172 | |
| 173 | // Replace the `help` function |
| 174 | auto globalHelp = []() { pybind11::print(kGlobalHelp); }; |
| 175 | m.def("help", globalHelp); |
| 176 | |
| 177 | auto objectHelp = [](pybind11::object o) |
| 178 | { |
| 179 | auto b = pybind11::module::import("builtins"); |
| 180 | auto h = b.attr("help"); |
| 181 | h(o); |
| 182 | }; |
| 183 | m.def("help", objectHelp, "object"_a); |
no test coverage detected