Exemple #1
0
        private void SetupNonMultisampled()
        {
            // Generate FBO
            if (this.handleMainFBO == null)
            {
                this.handleMainFBO = GraphicsBackend.GL.CreateFramebuffer();
            }
            GraphicsBackend.GL.BindFramebuffer(WebGLRenderingContextBase.FRAMEBUFFER, this.handleMainFBO);

            // Attach textures
            int oglWidth  = 0;
            int oglHeight = 0;

            for (int i = 0; i < this.targetInfos.Count; i++)
            {
                NativeTexture tex = this.targetInfos[i].Target;

                uint attachment = (WebGLRenderingContextBase.COLOR_ATTACHMENT0 + (uint)i);
                GraphicsBackend.GL.FramebufferTexture2D(
                    WebGLRenderingContextBase.FRAMEBUFFER,
                    attachment,
                    WebGLRenderingContextBase.TEXTURE_2D,
                    tex.Handle,
                    0);
                oglWidth  = tex.Width;
                oglHeight = tex.Height;
            }

            // Generate or delete depth renderbuffer
            if (this.depthBuffer)
            {
                if (this.handleDepthRBO == null)
                {
                    this.handleDepthRBO = GraphicsBackend.GL.CreateRenderbuffer();
                }
                GraphicsBackend.GL.BindRenderbuffer(WebGLRenderingContextBase.RENDERBUFFER, this.handleDepthRBO);
                GraphicsBackend.GL.RenderbufferStorage(WebGLRenderingContextBase.RENDERBUFFER, WebGL2RenderingContextBase.DEPTH_COMPONENT24, oglWidth, oglHeight);
                GraphicsBackend.GL.FramebufferRenderbuffer(WebGLRenderingContextBase.FRAMEBUFFER, WebGLRenderingContextBase.DEPTH_ATTACHMENT, WebGLRenderingContextBase.RENDERBUFFER, this.handleDepthRBO);
            }
            else
            {
                GraphicsBackend.GL.FramebufferRenderbuffer(WebGLRenderingContextBase.FRAMEBUFFER, WebGLRenderingContextBase.DEPTH_ATTACHMENT, WebGLRenderingContextBase.RENDERBUFFER, null);
                if (this.handleDepthRBO != null)
                {
                    GraphicsBackend.GL.DeleteRenderbuffer(this.handleDepthRBO);
                }
                this.handleDepthRBO = null;
            }

            // Check status
            int status = GraphicsBackend.GL.CheckFramebufferStatus(WebGLRenderingContextBase.FRAMEBUFFER);

            if (status != WebGLRenderingContextBase.FRAMEBUFFER_COMPLETE)
            {
                throw new BackendException(string.Format("Incomplete Framebuffer: {0}", status));
            }

            GraphicsBackend.GL.BindRenderbuffer(WebGLRenderingContextBase.RENDERBUFFER, null);
            GraphicsBackend.GL.BindFramebuffer(WebGLRenderingContextBase.FRAMEBUFFER, null);
        }
 public void framebufferRenderbuffer(
     int target,
     int attachment,
     int renderbuffertarget,
     WebGLRenderbuffer renderbuffer)
 {
     throw new NotImplementedException();
 }
Exemple #3
0
 public void framebufferRenderbuffer(
     int target,
     int attachment,
     int renderbuffertarget,
     WebGLRenderbuffer renderbuffer)
 {
     this.openGl.FramebufferRenderbufferEXT((uint)target, (uint)attachment, (uint)renderbuffertarget, renderbuffer.Value);
     this.ErrorTest();
 }
Exemple #4
0
        void IDisposable.Dispose()
        {
            if (DualityApp.ExecContext == DualityApp.ExecutionContext.Terminated)
            {
                return;
            }

            // If there are changes pending to be applied to the bound textures,
            // they should be executed before the render target is gone.
            this.ApplyPostRender();

            if (this.handleMainFBO != null)
            {
                //GraphicsBackend.GL.DeleteFramebuffer(this.handleMainFBO);
                try {
                    GraphicsBackend.GL.DeleteFramebuffer(this.handleMainFBO);
                } catch (Exception ex) {
                    Console.WriteLine("DeleteFramebuffer() failed: " + this.handleMainFBO + " | " + ex);
                }

                this.handleMainFBO = null;
            }
            if (this.handleDepthRBO != null)
            {
                //GraphicsBackend.GL.DeleteRenderbuffer(this.handleDepthRBO);
                try {
                    GraphicsBackend.GL.DeleteRenderbuffer(this.handleDepthRBO);
                } catch (Exception ex) {
                    Console.WriteLine("DeleteRenderbuffer() failed: " + this.handleDepthRBO + " | " + ex);
                }

                this.handleDepthRBO = null;
            }
            if (this.handleMsaaFBO != null)
            {
                //GraphicsBackend.GL.DeleteFramebuffer(this.handleMsaaFBO);
                try {
                    GraphicsBackend.GL.DeleteFramebuffer(this.handleMsaaFBO);
                } catch (Exception ex) {
                    Console.WriteLine("DeleteFramebuffer() failed: " + this.handleMsaaFBO + " | " + ex);
                }

                this.handleMsaaFBO = null;
            }
            for (int i = 0; i < this.targetInfos.Count; i++)
            {
                if (this.targetInfos.Data[i].HandleMsaaColorRBO != null)
                {
                    GraphicsBackend.GL.DeleteRenderbuffer(this.targetInfos.Data[i].HandleMsaaColorRBO);
                    this.targetInfos.Data[i].HandleMsaaColorRBO = null;
                }
            }
        }
        public void bindRenderbuffer(int target, WebGLRenderbuffer renderbuffer)
        {
            var bufferId = (int)(renderbuffer != null ? renderbuffer.Value : 0);

#if _DEBUG
            Log.Info(string.Format("bindRenderbuffer {0} {1}", target, bufferId));
#endif

#if GLEW_STATIC
            Gl.glBindRenderbuffer(target, bufferId);
#else
            Gl.__glewBindRenderbuffer(target, bufferId);
#endif
            this.ErrorTest();
        }
Exemple #6
0
        internal void PlatformCreateRenderTarget(IRenderTarget renderTarget, int width, int height, bool mipMap, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount, RenderTargetUsage usage)
        {
            WebGLRenderbuffer color   = null;
            WebGLRenderbuffer depth   = null;
            WebGLRenderbuffer stencil = null;

            this.framebufferHelper.GenRenderbuffer(out color);
            this.framebufferHelper.BindRenderbuffer(color);
            this.framebufferHelper.RenderbufferStorageMultisample(preferredMultiSampleCount, gl.RGBA4, width, height);

            if (preferredDepthFormat != DepthFormat.None)
            {
                var depthInternalFormat   = gl.DEPTH_COMPONENT16;
                var stencilInternalFormat = gl.NEVER;

                if (depthInternalFormat != 0)
                {
                    this.framebufferHelper.GenRenderbuffer(out depth);
                    this.framebufferHelper.BindRenderbuffer(depth);
                    this.framebufferHelper.RenderbufferStorageMultisample(preferredMultiSampleCount, depthInternalFormat, width, height);
                    if (preferredDepthFormat == DepthFormat.Depth24Stencil8)
                    {
                        stencil = depth;
                        if (stencilInternalFormat != 0)
                        {
                            this.framebufferHelper.GenRenderbuffer(out stencil);
                            this.framebufferHelper.BindRenderbuffer(stencil);
                            this.framebufferHelper.RenderbufferStorageMultisample(preferredMultiSampleCount, stencilInternalFormat, width, height);
                        }
                    }
                }
            }

            renderTarget.GLColorBuffer   = color;
            renderTarget.GLDepthBuffer   = depth;
            renderTarget.GLStencilBuffer = stencil;
        }
 internal virtual void BindRenderbuffer(WebGLRenderbuffer renderbuffer)
 {
     gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer);
     GraphicsExtensions.CheckGLError();
 }
Exemple #8
0
 public void FramebufferRenderbuffer(FramebufferType target, FramebufferAttachment attachment, RenderbufferType renderbuffertarget, WebGLRenderbuffer renderbuffer) => this.CallMethod <object>(FRAMEBUFFER_RENDERBUFFER, target, attachment, renderbuffertarget, renderbuffer);
 /// <summary>
 /// Attaches a WebGLRenderbuffer object as a logical buffer to the currently bound WebGLFramebuffer object.
 /// </summary>
 /// <param name="target">Always use gl.FRAMEBUFFER.</param>
 /// <param name="attachment">Specifies the attachment point. One of the following:
 ///     gl.COLOR_ATTACHMENT0
 ///     gl.DEPTH_ATTACHMENT
 ///     gl.STENCIL_ATTACHEMENT
 ///     gl.DEPTH_STENCIL_ATTACHEMENT
 /// </param>
 /// <param name="renderbufferTarget">Always use gl.RENDERBUFFER. </param>
 /// <param name="renderbuffer">The WebGLRenderbuffer object to attach.</param>
 public virtual void FramebufferRenderbuffer(int target, int attachment, int renderbufferTarget, WebGLRenderbuffer renderbuffer) { }
 /// <summary>
 /// Binds a WebGLRenderbuffer object to be used for rendering.
 /// Setting this to a null value effectively unbinds any previously bound WebGLRenderbuffer.
 /// When a buffer is bound to a target, the previously bound Renderbuffer for that target is automatically unbound.
 ///
 /// Errors:
 ///     gl.INVALID_ENUM - If target isn't gl.FRAMEBUFFER.
 /// </summary>
 /// <param name="target">Set to gl.RENDERBUFFER.</param>
 /// <param name="renderbuffer">The name of the new WebGLRenderbuffer.</param>
 public virtual void BindRenderbuffer(int target, WebGLRenderbuffer renderbuffer) { }
 /// <summary>
 /// Gets state of WebGL renderbuffer. Returns true if buffer is valid, false otherwise.
 /// </summary>
 /// <param name="renderbuffer">Renderbuffer to query.</param>
 /// <returns>Returns true if renderbuffer is valid, false otherwise.</returns>
 public virtual bool IsRenderbuffer(WebGLRenderbuffer renderbuffer)
 {
     return false;
 }
 /// <summary>
 /// Deletes the specified renderbuffer object. If the renderbuffer is currently bound, it will become unbound. If the renderbuffer is attached to the currently bound framebuffer, it is detached.
 /// If renderbuffer has previously been deleted, this method has no effect.
 /// </summary>
 /// <param name="renderbuffer">The renderbuffer object to delete.</param>
 public virtual void DeleteRenderbuffer(WebGLRenderbuffer renderbuffer) { }
 public void framebufferRenderbuffer(int target, int attachment, int renderbuffertarget, WebGLRenderbuffer renderbuffer) { }
 internal virtual void GenRenderbuffer(out WebGLRenderbuffer renderbuffer)
 {
     renderbuffer = gl.createRenderbuffer();
     GraphicsExtensions.CheckGLError();
 }
Exemple #15
0
 public void framebufferRenderbuffer(int target, int attachment, int renderbuffertarget, WebGLRenderbuffer renderbuffer)
 {
 }
 public void bindRenderbuffer(int target, WebGLRenderbuffer renderbuffer) { }
Exemple #17
0
 public void bindRenderbuffer(int target, WebGLRenderbuffer renderbuffer)
 {
 }
 internal virtual void DeleteRenderbuffer(WebGLRenderbuffer renderbuffer)
 {
     gl.deleteRenderbuffer(renderbuffer);
     GraphicsExtensions.CheckGLError();
 }
Exemple #19
0
 public void bindRenderbuffer(int target, WebGLRenderbuffer renderbuffer)
 {
     this.openGl.BindRenderbufferEXT((uint)target, renderbuffer != null ? renderbuffer.Value : 0);
     this.ErrorTest();
 }
 public void deleteRenderbuffer(WebGLRenderbuffer renderbuffer)
 {
     throw new NotImplementedException();
 }
 public bool isRenderbuffer(WebGLRenderbuffer renderbuffer)
 {
     throw new NotImplementedException();
 }
Exemple #22
0
 public void deleteRenderbuffer(WebGLRenderbuffer renderbuffer)
 {
 }
Exemple #23
0
        public void ReadPixels(int x, int y, int width, int height, PixelFormat format, PixelType type, byte[] pixels) => this.CallMethod <object>(READ_PIXELS, x, y, width, height, format, type, pixels); //pixels should be an ArrayBufferView which the data gets read into

        public void BindRenderbuffer(RenderbufferType target, WebGLRenderbuffer renderbuffer) => this.CallMethod <object>(BIND_RENDERBUFFER, target, renderbuffer);
Exemple #24
0
 public bool isRenderbuffer(WebGLRenderbuffer renderbuffer)
 {
     return(default(bool));
 }
Exemple #25
0
 public void DeleteRenderbuffer(WebGLRenderbuffer buffer) => this.CallMethod <object>(DELETE_RENDERBUFFER, buffer);
 public void deleteRenderbuffer(WebGLRenderbuffer renderbuffer) { }
Exemple #27
0
 public bool IsRenderbuffer(WebGLRenderbuffer renderbuffer) => this.CallMethod <bool>(IS_RENDERBUFFER, renderbuffer);
 public bool isRenderbuffer(WebGLRenderbuffer renderbuffer) { return default(bool); }
 internal virtual void FramebufferRenderbuffer(double attachement, WebGLRenderbuffer renderbuffer, double level = 0)
 {
     gl.framebufferRenderbuffer(gl.FRAMEBUFFER, attachement, gl.RENDERBUFFER, renderbuffer);
     GraphicsExtensions.CheckGLError();
 }