style cleanup: block comments
[blender.git] / intern / cycles / render / buffers.h
1 /*
2  * Copyright 2011, Blender Foundation.
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  */
18
19 #ifndef __BUFFERS_H__
20 #define __BUFFERS_H__
21
22 #include "device_memory.h"
23
24 #include "film.h"
25
26 #include "kernel_types.h"
27
28 #include "util_string.h"
29 #include "util_thread.h"
30 #include "util_types.h"
31
32 CCL_NAMESPACE_BEGIN
33
34 class Device;
35 struct float4;
36
37 /* Buffer Parameters
38  * Size of render buffer and how it fits in the full image (border render). */
39
40 class BufferParams {
41 public:
42         /* width/height of the physical buffer */
43         int width;
44         int height;
45
46         /* offset into and width/height of the full buffer */
47         int full_x;
48         int full_y;
49         int full_width;
50         int full_height;
51
52         /* passes */
53         vector<Pass> passes;
54
55         /* functions */
56         BufferParams();
57
58         void get_offset_stride(int& offset, int& stride);
59         bool modified(const BufferParams& params);
60         void add_pass(PassType type);
61         int get_passes_size();
62 };
63
64 /* Render Buffers */
65
66 class RenderBuffers {
67 public:
68         /* buffer parameters */
69         BufferParams params;
70         /* float buffer */
71         device_vector<float> buffer;
72         /* random number generator state */
73         device_vector<uint> rng_state;
74         /* mutex, must be locked manually by callers */
75         thread_mutex mutex;
76
77         RenderBuffers(Device *device);
78         ~RenderBuffers();
79
80         void reset(Device *device, BufferParams& params);
81
82         bool copy_from_device();
83         bool get_pass(PassType type, float exposure, int sample, int components, float *pixels);
84
85 protected:
86         void device_free();
87
88         Device *device;
89 };
90
91 /* Display Buffer
92  *
93  * The buffer used for drawing during render, filled by tonemapping the render
94  * buffers and converting to uchar4 storage. */
95
96 class DisplayBuffer {
97 public:
98         /* buffer parameters */
99         BufferParams params;
100         /* dimensions for how much of the buffer is actually ready for display.
101          * with progressive render we can be using only a subset of the buffer.
102          * if these are zero, it means nothing can be drawn yet */
103         int draw_width, draw_height;
104         /* draw alpha channel? */
105         bool transparent;
106         /* byte buffer for tonemapped result */
107         device_vector<uchar4> rgba;
108         /* mutex, must be locked manually by callers */
109         thread_mutex mutex;
110
111         DisplayBuffer(Device *device);
112         ~DisplayBuffer();
113
114         void reset(Device *device, BufferParams& params);
115         void write(Device *device, const string& filename);
116
117         void draw_set(int width, int height);
118         void draw(Device *device);
119         bool draw_ready();
120
121 protected:
122         void device_free();
123
124         Device *device;
125 };
126
127 CCL_NAMESPACE_END
128
129 #endif /* __BUFFERS_H__ */
130