public OpenGLESTexture2D(
            int mipLevels,
            int width,
            int height,
            PixelFormat veldridFormat,
            OpenTK.Graphics.ES30.PixelFormat pixelFormat,
            PixelType pixelType)
            : base(TextureTarget.Texture2D, width, height)
        {
            MipLevels          = mipLevels;
            _veldridFormat     = veldridFormat;
            _pixelFormat       = pixelFormat;
            _pixelType         = pixelType;
            _texComponentCount = OpenGLESFormats.MapTextureComponentCount(veldridFormat, pixelFormat == OpenTK.Graphics.ES30.PixelFormat.DepthComponent);

            Bind();

            for (int currentLevel = 0; currentLevel < mipLevels; currentLevel++)
            {
                // Set size, load empty data into texture
                GL.TexImage2D(
                    TextureTarget2d.Texture2D,
                    currentLevel,
                    _texComponentCount,
                    width, height,
                    0, // border
                    _pixelFormat,
                    _pixelType,
                    IntPtr.Zero);
                Utilities.CheckLastGLES3Error();
                width  = Math.Max(1, width / 2);
                height = Math.Max(1, height / 2);
            }
        }
示例#2
0
        public OpenGLTexture2D(
            int width,
            int height,
            PixelFormat veldridFormat,
            PixelInternalFormat internalFormat,
            OpenTK.Graphics.OpenGL.PixelFormat pixelFormat,
            PixelType pixelType,
            IntPtr pixelData)
            : base(TextureTarget.Texture2D, width, height)
        {
            _veldridFormat  = veldridFormat;
            _internalFormat = internalFormat;
            _pixelFormat    = pixelFormat;
            _pixelType      = pixelType;

            Bind();

            GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Nearest);
            GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Nearest);

            // Set size, load empty data into texture
            GL.TexImage2D(
                TextureTarget.Texture2D,
                0, // level
                internalFormat,
                width, height,
                0, // border
                _pixelFormat,
                _pixelType,
                pixelData);
        }
        Graphics.PixelFormat StorageFormatToPixelFormat()
        {
            Graphics.PixelFormat format = Graphics.PixelFormat.R16G16B16A16_Float;
            switch (StorageFormat)
            {
            case StorageFormats.RGBA8:
                format = Graphics.PixelFormat.R8G8B8A8_UNorm;
                break;

            case StorageFormats.R10G10B10A2:
                format = Graphics.PixelFormat.R10G10B10A2_UNorm;
                break;

            case StorageFormats.RGBA16F:
                format = Graphics.PixelFormat.R16G16B16A16_Float;
                break;
            }
            return(format);
        }
        public void PrepareLocalStorage(VoxelStorageContext context, IVoxelStorage storage)
        {
            StorageMethod.PrepareLocalStorage(context, storage, 4, 1);

            Graphics.PixelFormat format = Graphics.PixelFormat.R16G16B16A16_Float;
            switch (StorageFormat)
            {
            case StorageFormats.RGBA8:
                format = Graphics.PixelFormat.R8G8B8A8_UNorm;
                break;

            case StorageFormats.R10G10B10A2:
                format = Graphics.PixelFormat.R10G10B10A2_UNorm;
                break;

            case StorageFormats.RGBA16F:
                format = Graphics.PixelFormat.R16G16B16A16_Float;
                break;
            }
            storage.UpdateTexture(context, ref IsotropicTex, format, 1);
        }
        public OpenGLTexture2D(
            int mipLevels,
            int width,
            int height,
            PixelFormat veldridFormat,
            PixelInternalFormat internalFormat,
            OpenTK.Graphics.OpenGL.PixelFormat pixelFormat,
            PixelType pixelType)
            : base(TextureTarget.Texture2D, width, height)
        {
            MipLevels       = mipLevels;
            _veldridFormat  = veldridFormat;
            _internalFormat = internalFormat;
            _pixelFormat    = pixelFormat;
            _pixelType      = pixelType;

            Bind();

            GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear);
            GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);

            for (int currentLevel = 0; currentLevel < mipLevels; currentLevel++)
            {
                // Set size, load empty data into texture
                GL.TexImage2D(
                    TextureTarget.Texture2D,
                    currentLevel,
                    internalFormat,
                    width, height,
                    0, // border
                    _pixelFormat,
                    _pixelType,
                    IntPtr.Zero);
                Utilities.CheckLastGLError();
                width  = Math.Max(1, width / 2);
                height = Math.Max(1, height / 2);
            }
        }