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: "); }
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); }
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)); }