I’m looking for a way to create screenshots from different cameras at runtime.
Needs to run on HTML5 platform.
When I use built-in features (Execute console command (Shot, HighResShot) or GEngine->GameViewport->Viewport->ReadPixels ) the whole HTML5 Build crashes, works on native windows client.
C++ or Blueprint solutions are welcome.
Following code
FVector2D viewportSize = FVector2D(GEngine->GameViewport->Viewport->GetSizeXY());
if (viewportSize.X <= 0 || viewportSize.Y <= 0) return;
//Section of Viewport to capture
// entire buffer invalidated if going larger than viewport size
// during readpixels
viewportSize.X--;
viewportSize.Y--;
ColorBuffer.Empty();
int32 viewportTotalSize = (viewportSize.X - 1) * (viewportSize.Y - 1);
ColorBuffer.AddDefaulted(viewportTotalSize);
//return;
//Get Screen Shot!
if (!GEngine->GameViewport->Viewport->ReadPixels(
ColorBuffer,
FReadSurfaceDataFlags(),
FIntRect(1, 1, viewportSize.X, viewportSize.Y)
)) {
return;
}
throws this error:
DebugBreak() called!
at FOpenGLDynamicRHI::RHIReadSurfaceData(FRHITexture*, FIntRect, TArray<FColor, FDefaultAllocator>&, FReadSurfaceDataFlags) (CSB.html:31827649:1)
at FRenderTarget::ReadPixels(TArray<FColor, FDefaultAllocator>&, FReadSurfaceDataFlags, FIntRect)::EURCMacro_ReadSurfaceCommand::DoTask(ENamedThreads::Type, TRefCountPtr const&) (CSB.html:13016631:1)
at FRenderTarget::ReadPixels(TArray<FColor, FDefaultAllocator>&, FReadSurfaceDataFlags, FIntRect) (CSB.html:13015336:1)
at AMyScreenshotActor::TakeScreenshot(FString) (CSB.html:803215:1)
at AMyScreenshotActor::execTakeScreenshot(FFrame&, void*) (CSB.html:827004:1)