add setter for frame interval, separate FilamentController initialization from widget
This commit is contained in:
@@ -149,12 +149,12 @@ FilamentViewer::FilamentViewer(void *layer, LoadResource loadResource,
|
||||
Log("Engine created");
|
||||
|
||||
_renderer = _engine->createRenderer();
|
||||
|
||||
_renderer->setDisplayInfo({.refreshRate = 60.0f,
|
||||
float fr = 60.0f;
|
||||
_renderer->setDisplayInfo({.refreshRate = fr,
|
||||
.presentationDeadlineNanos = (uint64_t)0,
|
||||
.vsyncOffsetNanos = (uint64_t)0});
|
||||
Renderer::FrameRateOptions fro;
|
||||
fro.interval = 60;
|
||||
fro.interval = 1 / fr;
|
||||
_renderer->setFrameRateOptions(fro);
|
||||
|
||||
_scene = _engine->createScene();
|
||||
@@ -247,6 +247,13 @@ static constexpr float4 sFullScreenTriangleVertices[3] = {
|
||||
|
||||
static const uint16_t sFullScreenTriangleIndices[3] = {0, 1, 2};
|
||||
|
||||
void FilamentViewer::setFrameInterval(float frameInterval) {
|
||||
Renderer::FrameRateOptions fro;
|
||||
fro.interval = frameInterval;
|
||||
_renderer->setFrameRateOptions(fro);
|
||||
Log("Set framerate interval to %f", frameInterval);
|
||||
}
|
||||
|
||||
void FilamentViewer::createImageRenderable() {
|
||||
|
||||
if (_imageEntity)
|
||||
@@ -618,7 +625,7 @@ void FilamentViewer::loadIbl(const char *const iblPath) {
|
||||
}
|
||||
}
|
||||
|
||||
void FilamentViewer::render() {
|
||||
void FilamentViewer::render(uint64_t frameTimeInNanos) {
|
||||
|
||||
if (!_view || !_mainCamera || !_swapChain) {
|
||||
Log("Not ready for rendering");
|
||||
@@ -637,7 +644,7 @@ void FilamentViewer::render() {
|
||||
}
|
||||
|
||||
// Render the scene, unless the renderer wants to skip the frame.
|
||||
if (_renderer->beginFrame(_swapChain)) {
|
||||
if (_renderer->beginFrame(_swapChain, frameTimeInNanos)) {
|
||||
_renderer->render(_view);
|
||||
_renderer->endFrame();
|
||||
}
|
||||
|
||||
@@ -61,7 +61,8 @@ namespace polyvox {
|
||||
void clearAssets();
|
||||
|
||||
void updateViewportAndCameraProjection(int height, int width, float scaleFactor);
|
||||
void render();
|
||||
void render(uint64_t frameTimeInNanos);
|
||||
void setFrameInterval(float interval);
|
||||
|
||||
bool setFirstCamera(SceneAsset* asset);
|
||||
bool setCamera(SceneAsset* asset, const char* nodeName);
|
||||
|
||||
@@ -69,9 +69,17 @@ extern "C" {
|
||||
}
|
||||
|
||||
void render(
|
||||
void* viewer
|
||||
void* viewer,
|
||||
uint64_t frameTimeInNanos
|
||||
) {
|
||||
((FilamentViewer*)viewer)->render();
|
||||
((FilamentViewer*)viewer)->render(frameTimeInNanos);
|
||||
}
|
||||
|
||||
void set_frame_interval(
|
||||
void* viewer,
|
||||
float frameInterval
|
||||
) {
|
||||
((FilamentViewer*)viewer)->setFrameInterval(frameInterval);
|
||||
}
|
||||
|
||||
void destroy_swap_chain(void* viewer) {
|
||||
|
||||
@@ -16,8 +16,9 @@ void remove_ibl(void* viewer);
|
||||
void* load_glb(void* viewer, const char* assetPath);
|
||||
void* load_gltf(void* viewer, const char* assetPath, const char* relativePath);
|
||||
bool set_camera(void* viewer, void* asset, const char* nodeName);
|
||||
void render(void* viewer);
|
||||
void render(void* viewer, uint64_t frameTimeInNanos);
|
||||
void destroy_swap_chain(void* viewer);
|
||||
void set_frame_interval(void* viewer, float interval);
|
||||
void* get_renderer(void* viewer);
|
||||
void update_viewport_and_camera_projection(void* viewer, int width, int height, float scaleFactor);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user