//! destructor\r
CDepthBuffer::~CDepthBuffer()\r
{\r
- delete [] Buffer;\r
+ if (Buffer)\r
+ {\r
+ delete[] Buffer;\r
+ Buffer = 0;\r
+ }\r
}\r
\r
\r
\r
//! clears the zbuffer\r
-void CDepthBuffer::clear()\r
+void CDepthBuffer::clear(f32 value, interlaced_control interlaced)\r
{\r
+ ieee754 zMaxValue;\r
\r
#ifdef SOFTWARE_DRIVER_2_USE_WBUFFER\r
- f32 zMax = 0.f;\r
+ zMaxValue.f = 1.f-value;\r
#else\r
- f32 zMax = 1.f;\r
+ zMaxValue.f = value;\r
#endif\r
\r
- u32 zMaxValue;\r
- zMaxValue = IR(zMax);\r
-\r
- memset32 ( Buffer, zMaxValue, TotalSize );\r
+ memset32_interlaced(Buffer, zMaxValue.u, Pitch, Size.Height, interlaced);\r
}\r
\r
\r
\r
-//! sets the new size of the zbuffer\r
+//! sets the new size of the buffer\r
void CDepthBuffer::setSize(const core::dimension2d<u32>& size)\r
{\r
if (size == Size)\r
delete [] Buffer;\r
\r
Pitch = size.Width * sizeof ( fp24 );\r
- TotalSize = Pitch * size.Height;\r
- Buffer = new u8[TotalSize];\r
- clear ();\r
+ size_t TotalSize = Pitch * size.Height;\r
+ Buffer = new u8[align_next(TotalSize,16)];\r
+\r
+ clear( 1.f, interlace_disabled());\r
}\r
\r
\r
\r
-//! returns the size of the zbuffer\r
+//! returns the size of the buffer\r
const core::dimension2d<u32>& CDepthBuffer::getSize() const\r
{\r
return Size;\r
// -----------------------------------------------------------------\r
\r
//! constructor\r
-CStencilBuffer::CStencilBuffer(const core::dimension2d<u32>& size)\r
-: Buffer(0), Size(0,0)\r
+CStencilBuffer::CStencilBuffer(const core::dimension2d<u32>& size, unsigned bit)\r
+: Buffer(0), Size(0,0),Bit(bit)\r
{\r
#ifdef _DEBUG\r
- setDebugName("CDepthBuffer");\r
+ setDebugName("CStencilBuffer");\r
#endif\r
\r
setSize(size);\r
//! destructor\r
CStencilBuffer::~CStencilBuffer()\r
{\r
- delete [] Buffer;\r
+ if (Buffer)\r
+ {\r
+ delete[] Buffer;\r
+ Buffer = 0;\r
+ }\r
}\r
\r
\r
\r
-//! clears the zbuffer\r
-void CStencilBuffer::clear()\r
+//! clears the buffer\r
+void CStencilBuffer::clear(u32 value, const interlaced_control interlaced)\r
{\r
- memset32 ( Buffer, 0, TotalSize );\r
+ u32 set = value;\r
+ if (Bit == 8)\r
+ {\r
+ set |= set << 8;\r
+ set |= set << 16;\r
+ }\r
+ memset32_interlaced ( Buffer, set, Pitch,Size.Height,interlaced );\r
}\r
\r
\r
\r
-//! sets the new size of the zbuffer\r
+//! sets the new size of the buffer\r
void CStencilBuffer::setSize(const core::dimension2d<u32>& size)\r
{\r
if (size == Size)\r
\r
delete [] Buffer;\r
\r
- Pitch = size.Width * sizeof ( u32 );\r
- TotalSize = Pitch * size.Height;\r
- Buffer = new u8[TotalSize];\r
- clear ();\r
+ Pitch = size.Width * sizeof (tStencilSample);\r
+ size_t TotalSize = Pitch * size.Height;\r
+ Buffer = new u8[align_next(TotalSize,16)];\r
+\r
+ clear(0, interlace_disabled());\r
}\r
\r
\r
\r
-//! returns the size of the zbuffer\r
+//! returns the size of the buffer\r
const core::dimension2d<u32>& CStencilBuffer::getSize() const\r
{\r
return Size;\r
}\r
\r
\r
-//! creates a ZBuffer\r
-IStencilBuffer* createStencilBuffer(const core::dimension2d<u32>& size)\r
+//! creates a Stencil Buffer\r
+IStencilBuffer* createStencilBuffer(const core::dimension2d<u32>& size, u32 bit)\r
{\r
#ifdef _IRR_COMPILE_WITH_BURNINGSVIDEO_\r
- return new CStencilBuffer(size);\r
+ return new CStencilBuffer(size,bit);\r
#else\r
return 0;\r
#endif // _IRR_COMPILE_WITH_BURNINGSVIDEO_\r