X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftrunk%2Fsrc%2Fsynfig%2Frender.cpp;h=af58a0e1f7b0aca77b906f0eaaad251627184b32;hb=9459638ad6797b8139f1e9f0715c96076dbf0890;hp=db06aad3b22dee72844111a8f25557cba0a2f9d7;hpb=28f28705612902c15cd0702cc891fba35bf2d2df;p=synfig.git diff --git a/synfig-core/trunk/src/synfig/render.cpp b/synfig-core/trunk/src/synfig/render.cpp index db06aad..af58a0e 100644 --- a/synfig-core/trunk/src/synfig/render.cpp +++ b/synfig-core/trunk/src/synfig/render.cpp @@ -1,20 +1,21 @@ /* === S Y N F I G ========================================================= */ -/*! \file render.cpp +/*! \file synfig/render.cpp ** \brief Renderer ** -** $Id: render.cpp,v 1.1.1.1 2005/01/04 01:23:14 darco Exp $ +** $Id$ ** ** \legal -** Copyright (c) 2002 Robert B. Quattlebaum Jr. +** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley ** -** This software and associated documentation -** are CONFIDENTIAL and PROPRIETARY property of -** the above-mentioned copyright holder. +** This package is free software; you can redistribute it and/or +** modify it under the terms of the GNU General Public License as +** published by the Free Software Foundation; either version 2 of +** the License, or (at your option) any later version. ** -** You may not copy, print, publish, or in any -** other way distribute this software without -** a prior written agreement with -** the copyright holder. +** This package is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +** General Public License for more details. ** \endlegal */ /* ========================================================================= */ @@ -70,16 +71,16 @@ synfig::parametric_render( bool no_clamp=!desc.get_clamp(); - + int w(desc.get_w()), h(desc.get_h()), a(desc.get_antialias()); - + Point tl(desc.get_tl()), br(desc.get_br()); - + //Gamma // gamma(desc.get_gamma()); @@ -89,10 +90,10 @@ synfig::parametric_render( Color::value_type pool; // Alpha pool (for correct alpha antialiasing) - + // Calculate the number of channels //chan=channels(desc.get_pixel_format()); - + // Calculate the distance between pixels du=(br[0]-tl[0])/(Point::value_type)w; dv=(br[1]-tl[1])/(Point::value_type)h; @@ -106,11 +107,11 @@ synfig::parametric_render( //sv=tl[1]-(dv-dsv)/(Point::value_type)2.0; su=tl[0]; sv=tl[1]; - + surface.set_wh(desc.get_w(),desc.get_h()); assert(surface); - + // Loop through all horizontal lines for(y=0,v=sv;ystart_frame(callback)) return false; - + // Loop through all horizontal lines for(y=0,v=sv;yend_scanline(); target->end_frame(); @@ -303,7 +304,7 @@ synfig::render( return false; } } - + // Finish up the target's frame target->end_frame(); @@ -347,9 +348,9 @@ synfig::render_threaded( } } } *render_thread; - + int i, mythread=-1; - + Point::value_type u,v, // Current location in image su,sv, // Starting locations @@ -358,16 +359,16 @@ synfig::render_threaded( bool no_clamp=!desc.get_clamp(); - + int w(desc.get_w()), h(desc.get_h()), a(desc.get_antialias()); - + Point tl(desc.get_tl()), br(desc.get_br()); - + int x,y, // Current location on output bitmap x2,y2; // Subpixel counters @@ -376,11 +377,11 @@ synfig::render_threaded( pool; // Alpha pool (for correct alpha antialiasing) assert(target); - - // If we do not have a a target then bail + + // If we do not have a target then bail if(!target) return false; - + // Calculate the distance between pixels du=(br[0]-tl[0])/(Point::value_type)w; dv=(br[1]-tl[1])/(Point::value_type)h; @@ -394,7 +395,7 @@ synfig::render_threaded( sv=tl[1]-(dv-dsv)/(Point::value_type)2.0; render_thread=new _render_thread[threads]; - + // Start the forks for(i=0;istart_frame(callback)) return false; @@ -423,7 +424,7 @@ synfig::render_threaded( else throw(string(_("Target panic"))); return false; } - + // If we have a callback that we need // to report to, do so now. if(callback) @@ -431,16 +432,16 @@ synfig::render_threaded( { // If the callback returns false, // then the render has been aborted. - // Exit gracefuly. + // Exit gracefully. target->end_scanline(); target->end_frame(); delete [] render_thread; return false; } - + read(render_thread[y%threads].pipe_read,colordata,w*sizeof(Color)); - + // Send the buffer to the render target. // If anything goes wrong, cleanup and bail. if(!target->end_scanline()) @@ -460,15 +461,15 @@ synfig::render_threaded( // current line if(callback) callback->amount_complete(h,h); - + delete [] render_thread; return true; renderthread: - + // Change the random seed, so that each thread has a different one srand(mythread*20+threads+time(0)); - + Color *buffer(new Color[w]); // Loop through all horizontal lines @@ -477,7 +478,7 @@ renderthread: // Set the current pixel pointer // to the start of the line Color* colordata(buffer); - + // Loop through every pixel in row for(x=0,u=su;x