/*****************************************************************************
 *	SamplerState.h  														 *
 *																			 *
 *	XFX::Graphics::SamplerState class definition file						 *
 *	Copyright (c) XFX Team. All Rights Reserved 							 *
 *****************************************************************************/
#ifndef _XFX_GRAPHICS_SAMPLERSTATE_
#define _XFX_GRAPHICS_SAMPLERSTATE_

#include "GraphicsResource.h"

namespace XFX
{
	namespace Graphics
	{
		/**
		 * Contains sampler state, which determines how to sample texture data.
		 */
		class SamplerState : GraphicsResource
		{
		private:
			TextureAddressMode_t addressU;
			TextureAddressMode_t addressV;
			TextureAddressMode_t addressW;
			TextureFilter_t filter;
			bool isBound;
			int maxAnisotropy;
			int maxMipLevel;
			int mipMapLevelOfDetailBias;

		protected:
			void Dispose(bool disposing);

		public:
			TextureAddressMode_t getAddressU() const;
			void setAddressU(TextureAddressMode_t value);
			TextureAddressMode_t getAddressV() const;
			void setAddressV(TextureAddressMode_t value);
			TextureAddressMode_t getAddressW() const;
			void setAddressW(TextureAddressMode_t value);
			TextureFilter_t getFilter() const;
			void setFilter(TextureFilter_t value);
			int getMaxAnisotropy() const;
			void setMaxAnisotropy(int value);
			int getMaxMipLevel() const;
			void setMaxMipLevel(int value);
			int getMipMapLevelOfDetailBias() const;
			void setMipMapLevelOfDetailBias(int value);

			static const SamplerState AnisotropicClamp;
			static const SamplerState AnisotropicWrap;
			static const SamplerState LinearClamp;
			static const SamplerState LinearWrap;
			static const SamplerState PointClamp;
			static const SamplerState PointWrap;

			SamplerState();
			~SamplerState();

			static const Type& GetType();

			bool operator==(const SamplerState& right) const;
			bool operator!=(const SamplerState& right) const;
		};
	}
}

#endif //_XFX_GRAPHICS_SAMPLERSTATE_