Move BVHType and shadingsystem enums to top-level of Cycles namespace.
[blender.git] / intern / cycles / render / session.h
index 7b01357a2b7a6ffcc28f4aacafd6edaed83cfc14..2d29015863c05dbcf9e2b2ded6adac9d1ae27caa 100644 (file)
@@ -1,19 +1,17 @@
 /*
- * Copyright 2011, Blender Foundation.
+ * Copyright 2011-2013 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.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
  *
- * 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.
+ * http://www.apache.org/licenses/LICENSE-2.0
  *
- * 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.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
  */
 
 #ifndef __SESSION_H__
 #include "tile.h"
 
 #include "util_progress.h"
+#include "util_stats.h"
 #include "util_thread.h"
+#include "util_types.h"
+#include "util_vector.h"
 
 CCL_NAMESPACE_BEGIN
 
@@ -42,50 +43,66 @@ class SessionParams {
 public:
        DeviceInfo device;
        bool background;
+       bool progressive_refine;
        string output_path;
 
        bool progressive;
        bool experimental;
        int samples;
        int2 tile_size;
-       int resolution;
+       TileOrder tile_order;
+       int start_resolution;
        int threads;
 
+       bool display_buffer_linear;
+
        double cancel_timeout;
        double reset_timeout;
        double text_timeout;
 
+       ShadingSystem shadingsystem;
+
        SessionParams()
        {
                background = false;
+               progressive_refine = false;
                output_path = "";
 
                progressive = false;
                experimental = false;
-               samples = INT_MAX;
+               samples = USHRT_MAX;
                tile_size = make_int2(64, 64);
-               resolution = 4;
+               start_resolution = INT_MAX;
                threads = 0;
 
+               display_buffer_linear = false;
+
                cancel_timeout = 0.1;
                reset_timeout = 0.1;
                text_timeout = 1.0;
+
+               shadingsystem = SVM;
+               tile_order = TILE_CENTER;
        }
 
        bool modified(const SessionParams& params)
        { return !(device.type == params.device.type
                && device.id == params.device.id
                && background == params.background
+               && progressive_refine == params.progressive_refine
                && output_path == params.output_path
                /* && samples == params.samples */
                && progressive == params.progressive
                && experimental == params.experimental
                && tile_size == params.tile_size
-               && resolution == params.resolution
+               && start_resolution == params.start_resolution
                && threads == params.threads
+               && display_buffer_linear == params.display_buffer_linear
                && cancel_timeout == params.cancel_timeout
                && reset_timeout == params.reset_timeout
-               && text_timeout == params.text_timeout); }
+               && text_timeout == params.text_timeout
+               && tile_order == params.tile_order
+               && shadingsystem == params.shadingsystem); }
 
 };
 
@@ -103,6 +120,7 @@ public:
        Progress progress;
        SessionParams params;
        TileManager tile_manager;
+       Stats stats;
 
        boost::function<void(RenderTile&)> write_render_tile_cb;
        boost::function<void(RenderTile&)> update_render_tile_cb;
@@ -111,7 +129,7 @@ public:
        ~Session();
 
        void start();
-       bool draw(BufferParams& params);
+       bool draw(BufferParams& params, DeviceDrawParams& draw_params);
        void wait();
 
        bool ready_to_reset();
@@ -119,6 +137,8 @@ public:
        void set_samples(int samples);
        void set_pause(bool pause);
 
+       void update_scene();
+       void device_free();
 protected:
        struct DelayedReset {
                thread_mutex mutex;
@@ -129,19 +149,18 @@ protected:
 
        void run();
 
-       void update_scene();
        void update_status_time(bool show_pause = false, bool show_done = false);
 
-       void tonemap();
+       void tonemap(int sample);
        void path_trace();
        void reset_(BufferParams& params, int samples);
 
        void run_cpu();
-       bool draw_cpu(BufferParams& params);
+       bool draw_cpu(BufferParams& params, DeviceDrawParams& draw_params);
        void reset_cpu(BufferParams& params, int samples);
 
        void run_gpu();
-       bool draw_gpu(BufferParams& params);
+       bool draw_gpu(BufferParams& params, DeviceDrawParams& draw_params);
        void reset_gpu(BufferParams& params, int samples);
 
        bool acquire_tile(Device *tile_device, RenderTile& tile);
@@ -173,6 +192,12 @@ protected:
        double reset_time;
        double preview_time;
        double paused_time;
+
+       /* progressive refine */
+       double last_update_time;
+       bool update_progressive_refine(bool cancel);
+
+       vector<RenderBuffers *> tile_buffers;
 };
 
 CCL_NAMESPACE_END