/************************************************************************* * Copyright (C) 2010-2014 Tavian Barnes * * * * This file is part of The Dimension Library. * * * * The Dimension Library is free software; you can redistribute it and/ * * or modify it under the terms of the GNU Lesser General Public License * * as published by the Free Software Foundation; either version 3 of the * * License, or (at your option) any later version. * * * * The Dimension Library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this program. If not, see * * . * *************************************************************************/ /** * @file * Entire scenes. */ /// Render quality flags. enum { DMNSN_RENDER_NONE = 0, ///< Render nothing. DMNSN_RENDER_PIGMENT = 1 << 0, ///< Render pigments. DMNSN_RENDER_LIGHTS = 1 << 1, ///< Render lights and shadows. DMNSN_RENDER_FINISH = 1 << 2, ///< Render object finishes. DMNSN_RENDER_TRANSPARENCY = 1 << 3, ///< Render transparency/refraction. DMNSN_RENDER_REFLECTION = 1 << 4, ///< Render specular reflection. DMNSN_RENDER_FULL = ~DMNSN_RENDER_NONE ///< Render everything. }; /// Render quality. typedef unsigned int dmnsn_quality; /// An entire scene. typedef struct dmnsn_scene { // World attributes dmnsn_pigment *background; ///< Background pigment. dmnsn_texture *default_texture; ///< Default object texture. dmnsn_interior *default_interior; ///< Default object interior. /// Canvas. dmnsn_canvas *canvas; // Support for rendering image subregions. size_t region_x; ///< The x position of the canvas in the broader image. size_t region_y; ///< The y position of the canvas in the broader image. size_t outer_width; ///< Width of the broader image. size_t outer_height; ///< Height of the broader image. /// Objects. dmnsn_array *objects; /// Lights. dmnsn_array *lights; /// Camera. dmnsn_camera *camera; /// Render quality. dmnsn_quality quality; /// Recursion limit. unsigned int reclimit; /// Adaptive depth control bailout. double adc_bailout; /// Number of parallel threads. unsigned int nthreads; /// Timers. dmnsn_timer bounding_timer; dmnsn_timer render_timer; bool initialized; ///< @internal Whether the scene is initialized. } dmnsn_scene; /** * Create a scene. * @param[in] pool The memory pool to allocate from. * @return A new empty scene. */ dmnsn_scene *dmnsn_new_scene(dmnsn_pool *pool); /** * Initialize a scene. * @param[in,out] scene The scene to initalize. */ void dmnsn_scene_initialize(dmnsn_scene *scene);