예제 #1
0
 internal void BindTexture(glTexture Texture, glTexture.BindTarget Target)
 {
     lock (_TextureUnitTrackers)
     {
         _ActiveTextureUnit.BindTexture(Texture, Target);
     }
 }
예제 #2
0
        internal void DeleteTexture(glTexture Texture)
        {
            int textureHandle = Texture.Handle;

            lock (this)
            {
#if NET_STANDARD_13
                _glDeleteTextures(1, &textureHandle);
#else
                if (_CurrentThreadId == Thread.CurrentThread.ManagedThreadId)
                {
                    _glDeleteTextures(1, &textureHandle);
                }
                else
                {
                    if (_PendingTextureDeleteCount == _PendingTextureDelete.Length)
                    {
                        Array.Resize <int>(ref _PendingTextureDelete, _PendingTextureDelete.Length * 2);
                    }
                    _PendingTextureDelete[_PendingTextureDeleteCount] = textureHandle;
                    _PendingTextureDeleteCount++;
                }
#endif
            }
        }
예제 #3
0
        internal void TexParameter(glTexture Texture, glTexture.BindTarget Target, int Parameter, int Value)
        {
            int indexTarget = GlTargetTotextureTargetIndex(Target);

            lock (_TextureUnitTrackers)
            {
                if (_ActiveTextureUnit._Textures[indexTarget] != Texture)
                {
                    throw new Exception("The texture is not bound correctly");
                }
                _glTexParameteri((int)Target, Parameter, Value);
            }
        }
예제 #4
0
        internal void TexImage2D(glTexture Texture, glTexture.BindTarget Target, int Level, glTexture.InternalFormat InternalFormat, int Width, int Height, glTexture.Format Format, glTexture.Type Type, IntPtr Data)
        {
            int indexTarget = GlTargetTotextureTargetIndex(Target);

            lock (_TextureUnitTrackers)
            {
                if (_ActiveTextureUnit._Textures[indexTarget] != Texture)
                {
                    throw new Exception("The texture is not bound correctly");
                }
                _glTexImage2D((int)Target, Level, (int)InternalFormat, Width, Height, 0, (int)Format, (int)Type, Data);
            }
        }
예제 #5
0
        public glTexture[] GenTextures(int numTextures)
        {
            int[] textureHandle = new int[numTextures];
            fixed(int *pTextureHandles = &textureHandle[0])
            {
                _glGenTextures(numTextures, pTextureHandles);
            }

            glTexture[] textures = new glTexture[numTextures];
            for (int n = 0; n < numTextures; n++)
            {
                textures[n] = new glTexture(this, textureHandle[n]);
            }
            return(textures);
        }
예제 #6
0
            internal void BindTexture(glTexture Texture, glTexture.BindTarget Target)
            {
                int indexTarget = GlTargetTotextureTargetIndex(Target);

                lock (_Textures)
                {
                    if (Texture == null)
                    {
                        _Context._glBindTexture((int)Target, 0);
                        _Textures[indexTarget] = null;
                    }
                    else
                    {
                        _Context._glBindTexture((int)Target, Texture.Handle);
                        _Textures[indexTarget] = Texture;
                    }
                }
            }
예제 #7
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);
            }
        }
예제 #8
0
 public void AttachTexture(BindTarget Target, Attachment Attachment, glTexture texture, int Level)
 {
     _Parent.FramebufferTexture(this, Target, Attachment, texture, Level);
 }