Cleanup: remove non-existing function declarations
[blender.git] / source / blender / compositor / intern / COM_SocketReader.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  * Contributor:
19  *      Jeroen Bakker
20  *      Monique Dewanchand
21  */
22
23 #ifndef __COM_SOCKETREADER_H__
24 #define __COM_SOCKETREADER_H__
25 #include "BLI_rect.h"
26 #include "COM_defines.h"
27
28 #ifdef WITH_CXX_GUARDEDALLOC
29 #include "MEM_guardedalloc.h"
30 #endif
31
32 typedef enum PixelSampler {
33         COM_PS_NEAREST = 0,
34         COM_PS_BILINEAR = 1,
35         COM_PS_BICUBIC = 2
36 } PixelSampler;
37
38 class MemoryBuffer;
39 /**
40  * \brief Helper class for reading socket data.
41  * Only use this class for dispatching (un-ary and n-ary) executions.
42  * \ingroup Execution
43  */
44 class SocketReader {
45 private:
46 protected:
47         /**
48          * \brief Holds the width of the output of this operation.
49          */
50         unsigned int m_width;
51
52         /**
53          * \brief Holds the height of the output of this operation.
54          */
55         unsigned int m_height;
56
57
58         /**
59          * \brief calculate a single pixel
60          * \note this method is called for non-complex
61          * \param result: is a float[4] array to store the result
62          * \param x: the x-coordinate of the pixel to calculate in image space
63          * \param y: the y-coordinate of the pixel to calculate in image space
64          * \param inputBuffers: chunks that can be read by their ReadBufferOperation.
65          */
66         virtual void executePixelSampled(float /*output*/[4],
67                                          float /*x*/,
68                                          float /*y*/,
69                                          PixelSampler /*sampler*/) { }
70
71         /**
72          * \brief calculate a single pixel
73          * \note this method is called for complex
74          * \param result: is a float[4] array to store the result
75          * \param x: the x-coordinate of the pixel to calculate in image space
76          * \param y: the y-coordinate of the pixel to calculate in image space
77          * \param inputBuffers: chunks that can be read by their ReadBufferOperation.
78          * \param chunkData: chunk specific data a during execution time.
79          */
80         virtual void executePixel(float output[4], int x, int y, void * /*chunkData*/) {
81                 executePixelSampled(output, x, y, COM_PS_NEAREST);
82         }
83
84         /**
85          * \brief calculate a single pixel using an EWA filter
86          * \note this method is called for complex
87          * \param result: is a float[4] array to store the result
88          * \param x: the x-coordinate of the pixel to calculate in image space
89          * \param y: the y-coordinate of the pixel to calculate in image space
90          * \param dx:
91          * \param dy:
92          * \param inputBuffers: chunks that can be read by their ReadBufferOperation.
93          */
94         virtual void executePixelFiltered(float /*output*/[4],
95                                           float /*x*/, float /*y*/,
96                                           float /*dx*/[2], float /*dy*/[2]) {}
97
98 public:
99         inline void readSampled(float result[4], float x, float y, PixelSampler sampler) {
100                 executePixelSampled(result, x, y, sampler);
101         }
102         inline void read(float result[4], int x, int y, void *chunkData) {
103                 executePixel(result, x, y, chunkData);
104         }
105         inline void readFiltered(float result[4], float x, float y, float dx[2], float dy[2]) {
106                 executePixelFiltered(result, x, y, dx, dy);
107         }
108
109         virtual void *initializeTileData(rcti * /*rect*/) { return 0; }
110         virtual void deinitializeTileData(rcti * /*rect*/, void * /*data*/) {}
111
112         virtual ~SocketReader() {}
113
114         virtual MemoryBuffer *getInputMemoryBuffer(MemoryBuffer ** /*memoryBuffers*/) { return 0; }
115
116         inline unsigned int getWidth() const { return this->m_width; }
117         inline unsigned int getHeight() const { return this->m_height; }
118
119 #ifdef WITH_CXX_GUARDEDALLOC
120         MEM_CXX_CLASS_ALLOC_FUNCS("COM:SocketReader")
121 #endif
122 };
123
124 #endif /* __COM_SOCKETREADER_H__ */