示例#1
0
        public override void Init(RendererBase <ToyWorld> renderer, ToyWorld world, ImageSettings settings)
        {
            Settings = settings;
            int bufferSize = Owner.Resolution.Width * Owner.Resolution.Height;

            switch (Settings.CopyMode)
            {
            case RenderRequestImageCopyingMode.OpenglPbo:
                // Set up pixel buffer object for data transfer to RR issuer
                Pbo = new Pbo <uint>();
                Pbo.Init(bufferSize, null, BufferUsageHint.StreamDraw);

                if (Settings.CopyDepth)
                {
                    DepthPbo = new Pbo <float>();
                    DepthPbo.Init(bufferSize, null, BufferUsageHint.StreamDraw);
                }
                break;

            case RenderRequestImageCopyingMode.Cpu:
                if (RenderedScene == null || RenderedScene.Length < bufferSize)
                {
                    RenderedScene = new uint[bufferSize];

                    if (Settings.CopyDepth)
                    {
                        RenderedSceneDepth = new float[bufferSize];
                    }
                }
                break;
            }
        }
示例#2
0
        public void CheckDirtyParams(RendererBase <ToyWorld> renderer, ToyWorld world)
        {
            var gridView = GridView;


            // Get currently rendered layers
            m_toRender = GetTileLayersToRender().ToArray();

            if (Owner.DirtyParams.HasFlag(RenderRequestBase.DirtyParam.Size))
            {
                if (Settings.Use3D)
                {
                    Grid = renderer.GeometryManager.Get <DuplicatedCubeGrid>(gridView.Size);
                }
                else
                {
                    Grid = renderer.GeometryManager.Get <DuplicatedGrid>(gridView.Size);
                }

                // Reallocate stuff if needed -- texture holds tileTypes for all the layers
                int totalTileCount = gridView.Size.Size() * m_toRender.Length;
                Debug.Assert(totalTileCount < 1 << 14, "TileTypesTexture will overflow!");

                if (TileTypesTexure == null || totalTileCount > TileTypesTexure.Size.Size())
                {
                    // Init buffer
                    if (m_tileTypesBuffer != null)
                    {
                        m_tileTypesBuffer.Dispose();
                    }
                    m_tileTypesBuffer = new Pbo <ushort>(1);
                    m_tileTypesBuffer.Init(totalTileCount, hint: BufferUsageHint.StreamDraw);

                    // Init texture
                    if (TileTypesTexure != null)
                    {
                        TileTypesTexure.Dispose();
                    }
                    TileTypesTexure = renderer.TextureManager.Get <BasicTexture1D>(new Vector2I(totalTileCount, 1));
                    TileTypesTexure.DefaultInit();
                }
            }
        }