protected override void OnUpdate() { var sys = World.GetExistingSystem <RendererBGFXSystem>(); if (!sys.Initialized) { return; } Entities.ForEach((Entity e, ref BlitRenderer br) => { if (!EntityManager.HasComponent <RenderToPasses>(e)) { return; } RenderToPasses toPassesRef = EntityManager.GetSharedComponentData <RenderToPasses>(e); DynamicBuffer <RenderToPassesEntry> toPasses = EntityManager.GetBufferRO <RenderToPassesEntry>(toPassesRef.e); var tex = EntityManager.GetComponentData <TextureBGFX>(br.texture); var im2d = EntityManager.GetComponentData <Image2D>(br.texture); float srcAspect = (float)im2d.imagePixelWidth / (float)im2d.imagePixelHeight; float4x4 m = float4x4.identity; for (int i = 0; i < toPasses.Length; i++) { Entity ePass = toPasses[i].e; var pass = EntityManager.GetComponentData <RenderPass>(ePass); if (br.preserveAspect) { float destAspect = (float)pass.viewport.w / (float)pass.viewport.h; if (destAspect <= srcAspect) // flip comparison to zoom in instead of black bars { m.c0.x = 1.0f; m.c1.y = destAspect / srcAspect; } else { m.c0.x = srcAspect / destAspect; m.c1.y = 1.0f; } } if (sys.BlitPrimarySRGB) { // need to convert linear to srgb if we are not rendering to a texture in linear workflow bool toPrimaryWithSRGB = EntityManager.HasComponent <RenderNodePrimarySurface>(pass.inNode) && sys.AllowSRGBTextures; if (!toPrimaryWithSRGB) { SubmitHelper.SubmitBlitDirectFast(sys, pass.viewId, ref m, br.color, tex.handle); } else { SubmitHelper.SubmitBlitDirectExtended(sys, pass.viewId, ref m, tex.handle, false, true, 0.0f, new float4(1.0f), new float4(0.0f), false); } } else { SubmitHelper.SubmitBlitDirectFast(sys, pass.viewId, ref m, br.color, tex.handle); } } }); }
protected override void OnUpdate() { var sys = World.GetExistingSystem <RendererBGFXSystem>().InstancePointer(); if (!sys->m_initialized) { return; } Dependency.Complete(); Entities.WithNone <DisableRendering>().WithoutBurst().ForEach((Entity e, ref BlitRenderer br) => { if (!EntityManager.HasComponent <RenderToPasses>(e)) { return; } if (!EntityManager.HasComponent <TextureBGFX>(br.texture)) { return; } RenderToPasses toPassesRef = EntityManager.GetSharedComponentData <RenderToPasses>(e); DynamicBuffer <RenderToPassesEntry> toPasses = EntityManager.GetBufferRO <RenderToPassesEntry>(toPassesRef.e); var tex = EntityManager.GetComponentData <TextureBGFX>(br.texture); float4x4 idm = float4x4.identity; for (int i = 0; i < toPasses.Length; i++) { Entity ePass = toPasses[i].e; var pass = EntityManager.GetComponentData <RenderPass>(ePass); if (sys->m_blitPrimarySRGB) { // need to convert linear to srgb if we are not rendering to a texture in linear workflow bool toPrimaryWithSRGB = EntityManager.HasComponent <RenderNodePrimarySurface>(pass.inNode) && sys->m_allowSRGBTextures; if (!toPrimaryWithSRGB) { SubmitHelper.SubmitBlitDirectFast(sys, pass.viewId, ref idm, br.color, tex.handle); } else { SubmitHelper.SubmitBlitDirectExtended(sys, pass.viewId, ref idm, tex.handle, false, true, 0.0f, new float4(1.0f), new float4(0.0f), false); } } else { SubmitHelper.SubmitBlitDirectFast(sys, pass.viewId, ref idm, br.color, tex.handle); } } }).Run(); }