mirror of
https://github.com/brunoherbelin/vimix.git
synced 2025-12-11 18:34:58 +01:00
BugFix thumbnailing
1. avoid crash by cathing the correct exception and 2. ensure we capture a frame by waiting a little
This commit is contained in:
@@ -1,3 +1,5 @@
|
|||||||
|
#include <thread>
|
||||||
|
|
||||||
// Opengl
|
// Opengl
|
||||||
#include <glad/glad.h>
|
#include <glad/glad.h>
|
||||||
#include <glm/glm.hpp>
|
#include <glm/glm.hpp>
|
||||||
@@ -123,18 +125,22 @@ FrameBufferImage *RenderView::thumbnail ()
|
|||||||
// by default null image
|
// by default null image
|
||||||
FrameBufferImage *img = nullptr;
|
FrameBufferImage *img = nullptr;
|
||||||
|
|
||||||
|
// this function is always called from a parallel thread
|
||||||
|
// So we wait for a few frames of rendering before trying to capture a thumbnail
|
||||||
|
std::this_thread::sleep_for(std::chrono::milliseconds(100));
|
||||||
|
|
||||||
// create and store a promise for a FrameBufferImage
|
// create and store a promise for a FrameBufferImage
|
||||||
thumbnailer_.emplace_back( std::promise<FrameBufferImage *>() );
|
thumbnailer_.emplace_back( std::promise<FrameBufferImage *>() );
|
||||||
|
|
||||||
// future will return the primised FrameBufferImage
|
// future will return the promised FrameBufferImage
|
||||||
std::future<FrameBufferImage *> t = thumbnailer_.back().get_future();
|
std::future<FrameBufferImage *> ft = thumbnailer_.back().get_future();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// wait for valid return value from promise
|
// wait for a valid return value from promise
|
||||||
img = t.get();
|
img = ft.get();
|
||||||
}
|
}
|
||||||
// catch any failed promise
|
// catch any failed promise
|
||||||
catch (std::runtime_error&){
|
catch (const std::exception&){
|
||||||
}
|
}
|
||||||
|
|
||||||
return img;
|
return img;
|
||||||
|
|||||||
Reference in New Issue
Block a user