update osx project
This commit is contained in:
14
src/app.cpp
14
src/app.cpp
@@ -24,6 +24,20 @@ void destroy_window();
|
||||
|
||||
App* App::I = nullptr; // singleton
|
||||
|
||||
std::deque<std::packaged_task<void()>> App::render_tasklist;
|
||||
std::mutex App::render_task_mutex;
|
||||
std::condition_variable App::render_cv;
|
||||
std::thread App::render_thread;
|
||||
std::thread::id App::render_thread_id;
|
||||
bool App::render_running = false;
|
||||
|
||||
std::deque<std::packaged_task<void()>> App::ui_tasklist;
|
||||
std::mutex App::ui_task_mutex;
|
||||
std::condition_variable App::ui_cv;
|
||||
std::thread App::ui_thread;
|
||||
std::thread::id App::ui_thread_id;
|
||||
bool App::ui_running = false;
|
||||
|
||||
void App::create()
|
||||
{
|
||||
width = 1920/2;
|
||||
|
||||
24
src/app.h
24
src/app.h
@@ -256,12 +256,12 @@ public:
|
||||
// RENDER THREAD
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
std::deque<std::packaged_task<void()>> render_tasklist;
|
||||
std::mutex render_task_mutex;
|
||||
std::condition_variable render_cv;
|
||||
std::thread render_thread;
|
||||
std::thread::id render_thread_id;
|
||||
bool render_running = false;
|
||||
static std::deque<std::packaged_task<void()>> render_tasklist;
|
||||
static std::mutex render_task_mutex;
|
||||
static std::condition_variable render_cv;
|
||||
static std::thread render_thread;
|
||||
static std::thread::id render_thread_id;
|
||||
static bool render_running;
|
||||
void render_thread_main();
|
||||
void render_thread_start();
|
||||
void render_thread_stop();
|
||||
@@ -322,12 +322,12 @@ public:
|
||||
// UI THREAD
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
std::deque<std::packaged_task<void()>> ui_tasklist;
|
||||
std::mutex ui_task_mutex;
|
||||
std::condition_variable ui_cv;
|
||||
std::thread ui_thread;
|
||||
std::thread::id ui_thread_id;
|
||||
bool ui_running = false;
|
||||
static std::deque<std::packaged_task<void()>> ui_tasklist;
|
||||
static std::mutex ui_task_mutex;
|
||||
static std::condition_variable ui_cv;
|
||||
static std::thread ui_thread;
|
||||
static std::thread::id ui_thread_id;
|
||||
static bool ui_running;
|
||||
void ui_thread_main();
|
||||
void ui_thread_start();
|
||||
void ui_thread_stop();
|
||||
|
||||
@@ -508,13 +508,7 @@ void NodeStrokePreview::draw_stroke()
|
||||
s_running = true;
|
||||
s_renderer = std::thread([] {
|
||||
BT_SetTerminate();
|
||||
#if __OSX__
|
||||
// There's some weird multithread bug at startup
|
||||
// This random wait is a temp fix
|
||||
// Today is 25/05/2019
|
||||
// Good luck, future Omar
|
||||
std::this_thread::sleep_for(std::chrono::seconds(1));
|
||||
#endif
|
||||
|
||||
m_sampler_linear.create();
|
||||
m_sampler_linear_repeat.create(GL_LINEAR, GL_REPEAT);
|
||||
m_sampler_mipmap.create();
|
||||
@@ -553,6 +547,8 @@ void NodeStrokePreview::draw_stroke()
|
||||
|
||||
gl.restore();
|
||||
});
|
||||
|
||||
node->app_redraw();
|
||||
|
||||
//std::this_thread::sleep_for(std::chrono::milliseconds(30));
|
||||
std::this_thread::yield();
|
||||
|
||||
@@ -3,6 +3,9 @@
|
||||
#include "log.h"
|
||||
#include "app.h"
|
||||
#include <atomic>
|
||||
#include <iomanip>
|
||||
#include <ctime>
|
||||
#include <sstream>
|
||||
|
||||
#ifdef __OBJC__
|
||||
@implementation PathWithModDate
|
||||
@@ -45,8 +48,15 @@ void exception_handler(NSException *exception)
|
||||
LOG("exception %s\n", [[exception name] cStringUsingEncoding:NSUTF8StringEncoding]);
|
||||
NSString* callstack = [[NSThread callStackSymbols] componentsJoinedByString:@"\n"];
|
||||
LOG("base:\n%s\ncallstack:\n%s", base_address.c_str(), [callstack cStringUsingEncoding:NSUTF8StringEncoding]);
|
||||
if (App::I.canvas && App::I.canvas->m_canvas)
|
||||
App::I.canvas->m_canvas->project_save_thread(App::I.data_path + "/recovery.ppi");
|
||||
|
||||
auto t = std::time(nullptr);
|
||||
auto tm = *std::localtime(&t);
|
||||
std::ostringstream oss;
|
||||
oss << std::put_time(&tm, "%d-%m-%Y %H-%M-%S");
|
||||
auto path = App::I->data_path + "/" + App::I->doc_name + "-recovery (" + oss.str() + ").ppi";
|
||||
|
||||
if (App::I->canvas && App::I->canvas->m_canvas)
|
||||
App::I->canvas->m_canvas->project_save_thread(path);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
@@ -56,8 +66,15 @@ static void signal_handler (int signo) {
|
||||
LOG("signal %d\n", signo);
|
||||
NSString* callstack = [[NSThread callStackSymbols] componentsJoinedByString:@"\n"];
|
||||
LOG("base:\n%s\ncallstack:\n%s", base_address.c_str(), [callstack cStringUsingEncoding:NSUTF8StringEncoding]);
|
||||
if (App::I.canvas && App::I.canvas->m_canvas)
|
||||
App::I.canvas->m_canvas->project_save_thread(App::I.data_path + "/recovery.ppi");
|
||||
|
||||
auto t = std::time(nullptr);
|
||||
auto tm = *std::localtime(&t);
|
||||
std::ostringstream oss;
|
||||
oss << std::put_time(&tm, "%d-%m-%Y %H-%M-%S");
|
||||
auto path = App::I->data_path + "/" + App::I->doc_name + "-recovery (" + oss.str() + ").ppi";
|
||||
|
||||
if (App::I->canvas && App::I->canvas->m_canvas)
|
||||
App::I->canvas->m_canvas->project_save_thread(path);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
|
||||
@@ -193,7 +193,7 @@ void Shape::draw_stroke() const
|
||||
|
||||
void Shape::destroy()
|
||||
{
|
||||
App::I->render_task_async([b1=buffers[0],b2=buffers[1],a1=arrays[0],a2=arrays[1]]
|
||||
if (App::I) App::I->render_task_async([b1=buffers[0],b2=buffers[1],a1=arrays[0],a2=arrays[1]]
|
||||
{
|
||||
if (b1 || b2)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user