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(); }
public void framebufferRenderbuffer( int target, int attachment, int renderbuffertarget, WebGLRenderbuffer renderbuffer) { this.openGl.FramebufferRenderbufferEXT((uint)target, (uint)attachment, (uint)renderbuffertarget, renderbuffer.Value); this.ErrorTest(); }
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(); }
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(); }
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(); }
public void bindRenderbuffer(int target, WebGLRenderbuffer renderbuffer) { }
internal virtual void DeleteRenderbuffer(WebGLRenderbuffer renderbuffer) { gl.deleteRenderbuffer(renderbuffer); GraphicsExtensions.CheckGLError(); }
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(); }
public void deleteRenderbuffer(WebGLRenderbuffer renderbuffer) { }
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);
public bool isRenderbuffer(WebGLRenderbuffer renderbuffer) { return(default(bool)); }
public void DeleteRenderbuffer(WebGLRenderbuffer buffer) => this.CallMethod <object>(DELETE_RENDERBUFFER, buffer);
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(); }