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_RENDERER_KERNEL_RENDERING_ITILERENDERER_H
31#define APPLESEED_RENDERER_KERNEL_RENDERING_ITILERENDERER_H
32
33// appleseed.foundation headers.
34#include "foundation/core/concepts/iunknown.h"
35
36// Standard headers.
37#include <cstddef>
38
39// Forward declarations.
40namespace foundation { class IAbortSwitch; }
41namespace foundation { class StatisticsVector; }
42namespace renderer { class Frame; }
43
44namespace renderer
45{
46
47//
48// Tile renderer interface.
49//
50
51class ITileRenderer
52 : public foundation::IUnknown
53{
54 public:
55 // Render a tile.
56 virtual void render_tile(
57 const Frame& frame,
58 const size_t tile_x,
59 const size_t tile_y,
60 const size_t pass_hash,
61 foundation::IAbortSwitch& abort_switch) = 0;
62
63 // Retrieve performance statistics.
64 virtual foundation::StatisticsVector get_statistics() const = 0;
65};
66
67
68//
69// Interface of a ITileRenderer factory.
70//
71
72class ITileRendererFactory
73 : public foundation::IUnknown
74{
75 public:
76 // Return a new tile renderer instance.
77 virtual ITileRenderer* create(const size_t thread_index) = 0;
78};
79
80} // namespace renderer
81
82#endif // !APPLESEED_RENDERER_KERNEL_RENDERING_ITILERENDERER_H
83