]> git.lizzy.rs Git - irrlicht.git/blob - source/Irrlicht/CDepthBuffer.cpp
Merging r6145 through r6171 from trunk to ogl-es branch
[irrlicht.git] / source / Irrlicht / CDepthBuffer.cpp
1 // Copyright (C) 2002-2012 Nikolaus Gebhardt / Thomas Alten\r
2 // This file is part of the "Irrlicht Engine".\r
3 // For conditions of distribution and use, see copyright notice in irrlicht.h\r
4 \r
5 #include "IrrCompileConfig.h"\r
6 #include "SoftwareDriver2_compile_config.h"\r
7 #include "CDepthBuffer.h"\r
8 \r
9 #ifdef _IRR_COMPILE_WITH_BURNINGSVIDEO_\r
10 \r
11 namespace irr\r
12 {\r
13 namespace video\r
14 {\r
15 \r
16 \r
17 //! constructor\r
18 CDepthBuffer::CDepthBuffer(const core::dimension2d<u32>& size)\r
19 : Buffer(0), Size(0,0)\r
20 {\r
21         #ifdef _DEBUG\r
22         setDebugName("CDepthBuffer");\r
23         #endif\r
24 \r
25         setSize(size);\r
26 }\r
27 \r
28 \r
29 \r
30 //! destructor\r
31 CDepthBuffer::~CDepthBuffer()\r
32 {\r
33         if (Buffer)\r
34         {\r
35                 delete[] Buffer;\r
36                 Buffer = 0;\r
37         }\r
38 }\r
39 \r
40 \r
41 \r
42 //! clears the zbuffer\r
43 void CDepthBuffer::clear(f32 value, interlaced_control interlaced)\r
44 {\r
45         ieee754 zMaxValue;\r
46 \r
47 #ifdef SOFTWARE_DRIVER_2_USE_WBUFFER\r
48         zMaxValue.f = 1.f-value;\r
49 #else\r
50         zMaxValue.f = value;\r
51 #endif\r
52 \r
53         memset32_interlaced(Buffer, zMaxValue.u, Pitch, Size.Height, interlaced);\r
54 }\r
55 \r
56 \r
57 \r
58 //! sets the new size of the buffer\r
59 void CDepthBuffer::setSize(const core::dimension2d<u32>& size)\r
60 {\r
61         if (size == Size)\r
62                 return;\r
63 \r
64         Size = size;\r
65 \r
66         delete [] Buffer;\r
67 \r
68         Pitch = size.Width * sizeof ( fp24 );\r
69         size_t TotalSize = Pitch * size.Height;\r
70         Buffer = new u8[align_next(TotalSize,16)];\r
71 \r
72         clear( 1.f, interlace_disabled());\r
73 }\r
74 \r
75 \r
76 \r
77 //! returns the size of the buffer\r
78 const core::dimension2d<u32>& CDepthBuffer::getSize() const\r
79 {\r
80         return Size;\r
81 }\r
82 \r
83 // -----------------------------------------------------------------\r
84 \r
85 //! constructor\r
86 CStencilBuffer::CStencilBuffer(const core::dimension2d<u32>& size, unsigned bit)\r
87 : Buffer(0), Size(0,0),Bit(bit)\r
88 {\r
89         #ifdef _DEBUG\r
90         setDebugName("CStencilBuffer");\r
91         #endif\r
92 \r
93         setSize(size);\r
94 }\r
95 \r
96 \r
97 \r
98 //! destructor\r
99 CStencilBuffer::~CStencilBuffer()\r
100 {\r
101         if (Buffer)\r
102         {\r
103                 delete[] Buffer;\r
104                 Buffer = 0;\r
105         }\r
106 }\r
107 \r
108 \r
109 \r
110 //! clears the buffer\r
111 void CStencilBuffer::clear(u32 value, const interlaced_control interlaced)\r
112 {\r
113         u32 set = value;\r
114         if (Bit == 8)\r
115         {\r
116                 set |= set << 8;\r
117                 set |= set << 16;\r
118         }\r
119         memset32_interlaced ( Buffer, set, Pitch,Size.Height,interlaced );\r
120 }\r
121 \r
122 \r
123 \r
124 //! sets the new size of the buffer\r
125 void CStencilBuffer::setSize(const core::dimension2d<u32>& size)\r
126 {\r
127         if (size == Size)\r
128                 return;\r
129 \r
130         Size = size;\r
131 \r
132         delete [] Buffer;\r
133 \r
134         Pitch = size.Width * sizeof (tStencilSample);\r
135         size_t TotalSize = Pitch * size.Height;\r
136         Buffer = new u8[align_next(TotalSize,16)];\r
137 \r
138         clear(0, interlace_disabled());\r
139 }\r
140 \r
141 \r
142 \r
143 //! returns the size of the buffer\r
144 const core::dimension2d<u32>& CStencilBuffer::getSize() const\r
145 {\r
146         return Size;\r
147 }\r
148 \r
149 \r
150 \r
151 } // end namespace video\r
152 } // end namespace irr\r
153 \r
154 #endif // _IRR_COMPILE_WITH_BURNINGSVIDEO_\r
155 \r
156 namespace irr\r
157 {\r
158 namespace video\r
159 {\r
160 \r
161 //! creates a ZBuffer\r
162 IDepthBuffer* createDepthBuffer(const core::dimension2d<u32>& size)\r
163 {\r
164         #ifdef _IRR_COMPILE_WITH_BURNINGSVIDEO_\r
165         return new CDepthBuffer(size);\r
166         #else\r
167         return 0;\r
168         #endif // _IRR_COMPILE_WITH_BURNINGSVIDEO_\r
169 }\r
170 \r
171 \r
172 //! creates a Stencil Buffer\r
173 IStencilBuffer* createStencilBuffer(const core::dimension2d<u32>& size, u32 bit)\r
174 {\r
175         #ifdef _IRR_COMPILE_WITH_BURNINGSVIDEO_\r
176         return new CStencilBuffer(size,bit);\r
177         #else\r
178         return 0;\r
179         #endif // _IRR_COMPILE_WITH_BURNINGSVIDEO_\r
180 }\r
181 \r
182 } // end namespace video\r
183 } // end namespace irr\r
184 \r
185 \r
186 \r