projects
/
synfig.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Allow PasteCanvas layers with unset canvas parameters to be exported.
[synfig.git]
/
synfig-studio
/
trunk
/
src
/
gtkmm
/
asyncrenderer.cpp
diff --git
a/synfig-studio/trunk/src/gtkmm/asyncrenderer.cpp
b/synfig-studio/trunk/src/gtkmm/asyncrenderer.cpp
index
70051dc
..
72a286c
100644
(file)
--- a/
synfig-studio/trunk/src/gtkmm/asyncrenderer.cpp
+++ b/
synfig-studio/trunk/src/gtkmm/asyncrenderer.cpp
@@
-6,6
+6,7
@@
**
** \legal
** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
**
** \legal
** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+** Copyright (c) 2007 Chris Moore
**
** This package is free software; you can redistribute it and/or
** modify it under the terms of the GNU General Public License as
**
** This package is free software; you can redistribute it and/or
** modify it under the terms of the GNU General Public License as
@@
-53,6
+54,8
@@
#include <synfig/general.h>
#include <ETL/clock>
#include <synfig/general.h>
#include <ETL/clock>
+#include "general.h"
+
#endif
/* === U S I N G =========================================================== */
#endif
/* === U S I N G =========================================================== */
@@
-192,6
+195,13
@@
public:
{
tile_t& tile(tile_queue.front());
{
tile_t& tile(tile_queue.front());
+ if (getenv("SYNFIG_SHOW_TILE_OUTLINES"))
+ {
+ Color red(1,0,0);
+ tile.surface.fill(red, 0, 0, 1, tile.surface.get_h());
+ tile.surface.fill(red, 0, 0, tile.surface.get_w(), 1);
+ }
+
alive_flag=warm_target->add_tile(tile.surface,tile.x,tile.y);
tile_queue.pop_front();
alive_flag=warm_target->add_tile(tile.surface,tile.x,tile.y);
tile_queue.pop_front();
@@
-201,8
+211,10
@@
public:
virtual void end_frame()
{
virtual void end_frame()
{
+#ifdef SINGLE_THREADED
if (!single_threaded())
{
if (!single_threaded())
{
+#endif
while(alive_flag)
{
Glib::Mutex::Lock lock(mutex);
while(alive_flag)
{
Glib::Mutex::Lock lock(mutex);
@@
-214,7
+226,9
@@
public:
else
break;
}
else
break;
}
+#ifdef SINGLE_THREADED
}
}
+#endif
Glib::Mutex::Lock lock(mutex);
if(!alive_flag)
return;
Glib::Mutex::Lock lock(mutex);
if(!alive_flag)
return;
@@
-306,7
+320,11
@@
public:
#endif
}
#endif
}
- if (!single_threaded())
+#ifdef SINGLE_THREADED
+ if (single_threaded())
+ signal_progress()();
+ else
+#endif
while(alive_flag && !ready_next)
{
Glib::Mutex::Lock lock(mutex);
while(alive_flag && !ready_next)
{
Glib::Mutex::Lock lock(mutex);
@@
-333,7
+351,10
@@
public:
Glib::Mutex::Lock lock(mutex);
if(alive_flag)
alive_flag=warm_target->add_frame(&surface);
Glib::Mutex::Lock lock(mutex);
if(alive_flag)
alive_flag=warm_target->add_frame(&surface);
- if (!single_threaded()) cond_frame_queue_empty.signal();
+#ifdef SINGLE_THREADED
+ if (!single_threaded())
+#endif
+ cond_frame_queue_empty.signal();
ready_next=true;
}
};
ready_next=true;
}
};
@@
-347,8
+368,10
@@
public:
AsyncRenderer::AsyncRenderer(etl::handle<synfig::Target> target_,synfig::ProgressCallback *cb):
error(false),
success(false),
AsyncRenderer::AsyncRenderer(etl::handle<synfig::Target> target_,synfig::ProgressCallback *cb):
error(false),
success(false),
- cb(cb),
- updating(false)
+ cb(cb)
+#ifdef SINGLE_THREADED
+ , updating(false)
+#endif
{
render_thread=0;
if(etl::handle<synfig::Target_Tile>::cast_dynamic(target_))
{
render_thread=0;
if(etl::handle<synfig::Target_Tile>::cast_dynamic(target_))
@@
-393,7
+416,10
@@
AsyncRenderer::stop()
signal_stop_();
#if REJOIN_ON_STOP
signal_stop_();
#if REJOIN_ON_STOP
- if (!single_threaded()) render_thread->join();
+#ifdef SINGLE_THREADED
+ if (!single_threaded())
+#endif
+ render_thread->join();
#endif
// Make sure all the dispatch crap is cleared out
#endif
// Make sure all the dispatch crap is cleared out
@@
-432,6
+458,7
@@
AsyncRenderer::start()
);
}
);
}
+#ifdef SINGLE_THREADED
void
AsyncRenderer::rendering_progress()
{
void
AsyncRenderer::rendering_progress()
{
@@
-439,6
+466,7
@@
AsyncRenderer::rendering_progress()
while(studio::App::events_pending()) studio::App::iteration(false);
updating = false;
}
while(studio::App::events_pending()) studio::App::iteration(false);
updating = false;
}
+#endif
void
AsyncRenderer::start_()
void
AsyncRenderer::start_()
@@
-450,6
+478,7
@@
AsyncRenderer::start_()
done_connection=signal_done_.connect(mem_fun(*this,&AsyncRenderer::stop));
#endif
done_connection=signal_done_.connect(mem_fun(*this,&AsyncRenderer::stop));
#endif
+#ifdef SINGLE_THREADED
if (single_threaded())
{
synfig::info("%s:%d rendering in the same thread", __FILE__, __LINE__);
if (single_threaded())
{
synfig::info("%s:%d rendering in the same thread", __FILE__, __LINE__);
@@
-458,6
+487,7
@@
AsyncRenderer::start_()
render_target();
}
else
render_target();
}
else
+#endif
{
render_thread=Glib::Thread::create(
sigc::mem_fun(*this,&AsyncRenderer::render_target),
{
render_thread=Glib::Thread::create(
sigc::mem_fun(*this,&AsyncRenderer::render_target),