/// <summary> /// Проверить текстуру кадрового буфера /// </summary> private void CheckSurfaceTexture() { if (GlSurfaceTextureId <= 0 || GlSurfaceFramebuffer <= 0) { GlSurfaceFramebuffer = GL.GenFramebuffer(); GL.BindFramebuffer(FramebufferTarget.DrawFramebuffer, GlSurfaceFramebuffer); GlSurfaceTextureId = GL.GenTexture(); GL.BindTexture(TextureTarget.Texture2D, GlSurfaceTextureId); GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgb, ViewBehaviourConsts.BASE_SURFACE_WIDTH, ViewBehaviourConsts.BASE_SURFACE_HEIGHT, 0, PixelFormat.Rgb, PixelType.UnsignedByte, IntPtr.Zero); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Nearest); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMinFilter.Nearest); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)TextureWrapMode.Clamp); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)TextureWrapMode.Clamp); GL.FramebufferTexture2D(FramebufferTarget.DrawFramebuffer, FramebufferAttachment.ColorAttachment0, TextureTarget.Texture2D, GlSurfaceTextureId, 0); _glSurfaceDrawBuffers = DrawBufferMode.ColorAttachment0; GL.DrawBuffer(_glSurfaceDrawBuffers); } }
public void AttachColorTexture(int index, DeviceTexture2D texture) { Bind(); Debug.Assert(texture is OpenGLESTexture2D); OpenGLESTexture2D glTex = (OpenGLESTexture2D)texture; _colorTextures[index] = glTex; GL.ActiveTexture(TextureUnit.Texture0); Utilities.CheckLastGLES3Error(); glTex.Bind(); GL.FramebufferTexture2D( FramebufferTarget.Framebuffer, FramebufferAttachment.ColorAttachment0, TextureTarget2d.Texture2D, glTex.ID, 0); GL.BindTexture(TextureTarget.Texture2D, 0); Utilities.CheckLastGLES3Error(); DrawBufferMode mode = DrawBufferMode.ColorAttachment0 + index; GL.DrawBuffers(1, ref mode); Utilities.CheckLastGLES3Error(); Unbind(); }
public void ApplyPostRender() { // Removed thread guards because of performance //DefaultOpenTKBackendPlugin.GuardSingleThreadState(); if (!this.pendingPostRender) { return; } // Resolve multisampling to the main FBO if (this.samples > 0) { GL.BindFramebuffer(FramebufferTarget.ReadFramebuffer, this.handleMsaaFBO); GL.BindFramebuffer(FramebufferTarget.DrawFramebuffer, this.handleMainFBO); for (int i = 0; i < this.targetInfos.Count; i++) { GL.ReadBuffer((ReadBufferMode)((int)ReadBufferMode.ColorAttachment0 + i)); DrawBufferMode mode = (DrawBufferMode)((int)DrawBufferMode.ColorAttachment0 + i); GL.DrawBuffers(1, ref mode); GL.BlitFramebuffer( 0, 0, this.targetInfos.Data[i].Target.Width, this.targetInfos.Data[i].Target.Height, 0, 0, this.targetInfos.Data[i].Target.Width, this.targetInfos.Data[i].Target.Height, ClearBufferMask.ColorBufferBit, BlitFramebufferFilter.Nearest); } } // Generate mipmaps for the target textures int lastTexId = -1; for (int i = 0; i < this.targetInfos.Count; i++) { if (!this.targetInfos.Data[i].Target.HasMipmaps) { continue; } if (lastTexId == -1) { GL.BindFramebuffer(FramebufferTarget.Framebuffer, 0); GL.GetInteger(GetPName.TextureBinding2D, out lastTexId); } int texId = this.targetInfos.Data[i].Target.Handle; GL.BindTexture(TextureTarget.Texture2D, texId); GL.GenerateMipmap(TextureTarget.Texture2D); } // Reset OpenGL state if (lastTexId != -1) { GL.BindTexture(TextureTarget.Texture2D, lastTexId); } ApplyGLBind(curBound); this.pendingPostRender = false; }
public static void DrawBuffer(DrawBufferMode mode) { GL.DrawBuffer(mode); if (enableErrorCheck) { LogErrors(); } }
//STATIC HELPER METHODS public static void copyChannel(int from_fbo, int to_fbo, int sourceSizeX, int sourceSizeY, int destSizeX, int destSizeY, ReadBufferMode from_channel, DrawBufferMode to_channel) { GL.BindFramebuffer(FramebufferTarget.ReadFramebuffer, from_fbo); GL.ReadBuffer(from_channel); //Read color GL.BindFramebuffer(FramebufferTarget.DrawFramebuffer, to_fbo); GL.DrawBuffer(to_channel); //Write to blur1 GL.BlitFramebuffer(0, 0, sourceSizeX, sourceSizeY, 0, 0, destSizeX, destSizeY, ClearBufferMask.ColorBufferBit, BlitFramebufferFilter.Linear); }
private static void ApplyGLBind(NativeRenderTarget target) { if (target == null) { GL.BindFramebuffer(FramebufferTarget.Framebuffer, 0); GL.ReadBuffer(ReadBufferMode.Back); DrawBufferMode mode = DrawBufferMode.Back; GL.DrawBuffers(1, ref mode); } else { GL.BindFramebuffer(FramebufferTarget.Framebuffer, target.samples > 0 ? target.handleMsaaFBO : target.handleMainFBO); DrawBufferMode[] buffers = new DrawBufferMode[target.targetInfos.Count]; for (int i = 0; i < buffers.Length; i++) { buffers[i] = (DrawBufferMode)((int)DrawBufferMode.ColorAttachment0 + i); } GL.DrawBuffers(buffers.Length, buffers); } }
public void DrawBuffer(DrawBufferMode mode) { gl.glDrawBuffer((int)mode); CheckException(); }
public static void DrawBuffer(DrawBufferMode mode) { glDrawBuffer deleg = BaseGraphicsContext.Current.Loader.Get<glDrawBuffer>(); if (deleg != null) deleg(mode); }
public static Reaction <T> DrawBuffer <T> (this Reaction <T> render, DrawBufferMode mode) { return(render.DrawBuffer(i => mode)); }
public void DrawBuffer(DrawBufferMode DrawBufferMode) { _glDrawBuffer((int)DrawBufferMode); }
internal static extern void glDrawBuffer(DrawBufferMode mode);
internal void Bind() { GL.BindFramebuffer(FramebufferType.Framebuffer, framebuffer); GL.Viewport(0, 0, width, height); int attachmentCount = 0; int temp = attachments; while (temp != 0) { attachmentCount++; temp &= temp - 1; } if (attachmentCount == 0) { GL.DrawBuffer(DrawBufferMode.None); } else if (attachmentCount == 1) { DrawBufferMode drawBuffer = DrawBufferMode.Color0; temp = attachments; while (temp != 1) { temp >>= 1; drawBuffer++; } GL.DrawBuffer(drawBuffer); } else { DrawBufferMode[] buffers = new DrawBufferMode[attachmentCount]; DrawBufferMode drawBuffer = DrawBufferMode.Color0; temp = attachments; for (int i = 0; i < attachmentCount; i++) { while ((temp & 1) != 1) { temp >>= 1; } temp >>= 1; buffers[i] = drawBuffer++; } GL.DrawBuffers(buffers); } }
public void DrawBuffer(DrawBufferMode drawBufferMode) { GL.DrawBuffer(drawBufferMode); }
public static void glDrawBuffer(DrawBufferMode mode) => p_glDrawBuffer(mode);
public static void copyChannel(int fbo, int sourceSizeX, int sourceSizeY, ReadBufferMode from_channel, DrawBufferMode to_channel) { GL.BindFramebuffer(FramebufferTarget.ReadFramebuffer, fbo); GL.ReadBuffer(from_channel); //Read color GL.BindFramebuffer(FramebufferTarget.DrawFramebuffer, fbo); GL.DrawBuffer(to_channel); //Write to blur1 //Method 1: Use Blitbuffer GL.BlitFramebuffer(0, 0, sourceSizeX, sourceSizeY, 0, 0, sourceSizeX, sourceSizeY, ClearBufferMask.ColorBufferBit, BlitFramebufferFilter.Nearest); }
public void ReadBuffer(DrawBufferMode drawBufferMode) { NativeMethods.ReadBuffer(drawBufferMode); CheckForError(); }
public unsafe static void NamedFramebufferDrawBuffer(uint framebuffer, DrawBufferMode buf) => glNamedFramebufferDrawBuffer(framebuffer, buf);
public static extern void DrawBuffer( DrawBufferMode mode );
public static void draw(DrawBufferMode mode) { GL.DrawBuffer(mode); }
internal static extern void ReadBuffer(DrawBufferMode drawBufferMode);
public static void DrawBuffer(DrawBufferMode mode) { gl.glDrawBuffer((int)mode); }
public static void FramebufferDrawBufferEXT(UInt32 framebuffer, DrawBufferMode mode) { Debug.Assert(Delegates.pglFramebufferDrawBufferEXT != null, "pglFramebufferDrawBufferEXT not implemented"); Delegates.pglFramebufferDrawBufferEXT(framebuffer, (Int32)mode); CallLog("glFramebufferDrawBufferEXT({0}, {1})", framebuffer, mode); DebugCheckErrors(); }
public void DrawBuffer(DrawBufferMode mode) { using (new Bind(this)) GL.DrawBuffer(mode); }
public static void glDrawBuffer(DrawBufferMode buf) { i_OpenGL1_0.glDrawBuffer(buf); }
public unsafe static void DrawBuffer(DrawBufferMode mode) => glDrawBuffer(mode);
public static void DrawBuffer(DrawBufferMode buf) { Debug.Assert(Delegates.pglDrawBuffer != null, "pglDrawBuffer not implemented"); Delegates.pglDrawBuffer((Int32)buf); CallLog("glDrawBuffer({0})", buf); DebugCheckErrors(); }
public void DrawBuffer(DrawBufferMode Buffer) { //GL.DrawBuffer(Buffer); GL.NamedFramebufferDrawBuffer(ID, Buffer); }