Beispiel #1
0
        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
            }
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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;
                }
            }
        }