void VSimpleCopyPostprocess::Execute() { if (!IsActive() || !m_bIsInitialized) return; INSERT_PERF_MARKER_SCOPE("VSimpleCopyPostprocess"); RenderingOptimizationHelpers_cl::SetShaderPreference(112); int iWidth, iHeight; VisRenderContext_cl *pContext = VisRenderContext_cl::GetCurrentContext(); pContext->GetSize(iWidth, iHeight); Vision::RenderLoopHelper.SetScissorRect(NULL); Vision::RenderLoopHelper.ClearScreen(); // On DX9 a half pixel shift is required for the copy full screen pass. #if defined(_VR_DX9) const hkvVec2 texelShift(1.0f / (float)(iWidth*2), 1.0f / (float)(iHeight*2)); #else const hkvVec2 texelShift(0.0f, 0.0f); #endif VSimpleRenderState_t iState(VIS_TRANSP_NONE,RENDERSTATEFLAG_FRONTFACE|RENDERSTATEFLAG_ALWAYSVISIBLE|RENDERSTATEFLAG_NOWIREFRAME|RENDERSTATEFLAG_NOMULTISAMPLING); IVRender2DInterface *pRI = Vision::RenderLoopHelper.BeginOverlayRendering(); pRI->DrawTexturedQuad(hkvVec2(0.f,0.f), hkvVec2((float)iWidth, (float)iHeight), m_spSourceTextures[0], hkvVec2(0.0f) + texelShift, hkvVec2(1.0f) + texelShift, V_RGBA_WHITE, iState); Vision::RenderLoopHelper.EndOverlayRendering(); }
void RPG_MeshTrailEffectComponent::SetOwner(VisTypedEngineObject_cl *owner) { IVObjectComponent::SetOwner(owner); if(owner) { // Get texture or use plain white VTextureObject *trailTexture = Vision::TextureManager.Load2DTexture(m_textureFilename); if (trailTexture == NULL) trailTexture = Vision::TextureManager.GetPlainWhiteTexture(); // Get trail bones VisBaseEntity_cl *pEntity = (VisBaseEntity_cl *) GetOwner(); if(pEntity->GetMesh() == NULL) { return; } bool useFallback = false; if(pEntity->GetMesh()->GetSkeleton()) { int startIndex = pEntity->GetMesh()->GetSkeleton()->GetBoneIndexByName(m_startBoneName); int endIndex = pEntity->GetMesh()->GetSkeleton()->GetBoneIndexByName(m_endBoneName); if(startIndex > -1 && endIndex > -1) { // Use bones to define range hkvQuat rotation; pEntity->GetBoneCurrentLocalSpaceTransformation(startIndex, m_relStart, rotation); pEntity->GetBoneCurrentLocalSpaceTransformation(endIndex, m_relEnd, rotation); } else { useFallback = true; } } else { useFallback = true; } // use the fallback if there's no skeleton or if we don't have both of the bones that were specified if(useFallback) { // Fallback: Use bounding box along y axis to define range hkvAlignedBBox bbox = pEntity->GetMesh()->GetBoundingBox(); m_relStart = hkvVec3(bbox.getCenter().x, bbox.m_vMin.y, bbox.getCenter().z); m_relEnd = hkvVec3(bbox.getCenter().x, bbox.m_vMax.y, bbox.getCenter().z); } if(m_history) { // cleanup existing history if we have one delete m_history; m_history = NULL; } m_history = new VTrailHistoryEntry[m_numSegments]; m_mesh = new VisMeshBuffer_cl(VisMBSimpleVertex_t::VertexDescriptor, m_numSegments * 2, VisMeshBuffer_cl::MB_PRIMTYPE_TRISTRIP, 0, 0, VIS_MEMUSAGE_DYNAMIC); m_mesh->SetBaseTexture(trailTexture); VSimpleRenderState_t iState(VIS_TRANSP_ADDITIVE, RENDERSTATEFLAG_DOUBLESIDED | RENDERSTATEFLAG_FILTERING); m_mesh->SetDefaultRenderState(iState); m_meshObj = new VisMeshBufferObject_cl(m_mesh); m_enabled = true; RPG_MeshTrailEffectComponentManager::s_instance.Instances().AddUnique(this); } else { RPG_MeshTrailEffectComponentManager::s_instance.Instances().SafeRemove(this); } }
EXPORT_C TBBSysEvent& TBBSysEvent::operator=(const TBBSysEvent& aSysEvent) { iUid()=aSysEvent.iUid(); iState()=aSysEvent.iState(); return *this; }