internal RenderTexture(IDevice device, int width, int height) { handle = device.GenFramebuffer(); underlyingTexture = new Texture(device, (uint[])null, width, height); device.BindFramebuffer(FramebufferTarget.Framebuffer, handle); device.FramebufferTexture2D(FramebufferTarget.Framebuffer, FramebufferAttachment.ColorAttachment0, TextureTarget.Texture2D, underlyingTexture.Handle, 0); // create a renderbuffer object for depth and stencil attachment (we won't be sampling these) depthHandle = device.GenRenderbuffer(); device.BindRenderbuffer(RenderbufferTarget.Renderbuffer, depthHandle); device.RenderbufferStorage(RenderbufferTarget.Renderbuffer, RenderbufferStorage.Depth24Stencil8, width, height); device.FramebufferRenderbuffer(FramebufferTarget.Framebuffer, FramebufferAttachment.DepthStencilAttachment, RenderbufferTarget.Renderbuffer, depthHandle); device.BindFramebuffer(FramebufferTarget.Framebuffer, 0); this.device = device; }
/// <summary> /// Sets current render texture. /// call only from render thread /// </summary> /// <param name="renderTexture">render texture or null, then it resets to back buffer</param> public void SetRenderTexture(RenderTexture renderTexture, int destFramebuffer) { if (renderTexture == null) { device.BindFramebuffer(FramebufferTarget.Framebuffer, destFramebuffer); } else { renderTexture.ActivateFrameBuffer(); } //RenderTargetView view = renderTexture == null ? renderTargetView : renderTexture.TargetView; //device.ImmediateContext.OutputMerger.SetTargets(depthStencilView, view); }
public void ActivateFrameBuffer() { device.BindFramebuffer(FramebufferTarget.Framebuffer, handle); device.Viewport(0, 0, (int)Width, (int)Height); }