コード例 #1
0
        public void Resize(uint width, uint height)
        {
            this.width  = width;
            this.height = height;

            frameBuffer?.Dispose();
            createGBuff();

            frameBuffer = new FrameBuffer(renderPass, width, height, new Image[] {
                hdrImgResolved, null, gbColorRough, gbEmitMetal, gbN_AO, gbPos
            });
        }
コード例 #2
0
        /// <summary>Releases the resources that are used by the object.</summary>
        internal virtual void DisposeInternal()
        {
            if (!disposed)
            {
                //after shutdown check
                if (RenderingSystem.Disposed)
                {
                    //waiting for .NET Standard 2.0
                    Log.Fatal("Renderer: Dispose after Shutdown.");
                    //Log.Fatal( "Renderer: Dispose after Shutdown: {0}()", System.Reflection.MethodInfo.GetCurrentMethod().Name );
                }

                lock (RenderingSystem.renderTargets)
                    RenderingSystem.renderTargets.Remove(this);
                //lock( RendererWorld.renderTargets )
                //	RendererWorld.renderTargets.Remove( (IntPtr)realObject );

                while (viewports.Count != 0)
                {
                    Viewport viewport = viewports[viewports.Count - 1];
                    viewport.Dispose();
                }

                if (frameBufferNeedDispose)
                {
                    frameBuffer.Dispose();
                }
                disposed = true;
            }

            GC.SuppressFinalize(this);
        }
コード例 #3
0
        public void TestDepthFromOtherFrameBuffer()
        {
            Runner.ExecuteAsLoop(_ =>
            {
                FrameBuffer testBuffer = new FrameBuffer(Engine.Renderer.DrawBuffer.Size).WithColor().WithDepth(true);
                var shader             = Engine.AssetLoader.Get <ShaderAsset>("Shaders/DepthTest.xml");

                RenderComposer composer = Engine.Renderer.StartFrame();
                composer.RenderTo(testBuffer);
                composer.ClearFrameBuffer();
                composer.RenderSprite(new Vector3(0, 0, 10), new Vector2(100, 100), Color.Green);
                composer.RenderTo(null);

                composer.SetUseViewMatrix(false);
                composer.SetShader(shader.Shader);
                shader.Shader.SetUniformInt("depthTexture", 1);
                Texture.EnsureBound(testBuffer.DepthTexture.Pointer, 1);
                composer.RenderSprite(new Vector3(0, 0, 0), testBuffer.Texture.Size, Color.White, testBuffer.Texture);
                composer.SetShader();
                composer.SetUseViewMatrix(true);

                composer.RenderSprite(new Vector3(20, 20, 15), new Vector2(100, 100), Color.Blue);
                composer.RenderSprite(new Vector3(10, 10, 0), new Vector2(100, 100), Color.Red);

                Engine.Renderer.EndFrame();
                Runner.VerifyScreenshot(ResultDb.TestDepthFromOtherFrameBuffer);

                testBuffer.Dispose();
            }).WaitOne();
        }
コード例 #4
0
        public override void Dispose()
        {
            if (_matHblur != null)
            {
                _matHblur.Dispose();
            }
            if (_matVblur != null)
            {
                _matVblur.Dispose();
            }
            if (_sprites != null)
            {
                _sprites.Dispose();
            }
            if (_fb != null)
            {
                _fb.Dispose();
            }
            if (_quad != null)
            {
                _quad.Dispose();
            }

            base.Dispose();
        }
コード例 #5
0
ファイル: TSFrameBuffer.cs プロジェクト: wonrst/TizenFX
        public void FrameBufferAttachColorTextureWithUInt()
        {
            tlog.Debug(tag, $"FrameBufferAttachColorTextureWithUInt START");

            var testingTarget = new FrameBuffer(10, 20, 3);

            Assert.IsNotNull(testingTarget, "Can't create success object FrameBuffer.");
            Assert.IsInstanceOf <FrameBuffer>(testingTarget, "Should return FrameBuffer instance.");

            using (Texture texture = new Texture(TextureType.TEXTURE_2D, PixelFormat.BGR8888, 100, 80))
            {
                try
                {
                    testingTarget.AttachColorTexture(texture, 2, 1);
                }
                catch (Exception e)
                {
                    tlog.Debug(tag, e.Message.ToString());
                    Assert.Fail("Caught Exception : Failed!");
                }
            }

            testingTarget.Dispose();
            tlog.Debug(tag, $"FrameBufferAttachColorTextureWithUInt END (OK)");
        }
コード例 #6
0
 protected virtual void Dispose(bool disposing)
 {
     if (disposing)
     {
         frame_buffer.Dispose();
     }
 }
コード例 #7
0
 public void Dispose()
 {
     shadowPipeline?.Dispose();
     fbShadowMap?.Dispose();
     shadowMap?.Dispose();
     descriptorPool?.Dispose();
 }
コード例 #8
0
        protected override void Dispose(bool disposing)
        {
            if (!IsDisposed)
            {
#if DIRECTX
                if (disposing)
                {
                    SharpDX.Utilities.Dispose(ref _renderTargetView);
                    SharpDX.Utilities.Dispose(ref _depthStencilView);
                }
#elif PSM
                _frameBuffer.Dispose();
#elif OPENGL
                GraphicsDevice.AddDisposeAction(() =>
                {
                    if (this.glStencilBuffer != 0 && this.glStencilBuffer != this.glDepthBuffer)
                    {
                        GL.DeleteRenderbuffers(1, ref this.glStencilBuffer);
                    }
                    GL.DeleteRenderbuffers(1, ref this.glDepthBuffer);
                    GraphicsExtensions.CheckGLError();
                });
#endif
            }
            base.Dispose(disposing);
        }
コード例 #9
0
        public void FramebufferResizing()
        {
            Runner.ExecuteAsLoop(_ =>
            {
                FrameBuffer testBuffer = new FrameBuffer(new Vector2(1000, 1000)).WithColor();

                RenderComposer composer = Engine.Renderer.StartFrame();

                composer.RenderToAndClear(testBuffer);
                composer.RenderSprite(new Vector3(0, 0, 0), new Vector2(1000, 1000), Color.Red);
                composer.RenderTo(null);

                composer.RenderSprite(new Vector3(0, 0, 0), new Vector2(100, 100), Color.White, testBuffer.Texture);
                testBuffer.Resize(new Vector2(500, 500), true);

                composer.RenderToAndClear(testBuffer);
                composer.RenderSprite(new Vector3(0, 0, 0), new Vector2(500, 500), Color.Green);
                composer.RenderTo(null);

                composer.RenderFrameBuffer(testBuffer, new Vector2(100, 100), new Vector3(100, 0, 0));

                Engine.Renderer.EndFrame();
                Runner.VerifyScreenshot(ResultDb.FramebufferResizing);

                testBuffer.Dispose();
            }).WaitOne();
        }
コード例 #10
0
        public void CopyFramebuffer_ThrowsOnDisposed()
        {
            var frameBuffer = new FrameBuffer();

            frameBuffer.Dispose();

            Assert.Throws <ObjectDisposedException>(() => frameBuffer.CopyFramebuffer(new byte[] { }));
        }
コード例 #11
0
        // --------------------------------------------------------------------

        public void Dispose()
        {
            mFrameBuffer.Dispose();
            Scene.Dispose();
            Camera.Dispose();

            mFrameBuffer = null;
            Scene        = null;
            Camera       = null;
        }
コード例 #12
0
        public void Dispose()
        {
            vbTeapot.Dispose();
            shaderTexture.Dispose();
            shaderGaussianX.Dispose();
            shaderGaussianY.Dispose();

            gaussianXYBuffer.Dispose();
            gaussianXBuffer.Dispose();
            sceneBuffer.Dispose();
        }
コード例 #13
0
ファイル: TSFrameBuffer.cs プロジェクト: wonrst/TizenFX
        public void FrameBufferConstructor()
        {
            tlog.Debug(tag, $"FrameBufferConstructor START");

            var testingTarget = new FrameBuffer(10, 20, 3);

            Assert.IsNotNull(testingTarget, "Can't create success object FrameBuffer.");
            Assert.IsInstanceOf <FrameBuffer>(testingTarget, "Should return FrameBuffer instance.");

            testingTarget.Dispose();
            tlog.Debug(tag, $"FrameBufferConstructor END (OK)");
        }
コード例 #14
0
 /// Release unmanaged resources
 public void Dispose()
 {
     texShadow.Dispose();
     texColorMap.Dispose();
     texRenderer.Dispose();
     frameBuffer.Dispose();
     shaderTexture.Dispose();
     shaderShadowMap.Dispose();
     shaderProjectionShadow.Dispose();
     vbTeapot.Dispose();
     vbGrid.Dispose();
     meshGrid.Dispose();
 }
コード例 #15
0
        void wnd_3_Resize(object sender, EventArgs e)
        {
            var ctrl = (System.Windows.Forms.Control)sender;

            FrameBuffer newBuffer = new FrameBuffer(ctrl.Width, ctrl.Height);

            Display.RenderTarget = newBuffer;

            Display.BeginFrame();
            Display.Clear(Color.FromArgb(0, 0, 0, 0));
            Display.RenderState.AlphaBlend = false;

            frameBuffer.RenderTarget.Draw();

            Display.EndFrame();
            Display.RenderState.AlphaBlend = true;

            frameBuffer.Dispose();
            frameBuffer = newBuffer;
        }
コード例 #16
0
        private void getImageGL(Action <Image <Rgba32> > callback)
        {
            host.DrawThread.Scheduler.Add(() =>
            {
                var image = new Image <Rgba32>((int)DrawWidth, (int)DrawHeight);

                var sharedData = (BufferedDrawNodeSharedData)typeof(BufferedContainer <Drawable>).GetField("sharedData", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this);

                var fbo = new FrameBuffer();
                fbo.Bind();
                GL.FramebufferTexture2D(FramebufferTarget.Framebuffer, FramebufferAttachment.ColorAttachment0, TextureTarget2d.Texture2D, sharedData.MainBuffer.Texture.TextureId, 0);

                bool success = image.TryGetSinglePixelSpan(out var span);
                Debug.Assert(success);
                GL.ReadPixels(0, 0, (int)DrawWidth, (int)DrawHeight, PixelFormat.Rgba, PixelType.UnsignedByte, ref MemoryMarshal.GetReference(span));
                fbo.Dispose();
                GLWrapper.BindFrameBuffer(GLWrapper.DefaultFrameBuffer);

                callback(image);
            });
        }
コード例 #17
0
        private void setTexture()
        {
            float num;
            float num2;

            if (this.needPartialTexture)
            {
                num  = FMath.Min(this.frontPanel.Width, this.MaxTextureWidth) * UISystem.Scale;
                num2 = FMath.Min(this.frontPanel.Height, this.MaxTextureHeight) * UISystem.Scale;
            }
            else
            {
                num  = this.frontPanel.Width * UISystem.Scale;
                num2 = this.frontPanel.Height * UISystem.Scale;
            }
            if (this.cacheTexture == null || this.cacheTexture.Width != (int)num || this.cacheTexture.Height != (int)num2)
            {
                if (this.cacheTexture != null)
                {
                    this.cacheTexture.Dispose();
                }
                this.cacheTexture = new Texture2D((int)num, (int)num2, false, (PixelFormat)1, (PixelBufferOption)1);
            }
            Matrix4     matrix      = new Matrix4(1f, 0f, 0f, 0f, 0f, 1f, 0f, 0f, 0f, 0f, 1f, 0f, -this.textureOffsetX, -this.textureOffsetY, 0f, 1f);
            FrameBuffer frameBuffer = new FrameBuffer();

            frameBuffer.SetColorTarget(this.cacheTexture, 0);
            this.frontPanel.RenderToFrameBuffer(frameBuffer, ref matrix, true);
            frameBuffer.Dispose();
            if (this.animationSprt.Image != null)
            {
                this.animationSprt.Image.Dispose();
            }
            this.animationSprt.Image = new ImageAsset(this.cacheTexture);
            this.animationSprt.Image.AdjustScaledSize = true;
            this.texImage = this.animationSprt.Image;
            this.animationSprt.Visible = true;
            this.frontPanel.Visible    = false;
        }
コード例 #18
0
        /// <summary>
        /// Unload contents
        /// </summary>
        public override void UnloadContent()
        {
            if (Plane != null)
            {
                Plane.Dispose();
            }
            Plane = null;

            if (Torus != null)
            {
                Torus.Dispose();
            }
            Torus = null;

            if (SceneShader != null)
            {
                SceneShader.Dispose();
            }
            SceneShader = null;

            if (Font != null)
            {
                Font.Dispose();
            }
            Font = null;

            if (SpriteBatch != null)
            {
                SpriteBatch.Dispose();
            }
            SpriteBatch = null;

            if (FrameBuffer != null)
            {
                FrameBuffer.Dispose();
            }
            FrameBuffer = null;
        }
コード例 #19
0
ファイル: SceneCrossfader.cs プロジェクト: Milstein/GameStack
        void FreeResources()
        {
            if (_prevFBO != null)
            {
                _prevFBO.Dispose();
            }
            if (_nextFBO != null)
            {
                _nextFBO.Dispose();
            }
            if (_prevTexture != null)
            {
                _prevTexture.Dispose();
            }
            if (_nextTexture != null)
            {
                _nextTexture.Dispose();
            }

            _prevFBO     = null;
            _nextFBO     = null;
            _prevTexture = null;
            _nextTexture = null;
        }
コード例 #20
0
        // --------------------------------------------------------------------

        protected override void OnHandleDestroyed(EventArgs e)
        {
            base.OnHandleDestroyed(e);
            mFrameBuffer.Dispose();
        }
コード例 #21
0
        protected override void Dispose(bool disposing)
        {
            _frameBuffer.Dispose();

            base.Dispose(disposing);
        }
コード例 #22
0
 static void Term()
 {
     SampleDraw.Term();
     frameBuffer.Dispose();
     graphics.Dispose();
 }
コード例 #23
0
 private void ImplDispose()
 {
     FrameBuffer.Dispose();
 }
コード例 #24
0
ファイル: Starfield.cs プロジェクト: Metapyziks/Sphaira
        public static CubeMapTexture Generate(int seed, int resolution, int samples)
        {
            var rand = seed == 0 ? new Random() : new Random(seed);

            var stars = Star.Generate(rand, rand.Next(16384, 32768));
            var dusts = DustCloud.Generate(rand, rand.Next(4096, 8192));

            int renderResolution = resolution * samples;

            var camera = new Camera(renderResolution, renderResolution, MathHelper.PiOver2, 4f, 64f);

            var starShader = new StarShader {
                Camera = camera
            };
            var dustShader = new DustCloudShader {
                Camera = camera
            };

            var target = new FrameBuffer(new BitmapTexture2D(new Bitmap(renderResolution, renderResolution)), 16);

            var angles = new[] {
                Tuple.Create(0f, MathHelper.PiOver2),
                Tuple.Create(0f, -MathHelper.PiOver2),
                Tuple.Create(MathHelper.PiOver2, 0f),
                Tuple.Create(-MathHelper.PiOver2, 0f),
                Tuple.Create(0f, 0f),
                Tuple.Create(0f, MathHelper.Pi)
            };

            var bmps = new Bitmap[6];

            target.Begin();

            GL.ClearColor(Color.Black);

            var bmp = new Bitmap(renderResolution, renderResolution);

            for (int i = 0; i < 6; ++i)
            {
                camera.Pitch = angles[i].Item1;
                camera.Yaw   = angles[i].Item2;

                GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);

                dustShader.BeginBatch();
                foreach (var dust in dusts)
                {
                    dustShader.Render(dust);
                }
                dustShader.EndBatch();

                starShader.BeginBatch();
                foreach (var star in stars)
                {
                    starShader.Render(star);
                }
                starShader.EndBatch();

                var data = bmp.LockBits(new Rectangle(0, 0, renderResolution, renderResolution), ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
                GL.ReadPixels(0, 0, renderResolution, renderResolution, OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, data.Scan0);
                bmp.UnlockBits(data);

                bmps[i] = new Bitmap(bmp, new Size(resolution, resolution));
            }

            bmp.Dispose();
            target.End();
            target.Dispose();

            return(new CubeMapTexture(bmps[0], bmps[1], bmps[2], bmps[3], bmps[4], bmps[5]));
        }
コード例 #25
0
ファイル: FrameBufferSampling.cs プロジェクト: Cryru/Emotion
 public void Unload()
 {
     GLThread.ExecuteGLThread(() => { _fbo.Dispose(); });
 }
コード例 #26
0
 protected override void Dispose(bool isDisposing)
 {
     frameBuffer.Dispose();
     base.Dispose(isDisposing);
 }
コード例 #27
0
        public static void FlipFontAtlas(RenderContext renderContext, Texture2D texture)
        {
            var previousFrameBuffer   = renderContext.FrameBuffer;
            var previousScissorTest   = renderContext.ScissorTest;
            var previousDepthTest     = renderContext.DepthTest;
            var previousViewport      = renderContext.ViewportRectangle;
            var previousCullBackfaces = renderContext.CullBackfaces;
            var previousBlend         = renderContext.Blend;

            renderContext.GetBlendFunc(out var previousSFactor, out var previousDFactor);

            renderContext.ScissorTest       = false;
            renderContext.DepthTest         = false;
            renderContext.ViewportRectangle = new Rectangle(0, 0, texture._width, texture._height);
            renderContext.CullBackfaces     = false;
            renderContext.SetBlendFunc(BlendingFactor.One, BlendingFactor.Zero);

            var shaderProgram = CreateAtlasFlippingProgram(renderContext);

            var tempFrameBuffer = new FrameBuffer(renderContext,
                                                  texture._width,
                                                  texture._height,
                                                  FrameBufferFlags.Color);

            var atlasFrameBuffer = new FrameBuffer(renderContext, texture);

            VertexPosition2Texture[] vertices =
            {
                new VertexPosition2Texture(new Vector2(0,                            0), new Vector2(0, 1)),
                new VertexPosition2Texture(new Vector2(texture._width,               0), new Vector2(1, 1)),
                new VertexPosition2Texture(new Vector2(texture._width, texture._height), new Vector2(1, 0)),
                new VertexPosition2Texture(new Vector2(0,              texture._height), new Vector2(0, 0)),
            };

            uint[] indices =
            {
                2, 1, 0,
                2, 0, 3,
            };

            var vertexBuffer = VertexBuffer.Create(renderContext, vertices, BufferUsageHint.StaticDraw, true);
            var indexBuffer  = IndexBuffer.Create(renderContext, indices, BufferUsageHint.StaticDraw, true);

            // Draw atlas texture to temporary frame buffer.
            renderContext.BindFrameBuffer(tempFrameBuffer);
            renderContext.Clear(Color.Transparent);

            renderContext.BindTexture2D(0, texture);

            shaderProgram.SetUniform("projection",
                                     Matrix4x4.CreateOrthographicOffCenter(0f,
                                                                           texture._width,
                                                                           texture._height,
                                                                           0f,
                                                                           -1f,
                                                                           1f));

            renderContext.Render(PrimitiveType.Triangles, vertexBuffer, indexBuffer, shaderProgram);


            // Draw temporary render target to atlas texture.
            renderContext.BindFrameBuffer(atlasFrameBuffer);
            renderContext.Clear(Color.Transparent);

            renderContext.BindTexture2D(0, tempFrameBuffer.ColorTexture);

            shaderProgram.SetUniform("projection",
                                     Matrix4x4.CreateOrthographicOffCenter(0f,
                                                                           texture._width,
                                                                           0f,
                                                                           texture._height,
                                                                           -1f,
                                                                           1f));

            renderContext.Render(PrimitiveType.Triangles, vertexBuffer, indexBuffer, shaderProgram);

            renderContext.ViewportRectangle = previousViewport;
            renderContext.DepthTest         = previousDepthTest;
            renderContext.ScissorTest       = previousScissorTest;
            renderContext.CullBackfaces     = previousCullBackfaces;
            renderContext.Blend             = previousBlend;
            renderContext.SetBlendFunc(previousSFactor, previousDFactor);

            renderContext.BindFrameBuffer(previousFrameBuffer);

            vertexBuffer.Dispose();
            indexBuffer.Dispose();

            tempFrameBuffer.Dispose();
            atlasFrameBuffer.Dispose();
            shaderProgram.Dispose();
        }