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; } }
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(); } } }