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