doxygen: bge scenegraph and videotexture
[blender-staging.git] / source / gameengine / VideoTexture / FilterBlueScreen.h
1 /* $Id$
2 -----------------------------------------------------------------------------
3 This source file is part of blendTex library
4
5 Copyright (c) 2007 The Zdeno Ash Miklas
6
7 This program is free software; you can redistribute it and/or modify it under
8 the terms of the GNU Lesser General Public License as published by the Free Software
9 Foundation; either version 2 of the License, or (at your option) any later
10 version.
11
12 This program is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
15
16 You should have received a copy of the GNU Lesser General Public License along with
17 this program; if not, write to the Free Software Foundation, Inc., 59 Temple
18 Place - Suite 330, Boston, MA 02111-1307, USA, or go to
19 http://www.gnu.org/copyleft/lesser.txt.
20 -----------------------------------------------------------------------------
21 */
22
23 /** \file FilterBlueScreen.h
24  *  \ingroup bgevideotex
25  */
26  
27 #if !defined FILTERBLUESCREEN_H
28 #define FILTERBLUESCREEN_H
29
30 #include "Common.h"
31
32 #include "FilterBase.h"
33
34
35 /// pixel filter for blue screen
36 class FilterBlueScreen : public FilterBase
37 {
38 public:
39         /// constructor
40         FilterBlueScreen (void);
41         /// destructor
42         virtual ~FilterBlueScreen (void) {}
43
44         /// get color
45         unsigned char * getColor (void) { return m_color; }
46         /// set color
47         void setColor (unsigned char red, unsigned char green, unsigned char blue);
48
49         /// get limits for color variation
50         unsigned short * getLimits (void) { return m_limits; }
51         /// set limits for color variation
52         void setLimits (unsigned short minLimit, unsigned short maxLimit);
53
54 protected:
55         ///  blue screen color (red component first)
56         unsigned char m_color[3];
57         /// limits for color variation - first defines, where ends fully transparent
58         /// color, second defines, where begins fully opaque color
59         unsigned short m_limits[2];
60         /// squared limits for color variation
61         unsigned int m_squareLimits[2];
62         /// distance between squared limits
63         unsigned int m_limitDist;
64
65         /// filter pixel template, source int buffer
66         template <class SRC> unsigned int tFilter (SRC src, short x, short y,
67                 short * size, unsigned int pixSize, unsigned int val)
68         {
69                 // calculate differences
70                 int difRed = int(VT_R(val)) - int(m_color[0]);
71                 int difGreen = int(VT_G(val)) - int(m_color[1]);
72                 int difBlue = int(VT_B(val)) - int(m_color[2]);
73                 // calc distance from "blue screen" color
74                 unsigned int dist = (unsigned int)(difRed * difRed + difGreen * difGreen
75                         + difBlue * difBlue);
76                 // condition for fully transparent color
77                 if (m_squareLimits[0] >= dist) 
78                         // return color with zero alpha
79                         VT_A(val) = 0;
80                 // condition for fully opaque color
81                 else if (m_squareLimits[1] <= dist)
82                         // return normal color
83                         VT_A(val) = 0xFF;
84                 // otherwise calc alpha
85                 else
86                         VT_A(val) = (((dist - m_squareLimits[0]) << 8) / m_limitDist);
87                 return val;
88         }
89
90         /// virtual filtering function for byte source
91         virtual unsigned int filter (unsigned char * src, short x, short y,
92                 short * size, unsigned int pixSize, unsigned int val = 0)
93         { return tFilter(src, x, y, size, pixSize, val); }
94         /// virtual filtering function for unsigned int source
95         virtual unsigned int filter (unsigned int * src, short x, short y,
96                 short * size, unsigned int pixSize, unsigned int val = 0)
97         { return tFilter(src, x, y, size, pixSize, val); }
98 };
99
100
101 #endif