#pragma once

#include "BsCorePrerequisites.h"

namespace BansheeEngine
{
	/**
	 * @brief	Represents a 3D region of pixels used for referencing pixel data.
	 */
	struct BS_CORE_EXPORT PixelVolume
	{
		UINT32 left, top, right, bottom, front, back;

		PixelVolume()
			: left(0), top(0), right(1), bottom(1), front(0), back(1)
		{ }

		PixelVolume(UINT32 left, UINT32 top, UINT32 right, UINT32 bottom):
			left(left), top(top), right(right), bottom(bottom), front(0), back(1)
		{
			assert(right >= left && bottom >= top && back >= front);
		}

		PixelVolume(UINT32 left, UINT32 top, UINT32 front, UINT32 right, UINT32 bottom, UINT32 back):
			left(left), top(top), right(right), bottom(bottom), front(front), back(back)
		{
			assert(right >= left && bottom >= top && back >= front);
		}
            
		/**
		 * @brief	Return true if the other box is a part of this one.
		 */
		bool contains(const PixelVolume &volume) const
		{
			return (volume.left >= left && volume.top >= top && volume.front >= front &&
				volume.right <= right && volume.bottom <= bottom && volume.back <= back);
		}
            
		UINT32 getWidth() const { return right-left; }
		UINT32 getHeight() const { return bottom-top; }
		UINT32 getDepth() const { return back-front; }
	};
}