예제 #1
0
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);
}
예제 #2
0
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;
}
예제 #3
0
		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());
		}