]> git.lizzy.rs Git - irrlicht.git/blobdiff - source/Irrlicht/CDepthBuffer.cpp
CIrrDeviceWin32: drop all video mode code
[irrlicht.git] / source / Irrlicht / CDepthBuffer.cpp
index e9126bda3d2480523bda9e2a5db6b05e15aec770..ec05bdabac8de27bb7ad062b9f0224ef1bb9ccd5 100644 (file)
@@ -30,30 +30,32 @@ CDepthBuffer::CDepthBuffer(const core::dimension2d<u32>& size)
 //! 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
@@ -64,14 +66,15 @@ void CDepthBuffer::setSize(const core::dimension2d<u32>& size)
        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
@@ -80,11 +83,11 @@ const core::dimension2d<u32>& CDepthBuffer::getSize() const
 // -----------------------------------------------------------------\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
@@ -95,20 +98,30 @@ CStencilBuffer::CStencilBuffer(const core::dimension2d<u32>& size)
 //! 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
@@ -118,15 +131,16 @@ void CStencilBuffer::setSize(const core::dimension2d<u32>& size)
 \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
@@ -155,11 +169,11 @@ IDepthBuffer* createDepthBuffer(const core::dimension2d<u32>& size)
 }\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