void FDeferredShadingSceneRenderer::RenderVisualizeTexturePool() { TRefCountPtr<IPooledRenderTarget> VisualizeTexturePool; /** Resolution for the texture pool visualizer texture. */ enum { TexturePoolVisualizerSizeX = 280, TexturePoolVisualizerSizeY = 140, }; FPooledRenderTargetDesc Desc(FPooledRenderTargetDesc::Create2DDesc(FIntPoint(TexturePoolVisualizerSizeX, TexturePoolVisualizerSizeY), PF_B8G8R8A8, TexCreate_None, TexCreate_None, false)); GRenderTargetPool.FindFreeElement(Desc, VisualizeTexturePool, TEXT("VisualizeTexturePool")); uint32 Pitch; FColor* TextureData = (FColor*)RHILockTexture2D((FTexture2DRHIRef&)VisualizeTexturePool->GetRenderTargetItem().ShaderResourceTexture, 0, RLM_WriteOnly, Pitch, false ); if(TextureData) { // clear with grey to get reliable background color FMemory::Memset(TextureData, 0x88, TexturePoolVisualizerSizeX * TexturePoolVisualizerSizeY * 4); RHIGetTextureMemoryVisualizeData(TextureData, TexturePoolVisualizerSizeX, TexturePoolVisualizerSizeY, Pitch, 4096); } RHIUnlockTexture2D((FTexture2DRHIRef&)VisualizeTexturePool->GetRenderTargetItem().ShaderResourceTexture, 0, false); FIntPoint RTExtent = GSceneRenderTargets.GetBufferSizeXY(); FVector2D Tex00 = FVector2D(0, 0); FVector2D Tex11 = FVector2D(1, 1); //todo VisualizeTexture(*VisualizeTexturePool, ViewFamily.RenderTarget, FIntRect(0, 0, RTExtent.X, RTExtent.Y), RTExtent, 1.0f, 0.0f, 0.0f, Tex00, Tex11, 1.0f, false); }
void FMediaTextureResource::UpdateDeferredResource(FRHICommandListImmediate& RHICmdList, bool bClearRenderTarget/*=true*/) { FTimespan CurrentFrameTime = VideoBuffer->GetCurrentSampleTime(); TSharedPtr<TArray<uint8>, ESPMode::ThreadSafe> CurrentFrame = VideoBuffer->GetCurrentSample(); if (CurrentFrame.IsValid()) { // draw the latest video frame if (CurrentFrameTime != LastFrameTime) { uint32 Stride = 0; FRHITexture2D* Texture2D = TextureRHI->GetTexture2D(); uint8* TextureBuffer = (uint8*)RHILockTexture2D(Texture2D, 0, RLM_WriteOnly, Stride, false); FMemory::Memcpy(TextureBuffer, CurrentFrame->GetData(), CurrentFrame->Num()); RHIUnlockTexture2D(Texture2D, 0, false); LastFrameTime = CurrentFrameTime; Cleared = false; } } else if (!Cleared || (LastClearColor != Owner->ClearColor)) { // clear texture if video track selected FRHICommandListImmediate& CommandList = FRHICommandListExecutor::GetImmediateCommandList(); SetRenderTarget(CommandList, RenderTargetTextureRHI, FTextureRHIRef()); CommandList.SetViewport(0, 0, 0.0f, Owner->GetSurfaceWidth(), Owner->GetSurfaceHeight(), 1.0f); CommandList.Clear(true, Owner->ClearColor, false, 0.f, false, 0, FIntRect()); CommandList.CopyToResolveTarget(Texture2DRHI, TextureRHI, true, FResolveParams()); LastClearColor = Owner->ClearColor; Cleared = true; } }
void FStaticShadowDepthMap::InitRHI() { if (ShadowMapSizeX > 0 && ShadowMapSizeY > 0 && GMaxRHIFeatureLevel >= ERHIFeatureLevel::SM4) { FRHIResourceCreateInfo CreateInfo; FTexture2DRHIRef Texture2DRHI = RHICreateTexture2D(ShadowMapSizeX, ShadowMapSizeY, PF_R16F, 1, 1, 0, CreateInfo); TextureRHI = Texture2DRHI; uint32 DestStride = 0; uint8* TextureData = (uint8*)RHILockTexture2D(Texture2DRHI, 0, RLM_WriteOnly, DestStride, false); uint32 RowSize = ShadowMapSizeX * GPixelFormats[PF_R16F].BlockBytes; for (int32 Y = 0; Y < ShadowMapSizeY; Y++) { FMemory::Memcpy(TextureData + DestStride * Y, ((uint8*)DepthSamples.GetData()) + RowSize * Y, RowSize); } RHIUnlockTexture2D(Texture2DRHI, 0, false); } }
/* Copies the next frame into the render target ready for viewing */ void UCodecMovieImf::GetFrame(FRHICommandListImmediate& RHICmdList, class FTextureMovieResource* InTextureMovieResource) { /* If only rendering one frame */ if( OneFrameOnly && FrameCount > 1 ) return; /* Is a sample ready? */ if( InTextureMovieResource && InTextureMovieResource->IsInitialized( ) && SampleGrabberCallback->GetIsSampleReadyToUpdate() ) { /* Copy to render target */ uint32 Stride; uint8* DestTextureData = (uint8*) RHILockTexture2D( InTextureMovieResource->TextureRHI->GetTexture2D( ), 0, RLM_WriteOnly, Stride, false ); FMemory::Memcpy( DestTextureData, TextureData.GetData( ), TextureData.Num( ) ); RHIUnlockTexture2D( InTextureMovieResource->TextureRHI->GetTexture2D( ), 0, false ); /* Wait for next sample */ SampleGrabberCallback->SetNeedNewSample( ); FrameCount++; } }
bool FMediaFoundationMovieStreamer::Tick(float DeltaTime) { FSlateTexture2DRHIRef* CurrentTexture = Texture.Get(); if ((CurrentTexture != nullptr) && SampleGrabberCallback->GetIsSampleReadyToUpdate()) { check( IsInRenderingThread() ); if( !CurrentTexture->IsInitialized() ) { CurrentTexture->InitResource(); } uint32 Stride; uint8* DestTextureData = (uint8*)RHILockTexture2D( CurrentTexture->GetTypedResource(), 0, RLM_WriteOnly, Stride, false ); FMemory::Memcpy( DestTextureData, TextureData.GetData(), TextureData.Num() ); RHIUnlockTexture2D( CurrentTexture->GetTypedResource(), 0, false ); SampleGrabberCallback->SetNeedNewSample(); } if (!VideoPlayer->MovieIsRunning()) { CloseMovie(); if (StoredMoviePaths.Num() > 0) { OpenNextMovie(); } else { return true; } } return false; }