public void AttachRenderTexture(RenderTexture texture, FramebufferAttachment?attachmentType = null) { Rendering.CheckGLErrors($"At the start of '{nameof(Framebuffer)}.{nameof(AttachRenderTexture)}'."); Bind(this); var attachment = attachmentType ?? nextDefaultAttachment++; GL.FramebufferTexture2D(FramebufferTarget.Framebuffer, attachment, TextureTarget.Texture2D, texture.Id, 0); renderTextures.Add(texture); textureToAttachment[texture] = attachment; var drawBuffersEnum = (DrawBuffersEnum)attachment; if (Enum.IsDefined(typeof(DrawBuffersEnum), drawBuffersEnum)) { ArrayUtils.Add(ref drawBuffers, drawBuffersEnum); } maxTextureWidth = Math.Max(maxTextureWidth, texture.Width); maxTextureHeight = Math.Max(maxTextureHeight, texture.Height); Rendering.CheckFramebufferStatus(); Rendering.CheckGLErrors($"At the end of '{nameof(Framebuffer)}.{nameof(AttachRenderTexture)}'."); }
private static void ParseJsonFramebuffers(Json jsonSettings, List <Framebuffer> framebuffers) { //Framebuffers foreach (var fbPair in jsonSettings.framebuffers) { string fbName = fbPair.Key; var fb = fbPair.Value; var framebuffer = Framebuffer.Create(fbName); Framebuffer.Bind(framebuffer); foreach (var texPair in fb.textures) { //bool noWrite = false; string texName = texPair.Key; var tex = texPair.Value; switch (tex.type) { case TextureAttachmentType.Color: break; case TextureAttachmentType.Depth: //noWrite = true; break; case TextureAttachmentType.DepthStencil: { framebuffer.AttachRenderbuffer(new Renderbuffer(texName, RenderbufferStorage.Depth24Stencil8), FramebufferAttachment.DepthStencilAttachment); continue; } default: throw new NotImplementedException(); } framebuffer.AttachRenderTexture(new RenderTexture(texName, Screen.Width, Screen.Height, textureFormat: tex.format)); Rendering.CheckFramebufferStatus(); } framebuffers.Add(framebuffer); } }
public void AttachRenderbuffer(Renderbuffer renderbuffer, FramebufferAttachment?attachmentType = null) { Bind(this); var attachment = attachmentType ?? nextDefaultAttachment++; GL.FramebufferRenderbuffer(FramebufferTarget.Framebuffer, attachment, RenderbufferTarget.Renderbuffer, Id); Rendering.CheckFramebufferStatus(); ArrayUtils.Add(ref renderbuffers, renderbuffer); var drawBuffersEnum = (DrawBuffersEnum)attachment; if (Enum.IsDefined(typeof(DrawBuffersEnum), drawBuffersEnum)) { ArrayUtils.Add(ref drawBuffers, drawBuffersEnum); } }