Esempio n. 1
0
        public static KtxHeader InitializeUncompressed(int width, int height, GLType type, GLFormat format, uint glTypeSize, GlInternalFormat internalFormat, GLFormat baseInternalFormat)
        {
            KtxHeader   header = new KtxHeader();
            Span <byte> id     = stackalloc byte[] { 0xAB, 0x4B, 0x54, 0x58, 0x20, 0x31, 0x31, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A };

            for (int i = 0; i < id.Length; i++)
            {
                header.Identifier[i] = id[i];
            }
            header.Endianness           = 0x04030201;
            header.PixelWidth           = (uint)width;
            header.PixelHeight          = (uint)height;
            header.GlType               = type;
            header.GlTypeSize           = glTypeSize;
            header.GlFormat             = format;
            header.GlInternalFormat     = internalFormat;
            header.GlBaseInternalFormat = baseInternalFormat;

            return(header);
        }
    }
        public static VkFormat vkGetFormatFromOpenGLInternalFormat(GlInternalFormat internalFormat, GLFormat format, GLType glType)
        {
            switch (internalFormat)
            {
            //
            // Packed formats
            //

            case GlInternalFormat.GL_RGBA4:
                if (format == GLFormat.GL_RGBA)
                {
                    return(VkFormat.R4g4b4a4UnormPack16);
                }
                else
                {
                    return(VkFormat.B4g4r4a4UnormPack16);
                }

            case GlInternalFormat.GL_RGB565:
                if (glType == GLType.GL_UNSIGNED_SHORT_5_6_5)
                {
                    return(VkFormat.R5g6b5UnormPack16);
                }
                else
                {
                    return(VkFormat.B5g6r5UnormPack16);
                }

            case GlInternalFormat.GL_RGB5_A1:
                if (format == GLFormat.GL_RGBA)
                {
                    return(VkFormat.R5g5b5a1UnormPack16);
                }
                else if (glType == GLType.GL_UNSIGNED_SHORT_5_5_5_1)
                {
                    return(VkFormat.B5g5r5a1UnormPack16);
                }
                else
                {
                    return(VkFormat.A1r5g5b5UnormPack16);
                }

            //
            // Raw formats 8 bits
            //
            case GlInternalFormat.GL_R8:
                return(VkFormat.R8Unorm);

            case GlInternalFormat.GL_R8_SNORM:
                return(VkFormat.R8Snorm);

            case GlInternalFormat.GL_R8UI:
                return(VkFormat.R8Uint);

            case GlInternalFormat.GL_R8I:
                return(VkFormat.R8Sint);

            case GlInternalFormat.GL_RG8:
                return(VkFormat.R8g8Unorm);

            case GlInternalFormat.GL_RG8_SNORM:
                return(VkFormat.R8g8Snorm);

            case GlInternalFormat.GL_RG8UI:
                return(VkFormat.R8g8Uint);

            case GlInternalFormat.GL_RG8I:
                return(VkFormat.R8g8Sint);

            case GlInternalFormat.GL_RGB8:
                if (format == GLFormat.GL_RGB)
                {
                    return(VkFormat.R8g8b8Unorm);
                }
                else
                {
                    return(VkFormat.B8g8r8Unorm);
                }

            case GlInternalFormat.GL_RGB8_SNORM:
                if (format == GLFormat.GL_RGB)
                {
                    return(VkFormat.R8g8b8Snorm);
                }
                else
                {
                    return(VkFormat.B8g8r8Snorm);
                }

            case GlInternalFormat.GL_RGB8UI:
                if (format == GLFormat.GL_RGB)
                {
                    return(VkFormat.R8g8b8Uint);
                }
                else
                {
                    return(VkFormat.B8g8r8Uint);
                }

            case GlInternalFormat.GL_RGB8I:
                if (format == GLFormat.GL_RGB)
                {
                    return(VkFormat.R8g8b8Sint);
                }
                else
                {
                    return(VkFormat.B8g8r8Sint);
                }

            case GlInternalFormat.GL_RGBA8:
                if (format == GLFormat.GL_RGBA)
                {
                    return(VkFormat.R8g8b8a8Unorm);
                }
                else
                {
                    return(VkFormat.B8g8r8a8Unorm);
                }

            case GlInternalFormat.GL_RGBA8_SNORM:
                if (format == GLFormat.GL_RGBA)
                {
                    return(VkFormat.R8g8b8a8Snorm);
                }
                else
                {
                    return(VkFormat.B8g8r8a8Snorm);
                }

            case GlInternalFormat.GL_RGBA8UI:
                if (format == GLFormat.GL_RGBA)
                {
                    return(VkFormat.R8g8b8a8Uint);
                }
                else
                {
                    return(VkFormat.B8g8r8a8Uint);
                }

            case GlInternalFormat.GL_RGBA8I:
                if (format == GLFormat.GL_RGBA)
                {
                    return(VkFormat.R8g8b8a8Sint);
                }
                else
                {
                    return(VkFormat.B8g8r8a8Sint);
                }

            //
            // 10 bit color 2 alpha packed formats
            //
            case GlInternalFormat.GL_RGB10_A2:
                if (format == GLFormat.GL_RGBA)
                {
                    return(VkFormat.A2r10g10b10SnormPack32);
                }
                else
                {
                    return(VkFormat.A2b10g10r10SnormPack32);
                }

            case GlInternalFormat.GL_RGB10_A2UI:
                if (format == GLFormat.GL_RGBA)
                {
                    return(VkFormat.A2r10g10b10UintPack32);
                }
                else
                {
                    return(VkFormat.A2b10g10r10UintPack32);
                }

            //
            // Raw formats 16 bits
            //

            case GlInternalFormat.GL_R16:
                return(VkFormat.R16Unorm);

            case GlInternalFormat.GL_R16_SNORM:
                return(VkFormat.R16Snorm);

            case GlInternalFormat.GL_R16UI:
                return(VkFormat.R16Uint);

            case GlInternalFormat.GL_R16I:
                return(VkFormat.R16Sint);

            case GlInternalFormat.GL_R16F:
                return(VkFormat.R16Sfloat);

            case GlInternalFormat.GL_RG16:
                return(VkFormat.R16g16Unorm);

            case GlInternalFormat.GL_RG16_SNORM:
                return(VkFormat.R16g16Snorm);

            case GlInternalFormat.GL_RG16UI:
                return(VkFormat.R16g16Uint);

            case GlInternalFormat.GL_RG16I:
                return(VkFormat.R16g16Sint);

            case GlInternalFormat.GL_RG16F:
                return(VkFormat.R16g16Sfloat);

            case GlInternalFormat.GL_RGB16:
                return(VkFormat.R16g16b16Unorm);

            case GlInternalFormat.GL_RGB16_SNORM:
                return(VkFormat.R16g16b16Snorm);

            case GlInternalFormat.GL_RGB16UI:
                return(VkFormat.R16g16b16Uint);

            case GlInternalFormat.GL_RGB16I:
                return(VkFormat.R16g16b16Sint);

            case GlInternalFormat.GL_RGB16F:
                return(VkFormat.R16g16b16Sfloat);

            case GlInternalFormat.GL_RGBA16:
                return(VkFormat.R16g16b16a16Unorm);

            case GlInternalFormat.GL_RGBA16_SNORM:
                return(VkFormat.R16g16b16a16Snorm);

            case GlInternalFormat.GL_RGBA16UI:
                return(VkFormat.R16g16b16a16Uint);

            case GlInternalFormat.GL_RGBA16I:
                return(VkFormat.R16g16b16a16Sint);

            case GlInternalFormat.GL_RGBA16F:
                return(VkFormat.R16g16b16a16Sfloat);

            //
            // Raw formats 32 bits
            //

            case GlInternalFormat.GL_R32UI:
                return(VkFormat.R32Uint);

            case GlInternalFormat.GL_R32I:
                return(VkFormat.R32Sint);

            case GlInternalFormat.GL_R32F:
                return(VkFormat.R32Sfloat);

            case GlInternalFormat.GL_RG32UI:
                return(VkFormat.R32g32Uint);

            case GlInternalFormat.GL_RG32I:
                return(VkFormat.R32g32Sint);

            case GlInternalFormat.GL_RG32F:
                return(VkFormat.R32g32Sfloat);

            case GlInternalFormat.GL_RGB32UI:
                return(VkFormat.R32g32b32Uint);

            case GlInternalFormat.GL_RGB32I:
                return(VkFormat.R32g32b32Sint);

            case GlInternalFormat.GL_RGB32F:
                return(VkFormat.R32g32b32Sfloat);

            case GlInternalFormat.GL_RGBA32UI:
                return(VkFormat.R32g32b32a32Uint);

            case GlInternalFormat.GL_RGBA32I:
                return(VkFormat.R32g32b32a32Sint);

            case GlInternalFormat.GL_RGBA32F:
                return(VkFormat.R32g32b32a32Sfloat);

            //
            // Depth formats
            //

            case GlInternalFormat.GL_DEPTH_COMPONENT16:
                return(VkFormat.D16Unorm);

            case GlInternalFormat.GL_DEPTH_COMPONENT24:
                return(VkFormat.X8D24UnormPack32);

            case GlInternalFormat.GL_DEPTH_COMPONENT32F:
                return(VkFormat.D32Sfloat);

            case GlInternalFormat.GL_STENCIL_INDEX8:
                return(VkFormat.S8Uint);

            case GlInternalFormat.GL_DEPTH24_STENCIL8:
                return(VkFormat.D24UnormS8Uint);

            case GlInternalFormat.GL_DEPTH32F_STENCIL8:
                return(VkFormat.D32SfloatS8Uint);

            //
            // S3TC/DXT/BC
            //
            case GlInternalFormat.GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
                return(VkFormat.Bc1RgbUnormBlock);

            case GlInternalFormat.GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
                return(VkFormat.Bc1RgbaUnormBlock);

            case GlInternalFormat.GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
                return(VkFormat.Bc1RgbSrgbBlock);

            case GlInternalFormat.GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
                return(VkFormat.Bc1RgbaSrgbBlock);

            case GlInternalFormat.GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
                return(VkFormat.Bc2UnormBlock);

            case GlInternalFormat.GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
                return(VkFormat.Bc2SrgbBlock);


            case GlInternalFormat.GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
                return(VkFormat.Bc3UnormBlock);

            case GlInternalFormat.GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
                return(VkFormat.Bc3SrgbBlock);

            case  GlInternalFormat.GL_COMPRESSED_RED_RGTC1_EXT:
                return(VkFormat.Bc4UnormBlock);

            case GlInternalFormat.GL_COMPRESSED_SIGNED_RED_RGTC1_EXT:
                return(VkFormat.Bc4SnormBlock);

            case GlInternalFormat.GL_COMPRESSED_RED_GREEN_RGTC2_EXT:
                return(VkFormat.Bc5UnormBlock);

            case GlInternalFormat.GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT:
                return(VkFormat.Bc5SnormBlock);

            case GlInternalFormat.GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB:
                return(VkFormat.Bc6hUfloatBlock);

            case GlInternalFormat.GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB:
                return(VkFormat.Bc6hSfloatBlock);

            case GlInternalFormat.GL_COMPRESSED_RGBA_BPTC_UNORM_ARB:
                return(VkFormat.Bc7UnormBlock);

            case GlInternalFormat.GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB:
                return(VkFormat.Bc7SrgbBlock);

            //
            // ETC
            //
            case GlInternalFormat.GL_ETC1_RGB8_OES:
                return(VkFormat.Etc2R8g8b8UnormBlock);

            case GlInternalFormat.GL_COMPRESSED_RGB8_ETC2:
                return(VkFormat.Etc2R8g8b8UnormBlock);

            case GlInternalFormat.GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
                return(VkFormat.Etc2R8g8b8a1UnormBlock);

            case GlInternalFormat.GL_COMPRESSED_RGBA8_ETC2_EAC:
                return(VkFormat.Etc2R8g8b8a8UnormBlock);

            case GlInternalFormat.GL_COMPRESSED_SRGB8_ETC2:
                return(VkFormat.Etc2R8g8b8SrgbBlock);

            case GlInternalFormat.GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
                return(VkFormat.Etc2R8g8b8a1SrgbBlock);

            case GlInternalFormat.GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:
                return(VkFormat.Etc2R8g8b8a8SrgbBlock);

            case GlInternalFormat.GL_COMPRESSED_R11_EAC:
                return(VkFormat.EacR11UnormBlock);

            case GlInternalFormat.GL_COMPRESSED_RG11_EAC:
                return(VkFormat.EacR11g11UnormBlock);

            case GlInternalFormat.GL_COMPRESSED_SIGNED_R11_EAC:
                return(VkFormat.EacR11SnormBlock);

            case GlInternalFormat.GL_COMPRESSED_SIGNED_RG11_EAC:
                return(VkFormat.EacR11g11SnormBlock);

            //
            // ASTC
            //
            case GlInternalFormat.GL_COMPRESSED_RGBA_ASTC_4x4_KHR:
                return(VkFormat.Astc4x4UnormBlock);

            case GlInternalFormat.GL_COMPRESSED_RGBA_ASTC_5x4_KHR:
                return(VkFormat.Astc5x4UnormBlock);

            case GlInternalFormat.GL_COMPRESSED_RGBA_ASTC_5x5_KHR:
                return(VkFormat.Astc5x5UnormBlock);

            case GlInternalFormat.GL_COMPRESSED_RGBA_ASTC_6x5_KHR:
                return(VkFormat.Astc6x5UnormBlock);

            case GlInternalFormat.GL_COMPRESSED_RGBA_ASTC_6x6_KHR:
                return(VkFormat.Astc6x6UnormBlock);

            case GlInternalFormat.GL_COMPRESSED_RGBA_ASTC_8x5_KHR:
                return(VkFormat.Astc8x5UnormBlock);

            case GlInternalFormat.GL_COMPRESSED_RGBA_ASTC_8x6_KHR:
                return(VkFormat.Astc8x6UnormBlock);

            case GlInternalFormat.GL_COMPRESSED_RGBA_ASTC_8x8_KHR:
                return(VkFormat.Astc8x8UnormBlock);

            case GlInternalFormat.GL_COMPRESSED_RGBA_ASTC_10x5_KHR:
                return(VkFormat.Astc10x5UnormBlock);

            case GlInternalFormat.GL_COMPRESSED_RGBA_ASTC_10x6_KHR:
                return(VkFormat.Astc10x6UnormBlock);

            case GlInternalFormat.GL_COMPRESSED_RGBA_ASTC_10x8_KHR:
                return(VkFormat.Astc10x8UnormBlock);

            case GlInternalFormat.GL_COMPRESSED_RGBA_ASTC_10x10_KHR:
                return(VkFormat.Astc10x10UnormBlock);

            case GlInternalFormat.GL_COMPRESSED_RGBA_ASTC_12x10_KHR:
                return(VkFormat.Astc12x10UnormBlock);

            case GlInternalFormat.GL_COMPRESSED_RGBA_ASTC_12x12_KHR:
                return(VkFormat.Astc12x12UnormBlock);

            case GlInternalFormat.GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:
                return(VkFormat.Astc4x4SrgbBlock);

            case GlInternalFormat.GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:
                return(VkFormat.Astc5x4SrgbBlock);

            case GlInternalFormat.GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:
                return(VkFormat.Astc5x5SrgbBlock);

            case GlInternalFormat.GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:
                return(VkFormat.Astc6x5SrgbBlock);

            case GlInternalFormat.GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:
                return(VkFormat.Astc6x6SrgbBlock);

            case GlInternalFormat.GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:
                return(VkFormat.Astc8x5SrgbBlock);

            case GlInternalFormat.GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:
                return(VkFormat.Astc8x6SrgbBlock);

            case GlInternalFormat.GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:
                return(VkFormat.Astc8x8SrgbBlock);

            case GlInternalFormat.GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:
                return(VkFormat.Astc10x5SrgbBlock);

            case GlInternalFormat.GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:
                return(VkFormat.Astc10x6SrgbBlock);

            case GlInternalFormat.GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:
                return(VkFormat.Astc10x8SrgbBlock);

            case GlInternalFormat.GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:
                return(VkFormat.Astc10x10SrgbBlock);

            case GlInternalFormat.GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:
                return(VkFormat.Astc12x10SrgbBlock);

            case GlInternalFormat.GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:
                return(VkFormat.Astc12x12SrgbBlock);

            default: return(VkFormat.Undefined);
            }
        }