1
2//
3// This source file is part of appleseed.
4// Visit http://appleseedhq.net/ for additional information and resources.
5//
6// This software is released under the MIT license.
7//
8// Copyright (c) 2010-2013 Francois Beaune, Jupiter Jazz Limited
9// Copyright (c) 2014-2017 Francois Beaune, The appleseedhq Organization
10//
11// Permission is hereby granted, free of charge, to any person obtaining a copy
12// of this software and associated documentation files (the "Software"), to deal
13// in the Software without restriction, including without limitation the rights
14// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15// copies of the Software, and to permit persons to whom the Software is
16// furnished to do so, subject to the following conditions:
17//
18// The above copyright notice and this permission notice shall be included in
19// all copies or substantial portions of the Software.
20//
21// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27// THE SOFTWARE.
28//
29
30#ifndef APPLESEED_CLI_PROGRESSTILECALLBACK_H
31#define APPLESEED_CLI_PROGRESSTILECALLBACK_H
32
33// appleseed.renderer headers.
34#include "renderer/api/rendering.h"
35
36// appleseed.foundation headers.
37#include "foundation/platform/compiler.h"
38#include "foundation/platform/thread.h"
39
40// Standard headers.
41#include <cstddef>
42#include <memory>
43
44// Forward declarations.
45namespace foundation { class Logger; }
46namespace renderer { class Frame; }
47
48namespace appleseed {
49namespace cli {
50
51class ProgressTileCallback
52 : public renderer::TileCallbackBase
53{
54 public:
55 explicit ProgressTileCallback(foundation::Logger& logger);
56
57 virtual void release() APPLESEED_OVERRIDE;
58
59 virtual void post_render_tile(
60 const renderer::Frame* frame,
61 const size_t tile_x,
62 const size_t tile_y) APPLESEED_OVERRIDE;
63
64 protected:
65 foundation::Logger& m_logger;
66
67 virtual void do_post_render_tile(
68 const renderer::Frame* frame,
69 const size_t tile_x,
70 const size_t tile_y);
71
72 private:
73 boost::mutex m_mutex;
74 size_t m_rendered_pixels;
75};
76
77class ProgressTileCallbackFactory
78 : public renderer::ITileCallbackFactory
79{
80 public:
81 explicit ProgressTileCallbackFactory(foundation::Logger& logger);
82
83 virtual void release() APPLESEED_OVERRIDE;
84
85 virtual renderer::ITileCallback* create() APPLESEED_OVERRIDE;
86
87 private:
88 std::auto_ptr<renderer::ITileCallback> m_callback;
89};
90
91} // namespace cli
92} // namespace appleseed
93
94#endif // !APPLESEED_CLI_PROGRESSTILECALLBACK_H
95