Example #1
0
        /// <summary>
        /// generates new mipmaps
        /// </summary>
        public TextureArray2D GenerateMipmapLevels(int levels)
        {
            Debug.Assert(!HasMipmaps);
            // create a texture with the same format and more mipmaps
            var newTex = new TextureArray2D(nLayer, levels, internalFormat, width, height, IsSrgb);

            // copy image data of first level
            GL.CopyImageSubData(id, ImageTarget.Texture2DArray, 0, 0, 0, 0,
                                newTex.id, ImageTarget.Texture2DArray, 0, 0, 0, 0, width, height, nLayer);

            newTex.GenerateMipmaps();

            return(newTex);
        }
Example #2
0
        /// <summary>
        /// creates a new texture that has only one mipmap level
        /// </summary>
        /// <param name="level">mipmap level to clone</param>
        /// <returns></returns>
        public TextureArray2D CloneMipmapLevel(int level)
        {
            Debug.Assert(level < nMipmaps);
            Debug.Assert(level >= 0);

            GL.GetTexLevelParameter(TextureTarget.Texture2DArray, level, GetTextureParameter.TextureWidth, out int lvlWidth);
            GL.GetTexLevelParameter(TextureTarget.Texture2DArray, level, GetTextureParameter.TextureHeight, out int lvlHeight);
            var newTex = new TextureArray2D(nLayer, 1, internalFormat, lvlWidth, lvlHeight, IsSrgb);

            // copy data of first mipmap level
            GL.CopyImageSubData(id, ImageTarget.Texture2DArray, level, 0, 0, 0,
                                newTex.id, ImageTarget.Texture2DArray, 0, 0, 0, 0, lvlWidth, lvlHeight, nLayer);

            return(newTex);
        }
Example #3
0
        /// <summary>
        /// performs a deep gpu copy of the textures
        /// </summary>
        /// <returns></returns>
        public TextureArray2D Clone()
        {
            var newTex = new TextureArray2D(nLayer, nMipmaps, internalFormat, width, height, IsSrgb);

            for (var level = 0; level < nMipmaps; ++level)
            {
                GL.GetTexLevelParameter(TextureTarget.Texture2DArray, level, GetTextureParameter.TextureWidth, out int lwidth);
                GL.GetTexLevelParameter(TextureTarget.Texture2DArray, level, GetTextureParameter.TextureHeight, out int lheight);

                GL.CopyImageSubData(id, ImageTarget.Texture2DArray, level, 0, 0, 0,
                                    newTex.id, ImageTarget.Texture2DArray, level, 0, 0, 0,
                                    lwidth, lheight, nLayer);
            }

            return(newTex);
        }