bool Storm3D_Spotlight::setAsRenderTarget(const float *cameraView) { data->updateMatrices(cameraView); if(data->shadowMap && data->shadowMap->hasInitialized()) { if(data->shadowMap->set()) { D3DMATRIX dm = { 0 }; dm._11 = 1.f; dm._22 = 1.f; dm._33 = 1.f; dm._44 = 1.f; data->device.SetTransform(D3DTS_WORLD, &dm); data->device.SetTransform(D3DTS_VIEW, &data->properties.lightView[1]); data->device.SetTransform(D3DTS_PROJECTION, &data->properties.lightProjection); Storm3D_ShaderManager::GetSingleton()->SetViewProjectionMatrix(data->properties.lightViewProjection[1], data->properties.lightViewProjection[1]); Storm3D_ShaderManager::GetSingleton()->setSpot(data->properties.color, data->properties.position, data->properties.direction, data->properties.range, .1f); if(type == Storm3D_Spotlight::AtiFloatBuffer) data->atiFloatDepthPixelShader->apply(); else if(type == Storm3D_Spotlight::AtiBuffer) { data->device.SetSamplerState(1, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP); data->device.SetSamplerState(1, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP); data->atiDepthPixelShader->apply(); } else { data->device.SetPixelShader(0); data->device.SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE); data->device.SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE); data->device.SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1); data->device.SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1); data->device.SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_DISABLE); } return true; } IStorm3D_Logger *logger = data->storm.logger; if(logger) { logger->error("Failed to set render target"); } } return false; }
/*! \param name effect name \param effect effect to add */ void addEffect(const string &name, const Effect &effect) { ProceduralEffect result; result.effect = effect; result.init(storm); if(result.texture1 && result.texture2) effects[name] = result; else if(logger) { string message = "Cannot find both textures for procedural effect: "; message += name; logger->error(message.c_str()); logger->info(result.effect.source1.texture.texture.c_str()); logger->info(result.effect.source2.texture.texture.c_str()); } }