Cycles: Make all #include statements relative to cycles source directory
[blender.git] / intern / cycles / render / buffers.h
1 /*
2  * Copyright 2011-2013 Blender Foundation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #ifndef __BUFFERS_H__
18 #define __BUFFERS_H__
19
20 #include "device/device_memory.h"
21
22 #include "render/film.h"
23
24 #include "kernel/kernel_types.h"
25
26 #include "util/util_half.h"
27 #include "util/util_string.h"
28 #include "util/util_thread.h"
29 #include "util/util_types.h"
30
31 CCL_NAMESPACE_BEGIN
32
33 class Device;
34 struct DeviceDrawParams;
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         array<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
71         /* float buffer */
72         device_vector<float> buffer;
73         /* random number generator state */
74         device_vector<uint> rng_state;
75
76         explicit RenderBuffers(Device *device);
77         ~RenderBuffers();
78
79         void reset(Device *device, BufferParams& params);
80
81         bool copy_from_device();
82         bool get_pass_rect(PassType type, float exposure, int sample, int components, float *pixels);
83
84 protected:
85         void device_free();
86
87         Device *device;
88 };
89
90 /* Display Buffer
91  *
92  * The buffer used for drawing during render, filled by converting the render
93  * buffers to byte of half float storage */
94
95 class DisplayBuffer {
96 public:
97         /* buffer parameters */
98         BufferParams params;
99         /* dimensions for how much of the buffer is actually ready for display.
100          * with progressive render we can be using only a subset of the buffer.
101          * if these are zero, it means nothing can be drawn yet */
102         int draw_width, draw_height;
103         /* draw alpha channel? */
104         bool transparent;
105         /* use half float? */
106         bool half_float;
107         /* byte buffer for converted result */
108         device_vector<uchar4> rgba_byte;
109         device_vector<half4> rgba_half;
110
111         DisplayBuffer(Device *device, bool linear = false);
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, const DeviceDrawParams& draw_params);
119         bool draw_ready();
120
121         device_memory& rgba_data();
122
123 protected:
124         void device_free();
125
126         Device *device;
127 };
128
129 /* Render Tile
130  * Rendering task on a buffer */
131
132 class RenderTile {
133 public:
134         int x, y, w, h;
135         int start_sample;
136         int num_samples;
137         int sample;
138         int resolution;
139         int offset;
140         int stride;
141
142         device_ptr buffer;
143         device_ptr rng_state;
144
145         RenderBuffers *buffers;
146
147         RenderTile();
148 };
149
150 CCL_NAMESPACE_END
151
152 #endif /* __BUFFERS_H__ */
153