diff options
author | Ton Roosendaal <ton@blender.org> | 2011-04-27 15:58:34 +0400 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2011-04-27 15:58:34 +0400 |
commit | da376e0237517543aa21740ee2363234ee1c20ae (patch) | |
tree | 014a513ed8d0eccc5e54fef42347781e85bae56a /intern/cycles/render/integrator.cpp | |
parent | 693780074388111e7b9ef1c3825e462f398dc6c4 (diff) |
Cycles render engine, initial commit. This is the engine itself, blender modifications and build instructions will follow later.
Cycles uses code from some great open source projects, many thanks them:
* BVH building and traversal code from NVidia's "Understanding the Efficiency of Ray Traversal on GPUs":
http://code.google.com/p/understanding-the-efficiency-of-ray-traversal-on-gpus/
* Open Shading Language for a large part of the shading system:
http://code.google.com/p/openshadinglanguage/
* Blender for procedural textures and a few other nodes.
* Approximate Catmull Clark subdivision from NVidia Mesh tools:
http://code.google.com/p/nvidia-mesh-tools/
* Sobol direction vectors from:
http://web.maths.unsw.edu.au/~fkuo/sobol/
* Film response functions from:
http://www.cs.columbia.edu/CAVE/software/softlib/dorf.php
Diffstat (limited to 'intern/cycles/render/integrator.cpp')
-rw-r--r-- | intern/cycles/render/integrator.cpp | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/intern/cycles/render/integrator.cpp b/intern/cycles/render/integrator.cpp new file mode 100644 index 00000000000..30736670cc3 --- /dev/null +++ b/intern/cycles/render/integrator.cpp @@ -0,0 +1,86 @@ +/* + * Copyright 2011, Blender Foundation. + * + * This program 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. + * + * This program 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. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "device.h" +#include "integrator.h" +#include "scene.h" +#include "sobol.h" + +CCL_NAMESPACE_BEGIN + +Integrator::Integrator() +{ + minbounce = 2; + maxbounce = 7; + no_caustics = false; + blur_caustics = 0.0f; + + need_update = true; +} + +Integrator::~Integrator() +{ +} + +void Integrator::device_update(Device *device, DeviceScene *dscene) +{ + if(!need_update) + return; + + device_free(device, dscene); + + KernelIntegrator *kintegrator = &dscene->data.integrator; + + /* integrator parameters */ + kintegrator->minbounce = minbounce + 1; + kintegrator->maxbounce = maxbounce + 1; + kintegrator->no_caustics = no_caustics; + kintegrator->blur_caustics = blur_caustics; + + /* sobol directions table */ + int dimensions = PRNG_BASE_NUM + (maxbounce + 2)*PRNG_BOUNCE_NUM; + uint *directions = dscene->sobol_directions.resize(SOBOL_BITS*dimensions); + + sobol_generate_direction_vectors((uint(*)[SOBOL_BITS])directions, dimensions); + + device->tex_alloc("__sobol_directions", dscene->sobol_directions); + + need_update = false; +} + +void Integrator::device_free(Device *device, DeviceScene *dscene) +{ + device->tex_free(dscene->sobol_directions); + dscene->sobol_directions.clear(); +} + +bool Integrator::modified(const Integrator& integrator) +{ + return !(minbounce == integrator.minbounce && + maxbounce == integrator.maxbounce && + no_caustics == integrator.no_caustics && + blur_caustics == integrator.blur_caustics); +} + +void Integrator::tag_update(Scene *scene) +{ + need_update = true; +} + +CCL_NAMESPACE_END + |