/* * 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. */ #ifndef __SCENE_H__ #define __SCENE_H__ #include "image.h" #include "device_memory.h" #include "kernel_types.h" #include "util_param.h" #include "util_string.h" #include "util_thread.h" #include "util_types.h" #include "util_vector.h" CCL_NAMESPACE_BEGIN class AttributeRequestSet; class Background; class Camera; class Device; class Film; class Filter; class Integrator; class Light; class LightManager; class Mesh; class MeshManager; class Object; class ObjectManager; class Shader; class ShaderManager; class Progress; /* Scene Device Data */ class DeviceScene { public: /* BVH */ device_vector bvh_nodes; device_vector object_node; device_vector tri_woop; device_vector prim_visibility; device_vector prim_index; device_vector prim_object; /* mesh */ device_vector tri_normal; device_vector tri_vnormal; device_vector tri_vindex; device_vector tri_verts; /* objects */ device_vector objects; /* attributes */ device_vector attributes_map; device_vector attributes_float; device_vector attributes_float3; /* lights */ device_vector light_distribution; device_vector light_data; device_vector light_background_marginal_cdf; device_vector light_background_conditional_cdf; /* shaders */ device_vector svm_nodes; device_vector shader_flag; device_vector object_flag; /* filter */ device_vector filter_table; /* integrator */ device_vector sobol_directions; /* images */ device_vector tex_image[TEX_NUM_IMAGES]; device_vector tex_float_image[TEX_NUM_FLOAT_IMAGES]; KernelData data; }; /* Scene Parameters */ class SceneParams { public: enum { OSL, SVM } shadingsystem; enum BVHType { BVH_DYNAMIC, BVH_STATIC } bvh_type; bool use_bvh_cache; bool use_bvh_spatial_split; bool use_qbvh; SceneParams() { shadingsystem = SVM; bvh_type = BVH_DYNAMIC; use_bvh_cache = false; use_bvh_spatial_split = false; #ifdef __QBVH__ use_qbvh = true; #else use_qbvh = false; #endif } bool modified(const SceneParams& params) { return !(shadingsystem == params.shadingsystem && bvh_type == params.bvh_type && use_bvh_cache == params.use_bvh_cache && use_bvh_spatial_split == params.use_bvh_spatial_split && use_qbvh == params.use_qbvh); } }; /* Scene */ class Scene { public: /* data */ Camera *camera; Filter *filter; Film *film; Background *background; Integrator *integrator; /* data lists */ vector objects; vector meshes; vector shaders; vector lights; /* data managers */ ImageManager *image_manager; LightManager *light_manager; ShaderManager *shader_manager; MeshManager *mesh_manager; ObjectManager *object_manager; /* default shaders */ int default_surface; int default_light; int default_background; int default_holdout; int default_empty; /* device */ Device *device; DeviceScene dscene; /* parameters */ SceneParams params; /* mutex must be locked manually by callers */ thread_mutex mutex; Scene(const SceneParams& params); ~Scene(); void device_update(Device *device, Progress& progress); bool need_global_attribute(AttributeStandard std); void need_global_attributes(AttributeRequestSet& attributes); enum MotionType { MOTION_NONE = 0, MOTION_PASS, MOTION_BLUR }; MotionType need_motion(); bool need_update(); bool need_reset(); }; CCL_NAMESPACE_END #endif /* __SCENE_H__ */