Beispiel #1
0
void sky::InitSky(const std::wstring& envmapFilename, float skyRadius)
{
	mRadius = skyRadius;
	HR(D3DXCreateSphere(g_app->m_pD3DDev, skyRadius, 30, 30, &mSphere, 0),L"sky::sky: Failed to create sky sphere: ");
	HR(D3DXCreateCubeTextureFromFile(g_app->m_pD3DDev, envmapFilename.c_str(), &mEnvMap),
		L"sky::sky: Failed to create sky texture from file: ");

	LPCWSTR shaderFile;
	switch(g_renderer->m_shaderVersion)
	{
	case 2: shaderFile = L"Shaders/sky_2_0.fx"; break;
	case 3: shaderFile = L"Shaders/sky_3_0.fx"; break;
	default: throw std::runtime_error("buildFX: m_shaderVersion must be 2 or 3."); break;
	}
	ID3DXBuffer* errors = 0;
	HR(D3DXCreateEffectFromFileEx(g_app->m_pD3DDev, shaderFile, 0, 0, 0, 0, 0, &m_FX, &errors),
		L"sky::sky: Failed to create sky effects: ");
	if( errors )
	{
		MessageBox(0, toWideString((char*)errors->GetBufferPointer(),-1).c_str(), 0, 0);
		throw std::runtime_error("sky::sky: errors exist in initializing sky");
	}

	mhTech   = m_FX->GetTechniqueByName("SkyTech");
	mhWVP    = m_FX->GetParameterByName(0, "gWVP");
	mhEnvMap = m_FX->GetParameterByName(0, "gEnvMap");

	// Set effect parameters that do not vary.
	HR(m_FX->SetTechnique(mhTech),L"sky::sky: Failed to set sky technique: ");
	HR(m_FX->SetTexture(mhEnvMap, mEnvMap),L"sky::sky: Failed to set sky texture: ");
}
Beispiel #2
0
SDFShadow::SDFShadow(UINT width, UINT height)
:mSDFShadowMap(0), SDFShadowFX(0)
,mCullingVolumeVB(0),mCullingVolumeIB(0)
{
	mWidth = width;
	mHeight = height;

	D3DVIEWPORT9 vp = {0, 0, mWidth, mHeight, 0.0f, 1.0f};
	ID3DXBuffer* errors = 0;
	HR(D3DXCreateEffectFromFileEx(gd3dDevice, "FX/SDFShadow.fx", 0, 0, 0, 
		0, 0, &SDFShadowFX, &errors));
	if( errors )
		MessageBox(0, (char*)errors->GetBufferPointer(), 0, 0);

	SDFShadowTech		= SDFShadowFX->GetTechniqueByName("SDFShadowTech");
	ViewProj			= SDFShadowFX->GetParameterByName(0, "gViewProj");
	LightDir			= SDFShadowFX->GetParameterByName(0, "gLightDir");
	EyePosW				= SDFShadowFX->GetParameterByName(0, "gEyePosW");
	FarClipDist			= SDFShadowFX->GetParameterByName(0, "gFarClipDist");
	SDFToWordInv0		= SDFShadowFX->GetParameterByName(0, "gSDFToWordInv0");
	SDFBounds0			= SDFShadowFX->GetParameterByName(0, "gSDFBounds0");
	SDFRes0				= SDFShadowFX->GetParameterByName(0, "gSDFRes0");
	SDF0				= SDFShadowFX->GetParameterByName(0, "gSDF0");
	DepthMap			= SDFShadowFX->GetParameterByName(0, "gDepthMap");
	GBuffer0			= SDFShadowFX->GetParameterByName(0, "gGBuffer0");

	mSDFShadowMap = new DrawableTex2D(mWidth, mHeight, 1, D3DFMT_R32F, false, D3DFMT_D24S8, vp, false);
}
Beispiel #3
0
Sky::Sky(const std::string& envmapFilename, float skyRadius)
: mRadius(skyRadius)
{
	HR(D3DXCreateSphere(gd3dDevice, skyRadius, 30, 30, &mSphere, 0));
	HR(D3DXCreateCubeTextureFromFile(gd3dDevice, envmapFilename.c_str(), &mEnvMap));

	ID3DXBuffer* errors = 0;
	HR(D3DXCreateEffectFromFileEx(gd3dDevice, "sky.fx", 0, 0, 0, 
		0, 0, &mFX, &errors));
	if( errors )
		MessageBox(0, (char*)errors->GetBufferPointer(), 0, 0);

	mhTech   = mFX->GetTechniqueByName("SkyTech");
	mhWVP    = mFX->GetParameterByName(0, "gWVP");
	mhEnvMap = mFX->GetParameterByName(0, "gEnvMap");

	// Set effect parameters that do not vary.
	HR(mFX->SetTechnique(mhTech));
	HR(mFX->SetTexture(mhEnvMap, mEnvMap));
}