internal void DeleteFramebuffer(glFramebuffer framebuffer) { int framebufferHandle = framebuffer.Handle; lock (this) { #if NET_STANDARD_13 _glDeleteFramebuffers(1, &framebufferHandle); #else if (_CurrentThreadId == Thread.CurrentThread.ManagedThreadId) { _glDeleteFramebuffers(1, &framebufferHandle); } else { if (_PendingFramebufferDeleteCount == _PendingFramebufferDelete.Length) { Array.Resize <int>(ref _PendingFramebufferDelete, _PendingFramebufferDelete.Length * 2); } _PendingFramebufferDelete[_PendingFramebufferDeleteCount] = framebufferHandle; _PendingFramebufferDeleteCount++; } #endif } }
internal void FramebufferTexture(glFramebuffer framebuffer, glFramebuffer.BindTarget Target, glFramebuffer.Attachment attachment, glTexture texture, int level) { int indexTarget = GlTargetToFramebufferTargetIndex(Target); lock (_Framebuffers) { if (_Framebuffers[indexTarget] != framebuffer) { throw new Exception("Invalid bind target. The frambeuffer must be bound to this target first"); } _glFramebufferTexture((int)Target, (int)attachment, texture.Handle, level); } }
public glFramebuffer[] GenFramebuffers(int numFramebuffers) { int[] framebufferHandle = new int[numFramebuffers]; fixed(int *pframebufferHandles = &framebufferHandle[0]) { _glGenFramebuffers(numFramebuffers, pframebufferHandles); } glFramebuffer[] framebuffers = new glFramebuffer[numFramebuffers]; for (int n = 0; n < numFramebuffers; n++) { framebuffers[n] = new glFramebuffer(this, framebufferHandle[n]); } return(framebuffers); }
internal void BindFramebuffer(glFramebuffer Framebuffer, glFramebuffer.BindTarget Target) { int indexTarget = GlTargetToFramebufferTargetIndex(Target); lock (_Framebuffers) { if (Framebuffer == null) { _glBindFramebuffer((int)Target, 0); _Framebuffers[indexTarget] = null; } else { _glBindFramebuffer((int)Target, Framebuffer.Handle); _Framebuffers[indexTarget] = Framebuffer; } } }