void VPostProcessFXAA::Execute() { if (!IsActive() || !m_bIsInitialized) return; INSERT_PERF_MARKER_SCOPE("FXAA"); RenderingOptimizationHelpers_cl::SetShaderPreference(112); if (m_spFrameCopyTexture != NULL) { Vision::Renderer.CopyToTexture(m_spFrameCopyTexture, 0, 0, m_iWidth, m_iHeight); } VCompiledShaderPass *pPass = m_spMask->GetTechnique()->GetShader(0); VShaderConstantBuffer *pPS = pPass->GetConstantBuffer(VSS_PixelShader); hkvVec4 invScreenSize(1.0f / m_iWidth, 1.0f / m_iHeight, 0, 0); if (m_iRegScreenSize >= 0) { pPS->SetSingleRegisterF(m_iRegScreenSize, invScreenSize.data); } tempMasks.Clear(); tempMasks.AppendEntryFast(m_spMask); Vision::RenderLoopHelper.RenderScreenMasks(tempMasks); }
bool ATOM_HeatHazeEffect::render (ATOM_RenderDevice *device) { if( !init(device) ) return false; _material->setActiveEffect ("default"); #if 0 ATOM_PostEffect *prevEffect = getPreviousEffect (); ATOM_Texture *inputTexture = prevEffect ? prevEffect->getRenderTarget() : _chain->getInputTexture(); #else ATOM_AUTOREF(ATOM_Texture) inputTexture = getSourceInputTex(); #endif if (!inputTexture) { return false; } device->setRenderTarget (0, getRenderTarget()); device->setViewport (0, ATOM_Rect2Di(0, 0, getRenderTarget()->getWidth(), getRenderTarget()->getHeight())); ATOM_Vector4f invScreenSize(1.0f / ATOM_RenderScheme::getCurrentRenderScheme()->getWidth (), 1.0f / ATOM_RenderScheme::getCurrentRenderScheme()->getHeight(), 0, 0 ); ATOM_Vector4f perturbFactor(_perturbScale, 1.0f / _perturbDistance, _perturbSpeed, _perturbTiling ); _material->getParameterTable()->setVector("invScreenSize",invScreenSize); _material->getParameterTable()->setVector("perturbScale",perturbFactor); _material->getParameterTable()->setTexture ("inputTexture", inputTexture.get()); _material->getParameterTable()->setTexture ("perturbTexture", _perturbationTex.get()); drawTexturedFullscreenQuad ( device, _material.get(), inputTexture->getWidth(), inputTexture->getHeight() ); return true; }
void RocketDocument3D::RecalculateBatch(RocketBatchInfo& batchInfo) { Urho3D::SharedPtr<VertexBuffer> vBuff(new VertexBuffer(context_)); if (batchInfo.texture) { vBuff->SetSize(batchInfo.vertices.Size(), MASK_POSITION | MASK_COLOR | MASK_TEXCOORD1, true); } else { vBuff->SetSize(batchInfo.vertices.Size(), MASK_POSITION | MASK_COLOR, true); } Vector2 invScreenSize(1.0f / _rocketContext->GetDimensions().x, 1.0f / _rocketContext->GetDimensions().y); float* dest = (float*)vBuff->Lock(0, batchInfo.vertices.Size(), true); for (Urho3D::Vector<RocketVertexInfo>::Iterator itr = batchInfo.vertices.Begin(); itr != batchInfo.vertices.End(); ++itr) { *dest++ = ((*itr).position.x_ + batchInfo.position.x_ - (_rocketContext->GetDimensions().x / 2.f)) / 2.f; *dest++ = ((*itr).position.y_ + batchInfo.position.y_ - (_rocketContext->GetDimensions().y / 2.f)) / -2.f; *dest++ = batchInfo.position.z_; *((unsigned*)dest) = (*itr).color.ToUInt(); dest++; if (batchInfo.texture) { *dest++ = (*itr).textureCoordinates.x_; *dest++ = (*itr).textureCoordinates.y_; } } vBuff->Unlock(); Urho3D::SharedPtr<IndexBuffer> iBuff(new IndexBuffer(context_)); iBuff->SetSize(batchInfo.indicies.Size() * 3, true); // indices unsigned* indices_stream = (unsigned*)iBuff->Lock(0, batchInfo.indicies.Size() * 3, true); for (Urho3D::Vector<Urho3D::Vector3>::Iterator itr = batchInfo.indicies.Begin(); itr != batchInfo.indicies.End(); ++itr) { *indices_stream++ = (unsigned int)(*itr).x_; *indices_stream++ = (unsigned int)(*itr).y_; *indices_stream++ = (unsigned int)(*itr).z_; } iBuff->Unlock(); if (!batchInfo.batch) { batchInfo.batch = new Urho3D::SourceBatch(); batchInfo.batch->geometry_ = new Geometry(context_); batchInfo.batch->geometryType_ = GEOM_STATIC; } if (batchInfo.texture) { Urho3D::XMLFile* file = GetSubsystem<Urho3D::ResourceCache>()->GetResource<Urho3D::XMLFile>("Materials/RocketDocument.xml"); batchInfo.batch->material_ = new Urho3D::Material(context_); batchInfo.batch->material_->Load(file->GetRoot()); batchInfo.batch->material_->SetTexture(TU_DIFFUSE, batchInfo.texture); } else { batchInfo.batch->material_ = GetSubsystem<Urho3D::ResourceCache>()->GetResource<Urho3D::Material>("Materials/RocketDocumentNoTexture.xml"); } batchInfo.batch->material_->SetCullMode(CULL_NONE); batchInfo.batch->geometry_->SetVertexBuffer(0, vBuff); batchInfo.batch->geometry_->SetIndexBuffer(iBuff); //Draw indexed geometry batchInfo.batch->geometry_->SetDrawRange(TRIANGLE_LIST, 0, iBuff->GetIndexCount(), 0, vBuff->GetVertexCount()); }