use crate::sys;
use bitflags::bitflags;
use std::{
convert::TryFrom,
error::Error,
ffi::CStr,
fmt::{Display, Formatter},
};
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
#[repr(u32)]
pub enum KtxError {
FileDataError = sys::ktx_error_code_e_KTX_FILE_DATA_ERROR,
FileIsPipe = sys::ktx_error_code_e_KTX_FILE_ISPIPE,
FileOpenFailed = sys::ktx_error_code_e_KTX_FILE_OPEN_FAILED,
FileOverflow = sys::ktx_error_code_e_KTX_FILE_OVERFLOW,
FileReadError = sys::ktx_error_code_e_KTX_FILE_READ_ERROR,
FileSeekError = sys::ktx_error_code_e_KTX_FILE_SEEK_ERROR,
FileUnexpectedEof = sys::ktx_error_code_e_KTX_FILE_UNEXPECTED_EOF,
FileWriteError = sys::ktx_error_code_e_KTX_FILE_WRITE_ERROR,
GlError = sys::ktx_error_code_e_KTX_GL_ERROR,
InvalidOperation = sys::ktx_error_code_e_KTX_INVALID_OPERATION,
InvalidValue = sys::ktx_error_code_e_KTX_INVALID_VALUE,
NotFound = sys::ktx_error_code_e_KTX_NOT_FOUND,
OutOfMemory = sys::ktx_error_code_e_KTX_OUT_OF_MEMORY,
TranscodeFailed = sys::ktx_error_code_e_KTX_TRANSCODE_FAILED,
UnknownFileFormat = sys::ktx_error_code_e_KTX_UNKNOWN_FILE_FORMAT,
UnsupportedTextureType = sys::ktx_error_code_e_KTX_UNSUPPORTED_TEXTURE_TYPE,
UnsupportedFeature = sys::ktx_error_code_e_KTX_UNSUPPORTED_FEATURE,
LibraryNotLinked = sys::ktx_error_code_e_KTX_LIBRARY_NOT_LINKED,
}
impl TryFrom<u32> for KtxError {
type Error = &'static str;
fn try_from(value: u32) -> Result<Self, Self::Error> {
Ok(match value {
sys::ktx_error_code_e_KTX_FILE_DATA_ERROR => Self::FileDataError,
sys::ktx_error_code_e_KTX_FILE_ISPIPE => Self::FileIsPipe,
sys::ktx_error_code_e_KTX_FILE_OPEN_FAILED => Self::FileOpenFailed,
sys::ktx_error_code_e_KTX_FILE_OVERFLOW => Self::FileOverflow,
sys::ktx_error_code_e_KTX_FILE_READ_ERROR => Self::FileReadError,
sys::ktx_error_code_e_KTX_FILE_SEEK_ERROR => Self::FileSeekError,
sys::ktx_error_code_e_KTX_FILE_UNEXPECTED_EOF => Self::FileUnexpectedEof,
sys::ktx_error_code_e_KTX_FILE_WRITE_ERROR => Self::FileWriteError,
sys::ktx_error_code_e_KTX_GL_ERROR => Self::GlError,
sys::ktx_error_code_e_KTX_INVALID_OPERATION => Self::InvalidOperation,
sys::ktx_error_code_e_KTX_INVALID_VALUE => Self::InvalidValue,
sys::ktx_error_code_e_KTX_NOT_FOUND => Self::NotFound,
sys::ktx_error_code_e_KTX_OUT_OF_MEMORY => Self::OutOfMemory,
sys::ktx_error_code_e_KTX_TRANSCODE_FAILED => Self::TranscodeFailed,
sys::ktx_error_code_e_KTX_UNKNOWN_FILE_FORMAT => Self::UnknownFileFormat,
sys::ktx_error_code_e_KTX_UNSUPPORTED_TEXTURE_TYPE => Self::UnsupportedTextureType,
sys::ktx_error_code_e_KTX_UNSUPPORTED_FEATURE => Self::UnsupportedFeature,
sys::ktx_error_code_e_KTX_LIBRARY_NOT_LINKED => Self::LibraryNotLinked,
_ => return Err("Not a KTX_ error variant"),
})
}
}
impl Display for KtxError {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
let c_str = unsafe { CStr::from_ptr(sys::ktxErrorString(*self as u32)) };
match c_str.to_str() {
Ok(msg) => write!(f, "{}", msg),
_ => Err(std::fmt::Error),
}
}
}
impl Error for KtxError {}
pub(crate) fn ktx_result<T>(errcode: sys::ktx_error_code_e, ok: T) -> Result<T, KtxError> {
if errcode == sys::ktx_error_code_e_KTX_SUCCESS {
Ok(ok)
} else {
Err(KtxError::try_from(errcode as u32).unwrap_or(KtxError::InvalidValue))
}
}
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
pub enum SuperCompressionScheme {
None,
BasisLZ,
ZStd,
Vendor(u32),
}
impl Default for SuperCompressionScheme {
fn default() -> Self {
SuperCompressionScheme::None
}
}
impl From<SuperCompressionScheme> for u32 {
fn from(scheme: SuperCompressionScheme) -> Self {
match scheme {
SuperCompressionScheme::None => sys::ktxSupercmpScheme_KTX_SS_NONE,
SuperCompressionScheme::BasisLZ => sys::ktxSupercmpScheme_KTX_SUPERCOMPRESSION_BASIS,
SuperCompressionScheme::ZStd => sys::ktxSupercmpScheme_KTX_SUPERCOMPRESSION_ZSTD,
SuperCompressionScheme::Vendor(value) => value,
}
}
}
impl From<u32> for SuperCompressionScheme {
fn from(scheme: u32) -> Self {
match scheme {
sys::ktxSupercmpScheme_KTX_SS_NONE => SuperCompressionScheme::None,
sys::ktxSupercmpScheme_KTX_SUPERCOMPRESSION_BASIS => SuperCompressionScheme::BasisLZ,
sys::ktxSupercmpScheme_KTX_SUPERCOMPRESSION_ZSTD => SuperCompressionScheme::ZStd,
other => SuperCompressionScheme::Vendor(other),
}
}
}
impl Display for SuperCompressionScheme {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
let c_str = unsafe { CStr::from_ptr(sys::ktxSupercompressionSchemeString((*self).into())) };
match c_str.to_str() {
Ok(msg) => write!(f, "{}", msg),
_ => Err(std::fmt::Error),
}
}
}
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
#[repr(u32)]
pub enum CreateStorage {
NoStorage = sys::ktxTextureCreateStorageEnum_KTX_TEXTURE_CREATE_NO_STORAGE,
AllocStorage = sys::ktxTextureCreateStorageEnum_KTX_TEXTURE_CREATE_ALLOC_STORAGE,
}
bitflags! {
#[derive(Default)]
pub struct TextureCreateFlags: u32 {
const LOAD_IMAGE_DATA = sys::ktxTextureCreateFlagBits_KTX_TEXTURE_CREATE_LOAD_IMAGE_DATA_BIT;
const RAW_KVDATA = sys::ktxTextureCreateFlagBits_KTX_TEXTURE_CREATE_RAW_KVDATA_BIT;
const SKIP_KVDATA = sys::ktxTextureCreateFlagBits_KTX_TEXTURE_CREATE_SKIP_KVDATA_BIT;
}
}
bitflags! {
pub struct PackUastcFlags: u32 {
const LEVEL_FASTEST = sys::ktx_pack_uastc_flag_bits_e_KTX_PACK_UASTC_LEVEL_FASTEST;
const LEVEL_FASTER = sys::ktx_pack_uastc_flag_bits_e_KTX_PACK_UASTC_LEVEL_FASTER;
const LEVEL_DEFAULT = sys::ktx_pack_uastc_flag_bits_e_KTX_PACK_UASTC_LEVEL_DEFAULT;
const LEVEL_SLOWER = sys::ktx_pack_uastc_flag_bits_e_KTX_PACK_UASTC_LEVEL_SLOWER;
const LEVEL_VERYSLOW = sys::ktx_pack_uastc_flag_bits_e_KTX_PACK_UASTC_LEVEL_VERYSLOW;
const LEVEL_MASK = sys::ktx_pack_uastc_flag_bits_e_KTX_PACK_UASTC_LEVEL_MASK;
const FAVOR_UASTC_ERROR = sys::ktx_pack_uastc_flag_bits_e_KTX_PACK_UASTC_FAVOR_UASTC_ERROR;
const FAVOR_BC7_ERROR = sys::ktx_pack_uastc_flag_bits_e_KTX_PACK_UASTC_FAVOR_BC7_ERROR;
const ETC1_FASTER_HINTS = sys::ktx_pack_uastc_flag_bits_e_KTX_PACK_UASTC_ETC1_FASTER_HINTS;
const ETC1_FASTEST_HINTS = sys::ktx_pack_uastc_flag_bits_e_KTX_PACK_UASTC_ETC1_FASTEST_HINTS;
const _ETC1_DISABLE_FLIP_AND_INDIVIDUAL = sys::ktx_pack_uastc_flag_bits_e_KTX_PACK_UASTC__ETC1_DISABLE_FLIP_AND_INDIVIDUAL;
}
}
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
#[repr(u32)]
pub enum TranscodeFormat {
Etc1Rgb = sys::ktx_transcode_fmt_e_KTX_TTF_ETC1_RGB,
Etc2Rgba = sys::ktx_transcode_fmt_e_KTX_TTF_ETC2_RGBA,
Bc1Rgb = sys::ktx_transcode_fmt_e_KTX_TTF_BC1_RGB,
Bc3Rgba = sys::ktx_transcode_fmt_e_KTX_TTF_BC3_RGBA,
Bc3R = sys::ktx_transcode_fmt_e_KTX_TTF_BC4_R,
Bc5Rg = sys::ktx_transcode_fmt_e_KTX_TTF_BC5_RG,
Bc7Rgba = sys::ktx_transcode_fmt_e_KTX_TTF_BC7_RGBA,
Pvrtc14Rgb = sys::ktx_transcode_fmt_e_KTX_TTF_PVRTC1_4_RGB,
Pvrtc14Rgba = sys::ktx_transcode_fmt_e_KTX_TTF_PVRTC1_4_RGBA,
Astc4x4Rgba = sys::ktx_transcode_fmt_e_KTX_TTF_ASTC_4x4_RGBA,
Pvrtc24Rgb = sys::ktx_transcode_fmt_e_KTX_TTF_PVRTC2_4_RGB,
Pvrtc24Rgba = sys::ktx_transcode_fmt_e_KTX_TTF_PVRTC2_4_RGBA,
Etc2EacR11 = sys::ktx_transcode_fmt_e_KTX_TTF_ETC2_EAC_R11,
Etc2EacRg11 = sys::ktx_transcode_fmt_e_KTX_TTF_ETC2_EAC_RG11,
Rgba32 = sys::ktx_transcode_fmt_e_KTX_TTF_RGBA32,
Rgb565 = sys::ktx_transcode_fmt_e_KTX_TTF_RGB565,
Bgr565 = sys::ktx_transcode_fmt_e_KTX_TTF_BGR565,
Rgba4444 = sys::ktx_transcode_fmt_e_KTX_TTF_RGBA4444,
Etc = sys::ktx_transcode_fmt_e_KTX_TTF_ETC,
Bc1or3 = sys::ktx_transcode_fmt_e_KTX_TTF_BC1_OR_3,
NoSelection = sys::ktx_transcode_fmt_e_KTX_TTF_NOSELECTION,
}
impl TryFrom<u32> for TranscodeFormat {
type Error = &'static str;
fn try_from(value: u32) -> Result<Self, Self::Error> {
Ok(match value {
sys::ktx_transcode_fmt_e_KTX_TTF_ETC1_RGB => Self::Etc1Rgb,
sys::ktx_transcode_fmt_e_KTX_TTF_ETC2_RGBA => Self::Etc2Rgba,
sys::ktx_transcode_fmt_e_KTX_TTF_BC1_RGB => Self::Bc1Rgb,
sys::ktx_transcode_fmt_e_KTX_TTF_BC3_RGBA => Self::Bc3Rgba,
sys::ktx_transcode_fmt_e_KTX_TTF_BC4_R => Self::Bc3R,
sys::ktx_transcode_fmt_e_KTX_TTF_BC5_RG => Self::Bc5Rg,
sys::ktx_transcode_fmt_e_KTX_TTF_BC7_RGBA => Self::Bc7Rgba,
sys::ktx_transcode_fmt_e_KTX_TTF_PVRTC1_4_RGB => Self::Pvrtc14Rgb,
sys::ktx_transcode_fmt_e_KTX_TTF_PVRTC1_4_RGBA => Self::Pvrtc14Rgba,
sys::ktx_transcode_fmt_e_KTX_TTF_ASTC_4x4_RGBA => Self::Astc4x4Rgba,
sys::ktx_transcode_fmt_e_KTX_TTF_PVRTC2_4_RGB => Self::Pvrtc24Rgb,
sys::ktx_transcode_fmt_e_KTX_TTF_PVRTC2_4_RGBA => Self::Pvrtc24Rgba,
sys::ktx_transcode_fmt_e_KTX_TTF_ETC2_EAC_R11 => Self::Etc2EacR11,
sys::ktx_transcode_fmt_e_KTX_TTF_ETC2_EAC_RG11 => Self::Etc2EacRg11,
sys::ktx_transcode_fmt_e_KTX_TTF_RGBA32 => Self::Rgba32,
sys::ktx_transcode_fmt_e_KTX_TTF_RGB565 => Self::Rgb565,
sys::ktx_transcode_fmt_e_KTX_TTF_BGR565 => Self::Bgr565,
sys::ktx_transcode_fmt_e_KTX_TTF_RGBA4444 => Self::Rgba4444,
sys::ktx_transcode_fmt_e_KTX_TTF_ETC => Self::Etc,
sys::ktx_transcode_fmt_e_KTX_TTF_BC1_OR_3 => Self::Bc1or3,
sys::ktx_transcode_fmt_e_KTX_TTF_NOSELECTION => Self::NoSelection,
_ => return Err("Not a KTX_ error variant"),
})
}
}
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
#[repr(u32)]
pub enum PackAstcQualityLevel {
Fastest = sys::ktx_pack_astc_quality_levels_e_KTX_PACK_ASTC_QUALITY_LEVEL_FASTEST,
Fast = sys::ktx_pack_astc_quality_levels_e_KTX_PACK_ASTC_QUALITY_LEVEL_FAST,
Medium = sys::ktx_pack_astc_quality_levels_e_KTX_PACK_ASTC_QUALITY_LEVEL_MEDIUM,
Thorough = sys::ktx_pack_astc_quality_levels_e_KTX_PACK_ASTC_QUALITY_LEVEL_THOROUGH,
Exhaustive = sys::ktx_pack_astc_quality_levels_e_KTX_PACK_ASTC_QUALITY_LEVEL_EXHAUSTIVE,
}
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
#[repr(u32)]
pub enum PackAstcBlockDimension {
Dim4x4 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_4x4,
Dim5x4 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_5x4,
Dim5x5 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_5x5,
Dim6x5 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_6x5,
Dim6x6 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_6x6,
Dim8x5 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_8x5,
Dim8x6 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_8x6,
Dim10x5 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_10x5,
Dim10x6 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_10x6,
Dim8x8 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_8x8,
Dim10x8 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_10x8,
Dim10x10 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_10x10,
Dim12x10 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_12x10,
Dim12x12 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_12x12,
Dim3x3x3 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_3x3x3,
Dim4x3x3 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_4x3x3,
Dim4x4x3 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_4x4x3,
Dim4x4x4 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_4x4x4,
Dim5x4x4 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_5x4x4,
Dim5x5x4 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_5x5x4,
Dim5x5x5 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_5x5x5,
Dim6x5x5 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_6x5x5,
Dim6x6x5 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_6x6x5,
Dim6x6x6 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_6x6x6,
}
impl TryFrom<u32> for PackAstcBlockDimension {
type Error = &'static str;
fn try_from(value: u32) -> Result<Self, Self::Error> {
Ok(match value {
sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_4x4 => Self::Dim4x4,
sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_5x4 => Self::Dim5x4,
sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_5x5 => Self::Dim5x5,
sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_6x5 => Self::Dim6x5,
sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_6x6 => Self::Dim6x6,
sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_8x5 => Self::Dim8x5,
sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_8x6 => Self::Dim8x6,
sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_10x5 => {
Self::Dim10x5
}
sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_10x6 => {
Self::Dim10x6
}
sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_8x8 => Self::Dim8x8,
sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_10x8 => {
Self::Dim10x8
}
sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_10x10 => {
Self::Dim10x10
}
sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_12x10 => {
Self::Dim12x10
}
sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_12x12 => {
Self::Dim12x12
}
sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_3x3x3 => {
Self::Dim3x3x3
}
sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_4x3x3 => {
Self::Dim4x3x3
}
sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_4x4x3 => {
Self::Dim4x4x3
}
sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_4x4x4 => {
Self::Dim4x4x4
}
sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_5x4x4 => {
Self::Dim5x4x4
}
sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_5x5x4 => {
Self::Dim5x5x4
}
sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_5x5x5 => {
Self::Dim5x5x5
}
sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_6x5x5 => {
Self::Dim6x5x5
}
sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_6x6x5 => {
Self::Dim6x6x5
}
sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_6x6x6 => {
Self::Dim6x6x6
}
_ => return Err("Not a ASTC block dimension enumerant"),
})
}
}
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
#[repr(u32)]
pub enum PackAstcEncoderFunction {
Unknown = sys::ktx_pack_astc_encoder_function_e_KTX_PACK_ASTC_ENCODER_FUNCTION_UNKNOWN,
Srgb = sys::ktx_pack_astc_encoder_function_e_KTX_PACK_ASTC_ENCODER_FUNCTION_SRGB,
Linear = sys::ktx_pack_astc_encoder_function_e_KTX_PACK_ASTC_ENCODER_FUNCTION_LINEAR,
}
impl TryFrom<u32> for PackAstcEncoderFunction {
type Error = &'static str;
fn try_from(value: u32) -> Result<Self, Self::Error> {
Ok(match value {
sys::ktx_pack_astc_encoder_function_e_KTX_PACK_ASTC_ENCODER_FUNCTION_UNKNOWN => {
Self::Unknown
}
sys::ktx_pack_astc_encoder_function_e_KTX_PACK_ASTC_ENCODER_FUNCTION_SRGB => Self::Srgb,
sys::ktx_pack_astc_encoder_function_e_KTX_PACK_ASTC_ENCODER_FUNCTION_LINEAR => {
Self::Linear
}
_ => return Err("Not a ASTC encoder function enumerant"),
})
}
}
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
#[repr(u32)]
pub enum PackAstcEncoderMode {
Default = sys::ktx_pack_astc_encoder_mode_e_KTX_PACK_ASTC_ENCODER_MODE_DEFAULT,
Ldr = sys::ktx_pack_astc_encoder_mode_e_KTX_PACK_ASTC_ENCODER_MODE_LDR,
Hdr = sys::ktx_pack_astc_encoder_mode_e_KTX_PACK_ASTC_ENCODER_MODE_HDR,
}
impl TryFrom<u32> for PackAstcEncoderMode {
type Error = &'static str;
fn try_from(value: u32) -> Result<Self, Self::Error> {
Ok(match value {
sys::ktx_pack_astc_encoder_mode_e_KTX_PACK_ASTC_ENCODER_MODE_DEFAULT => Self::Default,
sys::ktx_pack_astc_encoder_mode_e_KTX_PACK_ASTC_ENCODER_MODE_LDR => Self::Ldr,
sys::ktx_pack_astc_encoder_mode_e_KTX_PACK_ASTC_ENCODER_MODE_HDR => Self::Hdr,
_ => return Err("Not a ASTC encoder mode enumerant"),
})
}
}
bitflags! {
#[derive(Default)]
pub struct TranscodeFlags: u32 {
const PVRTC_DECODE_TO_NEXT_POW2 = sys::ktx_transcode_flag_bits_e_KTX_TF_PVRTC_DECODE_TO_NEXT_POW2;
const TRANSCODE_ALPHA_DATA_TO_OPAQUE_FORMATS = sys::ktx_transcode_flag_bits_e_KTX_TF_TRANSCODE_ALPHA_DATA_TO_OPAQUE_FORMATS;
const HIGH_QUALITY = sys::ktx_transcode_flag_bits_e_KTX_TF_HIGH_QUALITY;
}
}