]> git.lizzy.rs Git - irrlicht.git/blob - source/Irrlicht/CDepthBuffer.cpp
Fix some more problems with OSX build file.
[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)\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 ( Buffer, zMaxValue.u, TotalSize );\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         TotalSize = Pitch * size.Height;\r
70         Buffer = new u8[align_next(TotalSize,16)];\r
71         clear ();\r
72 }\r
73 \r
74 \r
75 \r
76 //! returns the size of the buffer\r
77 const core::dimension2d<u32>& CDepthBuffer::getSize() const\r
78 {\r
79         return Size;\r
80 }\r
81 \r
82 // -----------------------------------------------------------------\r
83 \r
84 //! constructor\r
85 CStencilBuffer::CStencilBuffer(const core::dimension2d<u32>& size, unsigned bit)\r
86 : Buffer(0), Size(0,0),Bit(bit)\r
87 {\r
88         #ifdef _DEBUG\r
89         setDebugName("CStencilBuffer");\r
90         #endif\r
91 \r
92         setSize(size);\r
93 }\r
94 \r
95 \r
96 \r
97 //! destructor\r
98 CStencilBuffer::~CStencilBuffer()\r
99 {\r
100         if (Buffer)\r
101         {\r
102                 delete[] Buffer;\r
103                 Buffer = 0;\r
104         }\r
105 }\r
106 \r
107 \r
108 \r
109 //! clears the buffer\r
110 void CStencilBuffer::clear(u8 value)\r
111 {\r
112         u32 set = value;\r
113         if (Bit == 8)\r
114         {\r
115                 set |= set << 8;\r
116                 set |= set << 16;\r
117         }\r
118         memset32 ( Buffer, set, TotalSize );\r
119 }\r
120 \r
121 \r
122 \r
123 //! sets the new size of the buffer\r
124 void CStencilBuffer::setSize(const core::dimension2d<u32>& size)\r
125 {\r
126         if (size == Size)\r
127                 return;\r
128 \r
129         Size = size;\r
130 \r
131         delete [] Buffer;\r
132 \r
133         Pitch = size.Width * sizeof (tStencilSample);\r
134         TotalSize = Pitch * size.Height;\r
135         Buffer = new u8[align_next(TotalSize,16)];\r
136         clear ();\r
137 }\r
138 \r
139 \r
140 \r
141 //! returns the size of the buffer\r
142 const core::dimension2d<u32>& CStencilBuffer::getSize() const\r
143 {\r
144         return Size;\r
145 }\r
146 \r
147 \r
148 \r
149 } // end namespace video\r
150 } // end namespace irr\r
151 \r
152 #endif // _IRR_COMPILE_WITH_BURNINGSVIDEO_\r
153 \r
154 namespace irr\r
155 {\r
156 namespace video\r
157 {\r
158 \r
159 //! creates a ZBuffer\r
160 IDepthBuffer* createDepthBuffer(const core::dimension2d<u32>& size)\r
161 {\r
162         #ifdef _IRR_COMPILE_WITH_BURNINGSVIDEO_\r
163         return new CDepthBuffer(size);\r
164         #else\r
165         return 0;\r
166         #endif // _IRR_COMPILE_WITH_BURNINGSVIDEO_\r
167 }\r
168 \r
169 \r
170 //! creates a Stencil Buffer\r
171 IStencilBuffer* createStencilBuffer(const core::dimension2d<u32>& size, u32 bit)\r
172 {\r
173         #ifdef _IRR_COMPILE_WITH_BURNINGSVIDEO_\r
174         return new CStencilBuffer(size,bit);\r
175         #else\r
176         return 0;\r
177         #endif // _IRR_COMPILE_WITH_BURNINGSVIDEO_\r
178 }\r
179 \r
180 } // end namespace video\r
181 } // end namespace irr\r
182 \r
183 \r
184 \r