//	Darkstar Engine  (c) UnderWorld Interactive Studio (all coding by Svarog    2007)
//
//      Данный файл является частью Darkstar Engine. Любое использование кода файла
//      без согласия компании, является нарушением закона об авторском праве (в слу-
//      чае если не оговорено обратное).
//
//      Имя файла: sampler_render_state.cpp
//      Краткое описание: Sampler render state
//

#ifndef DSE_GS_RENDER_STATE_SAMPLER_HPP
#define DSE_GS_RENDER_STATE_SAMPLER_HPP

#include <Darkstar/common.hpp>
#include <Darkstar/Graphic System/Render State/common_render_state.hpp>

namespace gs
{
	enum SAMPLER_TYPE
	{
		VS_SAMPLER = 0,
		PS_SAMPLER = 1,
		GS_SAMPLER = 2,
	};

	class SamplerRenderState
	{
	private:
		DTEXADDRESS addressu, addressv, addressw;
		DTEXFILTER filter;
		float mip_lod_bias;
		unsigned int max_anisotropy;
	public:
		SamplerRenderState();
		SamplerRenderState(const SamplerRenderState& sm);
		~SamplerRenderState();

		bool operator==(const SamplerRenderState& state) const;

		void setAddressU(const DTEXADDRESS& new_addressu);
		void setAddressV(const DTEXADDRESS& new_addresv);
		void setAddressW(const DTEXADDRESS& new_addresw);
		void setFilter(const DTEXFILTER& new_filter);
		void setMipLODBias(const float new_mip_lod_bias);
		void setMaxAnisotropy(const unsigned int max_anisotropy);

		const DTEXADDRESS& getAddressU() const;
		const DTEXADDRESS& getAddressV() const;
		const DTEXADDRESS& getAddressW() const;
		const DTEXFILTER& getFilter() const;
		float getMipLODBias() const;
		unsigned int getMaxAnisotropy() const;

		void set(const unsigned int sampler_index, const SAMPLER_TYPE& s_type);
		void setVS(const unsigned int sampler_index);
		void setPS(const unsigned int sampler_index);
		void setGS(const unsigned int sampler_index);
	};
};

#endif
