//	Darkstar Engine  (c) UnderWorld Interactive Studio (all coding by Svarog    2007-2008)
//
//      Данный файл является частью Darkstar Engine. Любое использование кода файла
//      без согласия компании, является нарушением закона об авторском праве (в слу-
//      чае если не оговорено обратное).
//
//      Имя файла: shader_include_d3d9.cpp
//      Краткое описание: class for implement include files in shader for directx 9
//

#ifdef GD_D3D9

#include <Darkstar/Graphic System/Effect/shader_include_d3d9.hpp>
#include <Darkstar/Kernel/FileSystem/dfile.hpp>
#include <Darkstar/Kernel/logh.hpp>

using ker::Log;
using ker::DFile;
using gs::ShaderInclude;

ShaderInclude::ShaderInclude() 
{

};

ShaderInclude::~ShaderInclude()
{

};

HRESULT ShaderInclude::Open(D3DXINCLUDE_TYPE IncludeType, LPCSTR pFileName, LPCVOID pParentData, LPCVOID* ppData, UINT* pBytes)
{
	DFile incl(pFileName);
	if(!incl.getIsLoaded())
	{
		lwar << "Cannot open include file: " << pFileName;
		return S_FALSE;
	};
	*pBytes = incl.getSize();
	char* data;
	try
	{
		data = new char[*pBytes];
	}
	catch(std::bad_alloc&)
	{
		lwar << "Cannot find enough memory to allocate data from file: " << pFileName;
		return S_FALSE;
	};
	incl.read(*pBytes, data);
	*ppData = data;
	return S_OK;
};

HRESULT ShaderInclude::Close(LPCVOID data)
{
	if(data)
	{
		delete [] data;
		data = NULL;
	};
	return S_OK;
};

#endif