1use crate::sys;
7use bitflags::bitflags;
8use std::{
9 convert::TryFrom,
10 error::Error,
11 ffi::CStr,
12 fmt::{Display, Formatter},
13};
14
15#[derive(Debug, Copy, Clone, Eq, PartialEq)]
19#[repr(u32)]
20pub enum KtxError {
21 FileDataError = sys::ktx_error_code_e_KTX_FILE_DATA_ERROR,
22 FileIsPipe = sys::ktx_error_code_e_KTX_FILE_ISPIPE,
23 FileOpenFailed = sys::ktx_error_code_e_KTX_FILE_OPEN_FAILED,
24 FileOverflow = sys::ktx_error_code_e_KTX_FILE_OVERFLOW,
25 FileReadError = sys::ktx_error_code_e_KTX_FILE_READ_ERROR,
26 FileSeekError = sys::ktx_error_code_e_KTX_FILE_SEEK_ERROR,
27 FileUnexpectedEof = sys::ktx_error_code_e_KTX_FILE_UNEXPECTED_EOF,
28 FileWriteError = sys::ktx_error_code_e_KTX_FILE_WRITE_ERROR,
29 GlError = sys::ktx_error_code_e_KTX_GL_ERROR,
30 InvalidOperation = sys::ktx_error_code_e_KTX_INVALID_OPERATION,
31 InvalidValue = sys::ktx_error_code_e_KTX_INVALID_VALUE,
32 NotFound = sys::ktx_error_code_e_KTX_NOT_FOUND,
33 OutOfMemory = sys::ktx_error_code_e_KTX_OUT_OF_MEMORY,
34 TranscodeFailed = sys::ktx_error_code_e_KTX_TRANSCODE_FAILED,
35 UnknownFileFormat = sys::ktx_error_code_e_KTX_UNKNOWN_FILE_FORMAT,
36 UnsupportedTextureType = sys::ktx_error_code_e_KTX_UNSUPPORTED_TEXTURE_TYPE,
37 UnsupportedFeature = sys::ktx_error_code_e_KTX_UNSUPPORTED_FEATURE,
38 LibraryNotLinked = sys::ktx_error_code_e_KTX_LIBRARY_NOT_LINKED,
39}
40
41impl TryFrom<u32> for KtxError {
42 type Error = &'static str;
43
44 fn try_from(value: u32) -> Result<Self, Self::Error> {
45 Ok(match value {
47 sys::ktx_error_code_e_KTX_FILE_DATA_ERROR => Self::FileDataError,
48 sys::ktx_error_code_e_KTX_FILE_ISPIPE => Self::FileIsPipe,
49 sys::ktx_error_code_e_KTX_FILE_OPEN_FAILED => Self::FileOpenFailed,
50 sys::ktx_error_code_e_KTX_FILE_OVERFLOW => Self::FileOverflow,
51 sys::ktx_error_code_e_KTX_FILE_READ_ERROR => Self::FileReadError,
52 sys::ktx_error_code_e_KTX_FILE_SEEK_ERROR => Self::FileSeekError,
53 sys::ktx_error_code_e_KTX_FILE_UNEXPECTED_EOF => Self::FileUnexpectedEof,
54 sys::ktx_error_code_e_KTX_FILE_WRITE_ERROR => Self::FileWriteError,
55 sys::ktx_error_code_e_KTX_GL_ERROR => Self::GlError,
56 sys::ktx_error_code_e_KTX_INVALID_OPERATION => Self::InvalidOperation,
57 sys::ktx_error_code_e_KTX_INVALID_VALUE => Self::InvalidValue,
58 sys::ktx_error_code_e_KTX_NOT_FOUND => Self::NotFound,
59 sys::ktx_error_code_e_KTX_OUT_OF_MEMORY => Self::OutOfMemory,
60 sys::ktx_error_code_e_KTX_TRANSCODE_FAILED => Self::TranscodeFailed,
61 sys::ktx_error_code_e_KTX_UNKNOWN_FILE_FORMAT => Self::UnknownFileFormat,
62 sys::ktx_error_code_e_KTX_UNSUPPORTED_TEXTURE_TYPE => Self::UnsupportedTextureType,
63 sys::ktx_error_code_e_KTX_UNSUPPORTED_FEATURE => Self::UnsupportedFeature,
64 sys::ktx_error_code_e_KTX_LIBRARY_NOT_LINKED => Self::LibraryNotLinked,
65 _ => return Err("Not a KTX_ error variant"),
66 })
67 }
68}
69
70impl Display for KtxError {
71 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
72 let c_str = unsafe { CStr::from_ptr(sys::ktxErrorString(*self as u32)) };
74 match c_str.to_str() {
75 Ok(msg) => write!(f, "{}", msg),
76 _ => Err(std::fmt::Error),
77 }
78 }
79}
80
81impl Error for KtxError {}
82
83pub(crate) fn ktx_result<T>(errcode: sys::ktx_error_code_e, ok: T) -> Result<T, KtxError> {
84 if errcode == sys::ktx_error_code_e_KTX_SUCCESS {
85 Ok(ok)
86 } else {
87 Err(KtxError::try_from(errcode as u32).unwrap_or(KtxError::InvalidValue))
88 }
89}
90
91#[derive(Debug, Copy, Clone, Eq, PartialEq)]
95pub enum SuperCompressionScheme {
96 None,
97 BasisLZ,
98 ZStd,
99 Vendor(u32),
100}
101
102impl Default for SuperCompressionScheme {
103 fn default() -> Self {
104 SuperCompressionScheme::None
105 }
106}
107
108impl From<SuperCompressionScheme> for u32 {
109 fn from(scheme: SuperCompressionScheme) -> Self {
110 match scheme {
111 SuperCompressionScheme::None => sys::ktxSupercmpScheme_KTX_SS_NONE,
112 SuperCompressionScheme::BasisLZ => sys::ktxSupercmpScheme_KTX_SUPERCOMPRESSION_BASIS,
113 SuperCompressionScheme::ZStd => sys::ktxSupercmpScheme_KTX_SUPERCOMPRESSION_ZSTD,
114 SuperCompressionScheme::Vendor(value) => value,
115 }
116 }
117}
118
119impl From<u32> for SuperCompressionScheme {
120 fn from(scheme: u32) -> Self {
121 match scheme {
122 sys::ktxSupercmpScheme_KTX_SS_NONE => SuperCompressionScheme::None,
123 sys::ktxSupercmpScheme_KTX_SUPERCOMPRESSION_BASIS => SuperCompressionScheme::BasisLZ,
124 sys::ktxSupercmpScheme_KTX_SUPERCOMPRESSION_ZSTD => SuperCompressionScheme::ZStd,
125 other => SuperCompressionScheme::Vendor(other),
126 }
127 }
128}
129
130impl Display for SuperCompressionScheme {
131 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
132 let c_str = unsafe { CStr::from_ptr(sys::ktxSupercompressionSchemeString((*self).into())) };
134 match c_str.to_str() {
135 Ok(msg) => write!(f, "{}", msg),
136 _ => Err(std::fmt::Error),
137 }
138 }
139}
140
141#[derive(Debug, Copy, Clone, Eq, PartialEq)]
145#[repr(u32)]
146pub enum CreateStorage {
147 NoStorage = sys::ktxTextureCreateStorageEnum_KTX_TEXTURE_CREATE_NO_STORAGE,
148 AllocStorage = sys::ktxTextureCreateStorageEnum_KTX_TEXTURE_CREATE_ALLOC_STORAGE,
149}
150
151bitflags! {
152 #[derive(Default)]
156 pub struct TextureCreateFlags: u32 {
157 const LOAD_IMAGE_DATA = sys::ktxTextureCreateFlagBits_KTX_TEXTURE_CREATE_LOAD_IMAGE_DATA_BIT;
158 const RAW_KVDATA = sys::ktxTextureCreateFlagBits_KTX_TEXTURE_CREATE_RAW_KVDATA_BIT;
159 const SKIP_KVDATA = sys::ktxTextureCreateFlagBits_KTX_TEXTURE_CREATE_SKIP_KVDATA_BIT;
160 }
161}
162
163bitflags! {
164 pub struct PackUastcFlags: u32 {
165 const LEVEL_FASTEST = sys::ktx_pack_uastc_flag_bits_e_KTX_PACK_UASTC_LEVEL_FASTEST;
166 const LEVEL_FASTER = sys::ktx_pack_uastc_flag_bits_e_KTX_PACK_UASTC_LEVEL_FASTER;
167 const LEVEL_DEFAULT = sys::ktx_pack_uastc_flag_bits_e_KTX_PACK_UASTC_LEVEL_DEFAULT;
168 const LEVEL_SLOWER = sys::ktx_pack_uastc_flag_bits_e_KTX_PACK_UASTC_LEVEL_SLOWER;
169 const LEVEL_VERYSLOW = sys::ktx_pack_uastc_flag_bits_e_KTX_PACK_UASTC_LEVEL_VERYSLOW;
170 const LEVEL_MASK = sys::ktx_pack_uastc_flag_bits_e_KTX_PACK_UASTC_LEVEL_MASK;
171 const FAVOR_UASTC_ERROR = sys::ktx_pack_uastc_flag_bits_e_KTX_PACK_UASTC_FAVOR_UASTC_ERROR;
172 const FAVOR_BC7_ERROR = sys::ktx_pack_uastc_flag_bits_e_KTX_PACK_UASTC_FAVOR_BC7_ERROR;
173 const ETC1_FASTER_HINTS = sys::ktx_pack_uastc_flag_bits_e_KTX_PACK_UASTC_ETC1_FASTER_HINTS;
174 const ETC1_FASTEST_HINTS = sys::ktx_pack_uastc_flag_bits_e_KTX_PACK_UASTC_ETC1_FASTEST_HINTS;
175 const _ETC1_DISABLE_FLIP_AND_INDIVIDUAL = sys::ktx_pack_uastc_flag_bits_e_KTX_PACK_UASTC__ETC1_DISABLE_FLIP_AND_INDIVIDUAL;
176}
177}
178
179#[derive(Debug, Copy, Clone, Eq, PartialEq)]
183#[repr(u32)]
184pub enum TranscodeFormat {
185 Etc1Rgb = sys::ktx_transcode_fmt_e_KTX_TTF_ETC1_RGB,
187 Etc2Rgba = sys::ktx_transcode_fmt_e_KTX_TTF_ETC2_RGBA,
188 Bc1Rgb = sys::ktx_transcode_fmt_e_KTX_TTF_BC1_RGB,
190 Bc3Rgba = sys::ktx_transcode_fmt_e_KTX_TTF_BC3_RGBA,
191 Bc3R = sys::ktx_transcode_fmt_e_KTX_TTF_BC4_R,
192 Bc5Rg = sys::ktx_transcode_fmt_e_KTX_TTF_BC5_RG,
193 Bc7Rgba = sys::ktx_transcode_fmt_e_KTX_TTF_BC7_RGBA,
194 Pvrtc14Rgb = sys::ktx_transcode_fmt_e_KTX_TTF_PVRTC1_4_RGB,
196 Pvrtc14Rgba = sys::ktx_transcode_fmt_e_KTX_TTF_PVRTC1_4_RGBA,
197 Astc4x4Rgba = sys::ktx_transcode_fmt_e_KTX_TTF_ASTC_4x4_RGBA,
199 Pvrtc24Rgb = sys::ktx_transcode_fmt_e_KTX_TTF_PVRTC2_4_RGB,
201 Pvrtc24Rgba = sys::ktx_transcode_fmt_e_KTX_TTF_PVRTC2_4_RGBA,
202 Etc2EacR11 = sys::ktx_transcode_fmt_e_KTX_TTF_ETC2_EAC_R11,
204 Etc2EacRg11 = sys::ktx_transcode_fmt_e_KTX_TTF_ETC2_EAC_RG11,
205 Rgba32 = sys::ktx_transcode_fmt_e_KTX_TTF_RGBA32,
207 Rgb565 = sys::ktx_transcode_fmt_e_KTX_TTF_RGB565,
208 Bgr565 = sys::ktx_transcode_fmt_e_KTX_TTF_BGR565,
209 Rgba4444 = sys::ktx_transcode_fmt_e_KTX_TTF_RGBA4444,
210 Etc = sys::ktx_transcode_fmt_e_KTX_TTF_ETC,
212 Bc1or3 = sys::ktx_transcode_fmt_e_KTX_TTF_BC1_OR_3,
213 NoSelection = sys::ktx_transcode_fmt_e_KTX_TTF_NOSELECTION,
215}
216
217impl TryFrom<u32> for TranscodeFormat {
218 type Error = &'static str;
219
220 fn try_from(value: u32) -> Result<Self, Self::Error> {
221 Ok(match value {
223 sys::ktx_transcode_fmt_e_KTX_TTF_ETC1_RGB => Self::Etc1Rgb,
224 sys::ktx_transcode_fmt_e_KTX_TTF_ETC2_RGBA => Self::Etc2Rgba,
225 sys::ktx_transcode_fmt_e_KTX_TTF_BC1_RGB => Self::Bc1Rgb,
227 sys::ktx_transcode_fmt_e_KTX_TTF_BC3_RGBA => Self::Bc3Rgba,
228 sys::ktx_transcode_fmt_e_KTX_TTF_BC4_R => Self::Bc3R,
229 sys::ktx_transcode_fmt_e_KTX_TTF_BC5_RG => Self::Bc5Rg,
230 sys::ktx_transcode_fmt_e_KTX_TTF_BC7_RGBA => Self::Bc7Rgba,
231 sys::ktx_transcode_fmt_e_KTX_TTF_PVRTC1_4_RGB => Self::Pvrtc14Rgb,
233 sys::ktx_transcode_fmt_e_KTX_TTF_PVRTC1_4_RGBA => Self::Pvrtc14Rgba,
234 sys::ktx_transcode_fmt_e_KTX_TTF_ASTC_4x4_RGBA => Self::Astc4x4Rgba,
236 sys::ktx_transcode_fmt_e_KTX_TTF_PVRTC2_4_RGB => Self::Pvrtc24Rgb,
238 sys::ktx_transcode_fmt_e_KTX_TTF_PVRTC2_4_RGBA => Self::Pvrtc24Rgba,
239 sys::ktx_transcode_fmt_e_KTX_TTF_ETC2_EAC_R11 => Self::Etc2EacR11,
241 sys::ktx_transcode_fmt_e_KTX_TTF_ETC2_EAC_RG11 => Self::Etc2EacRg11,
242 sys::ktx_transcode_fmt_e_KTX_TTF_RGBA32 => Self::Rgba32,
244 sys::ktx_transcode_fmt_e_KTX_TTF_RGB565 => Self::Rgb565,
245 sys::ktx_transcode_fmt_e_KTX_TTF_BGR565 => Self::Bgr565,
246 sys::ktx_transcode_fmt_e_KTX_TTF_RGBA4444 => Self::Rgba4444,
247 sys::ktx_transcode_fmt_e_KTX_TTF_ETC => Self::Etc,
249 sys::ktx_transcode_fmt_e_KTX_TTF_BC1_OR_3 => Self::Bc1or3,
250 sys::ktx_transcode_fmt_e_KTX_TTF_NOSELECTION => Self::NoSelection,
252 _ => return Err("Not a KTX_ error variant"),
253 })
254 }
255}
256
257#[derive(Debug, Copy, Clone, Eq, PartialEq)]
261#[repr(u32)]
262pub enum PackAstcQualityLevel {
263 Fastest = sys::ktx_pack_astc_quality_levels_e_KTX_PACK_ASTC_QUALITY_LEVEL_FASTEST,
264 Fast = sys::ktx_pack_astc_quality_levels_e_KTX_PACK_ASTC_QUALITY_LEVEL_FAST,
265 Medium = sys::ktx_pack_astc_quality_levels_e_KTX_PACK_ASTC_QUALITY_LEVEL_MEDIUM,
266 Thorough = sys::ktx_pack_astc_quality_levels_e_KTX_PACK_ASTC_QUALITY_LEVEL_THOROUGH,
267 Exhaustive = sys::ktx_pack_astc_quality_levels_e_KTX_PACK_ASTC_QUALITY_LEVEL_EXHAUSTIVE,
268}
269
270#[derive(Debug, Copy, Clone, Eq, PartialEq)]
274#[repr(u32)]
275pub enum PackAstcBlockDimension {
276 Dim4x4 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_4x4,
278 Dim5x4 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_5x4,
280 Dim5x5 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_5x5,
282 Dim6x5 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_6x5,
284 Dim6x6 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_6x6,
286 Dim8x5 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_8x5,
288 Dim8x6 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_8x6,
290 Dim10x5 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_10x5,
292 Dim10x6 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_10x6,
294 Dim8x8 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_8x8,
296 Dim10x8 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_10x8,
298 Dim10x10 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_10x10,
300 Dim12x10 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_12x10,
302 Dim12x12 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_12x12,
304
305 Dim3x3x3 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_3x3x3,
307 Dim4x3x3 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_4x3x3,
309 Dim4x4x3 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_4x4x3,
311 Dim4x4x4 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_4x4x4,
313 Dim5x4x4 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_5x4x4,
315 Dim5x5x4 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_5x5x4,
317 Dim5x5x5 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_5x5x5,
319 Dim6x5x5 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_6x5x5,
321 Dim6x6x5 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_6x6x5,
323 Dim6x6x6 = sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_6x6x6,
325}
326
327impl TryFrom<u32> for PackAstcBlockDimension {
328 type Error = &'static str;
329
330 fn try_from(value: u32) -> Result<Self, Self::Error> {
331 Ok(match value {
333 sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_4x4 => Self::Dim4x4,
335 sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_5x4 => Self::Dim5x4,
336 sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_5x5 => Self::Dim5x5,
337 sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_6x5 => Self::Dim6x5,
338 sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_6x6 => Self::Dim6x6,
339 sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_8x5 => Self::Dim8x5,
340 sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_8x6 => Self::Dim8x6,
341 sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_10x5 => {
342 Self::Dim10x5
343 }
344 sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_10x6 => {
345 Self::Dim10x6
346 }
347 sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_8x8 => Self::Dim8x8,
348 sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_10x8 => {
349 Self::Dim10x8
350 }
351 sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_10x10 => {
352 Self::Dim10x10
353 }
354 sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_12x10 => {
355 Self::Dim12x10
356 }
357 sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_12x12 => {
358 Self::Dim12x12
359 }
360
361 sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_3x3x3 => {
363 Self::Dim3x3x3
364 }
365 sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_4x3x3 => {
366 Self::Dim4x3x3
367 }
368 sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_4x4x3 => {
369 Self::Dim4x4x3
370 }
371 sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_4x4x4 => {
372 Self::Dim4x4x4
373 }
374 sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_5x4x4 => {
375 Self::Dim5x4x4
376 }
377 sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_5x5x4 => {
378 Self::Dim5x5x4
379 }
380 sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_5x5x5 => {
381 Self::Dim5x5x5
382 }
383 sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_6x5x5 => {
384 Self::Dim6x5x5
385 }
386 sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_6x6x5 => {
387 Self::Dim6x6x5
388 }
389 sys::ktx_pack_astc_block_dimension_e_KTX_PACK_ASTC_BLOCK_DIMENSION_6x6x6 => {
390 Self::Dim6x6x6
391 }
392 _ => return Err("Not a ASTC block dimension enumerant"),
393 })
394 }
395}
396
397#[derive(Debug, Copy, Clone, Eq, PartialEq)]
401#[repr(u32)]
402pub enum PackAstcEncoderFunction {
403 Unknown = sys::ktx_pack_astc_encoder_function_e_KTX_PACK_ASTC_ENCODER_FUNCTION_UNKNOWN,
404 Srgb = sys::ktx_pack_astc_encoder_function_e_KTX_PACK_ASTC_ENCODER_FUNCTION_SRGB,
405 Linear = sys::ktx_pack_astc_encoder_function_e_KTX_PACK_ASTC_ENCODER_FUNCTION_LINEAR,
406}
407
408impl TryFrom<u32> for PackAstcEncoderFunction {
409 type Error = &'static str;
410
411 fn try_from(value: u32) -> Result<Self, Self::Error> {
412 Ok(match value {
413 sys::ktx_pack_astc_encoder_function_e_KTX_PACK_ASTC_ENCODER_FUNCTION_UNKNOWN => {
414 Self::Unknown
415 }
416 sys::ktx_pack_astc_encoder_function_e_KTX_PACK_ASTC_ENCODER_FUNCTION_SRGB => Self::Srgb,
417 sys::ktx_pack_astc_encoder_function_e_KTX_PACK_ASTC_ENCODER_FUNCTION_LINEAR => {
418 Self::Linear
419 }
420 _ => return Err("Not a ASTC encoder function enumerant"),
421 })
422 }
423}
424
425#[derive(Debug, Copy, Clone, Eq, PartialEq)]
429#[repr(u32)]
430pub enum PackAstcEncoderMode {
431 Default = sys::ktx_pack_astc_encoder_mode_e_KTX_PACK_ASTC_ENCODER_MODE_DEFAULT,
432 Ldr = sys::ktx_pack_astc_encoder_mode_e_KTX_PACK_ASTC_ENCODER_MODE_LDR,
433 Hdr = sys::ktx_pack_astc_encoder_mode_e_KTX_PACK_ASTC_ENCODER_MODE_HDR,
434}
435
436impl TryFrom<u32> for PackAstcEncoderMode {
437 type Error = &'static str;
438
439 fn try_from(value: u32) -> Result<Self, Self::Error> {
440 Ok(match value {
441 sys::ktx_pack_astc_encoder_mode_e_KTX_PACK_ASTC_ENCODER_MODE_DEFAULT => Self::Default,
442 sys::ktx_pack_astc_encoder_mode_e_KTX_PACK_ASTC_ENCODER_MODE_LDR => Self::Ldr,
443 sys::ktx_pack_astc_encoder_mode_e_KTX_PACK_ASTC_ENCODER_MODE_HDR => Self::Hdr,
444 _ => return Err("Not a ASTC encoder mode enumerant"),
445 })
446 }
447}
448
449bitflags! {
450 #[derive(Default)]
454 pub struct TranscodeFlags: u32 {
455 const PVRTC_DECODE_TO_NEXT_POW2 = sys::ktx_transcode_flag_bits_e_KTX_TF_PVRTC_DECODE_TO_NEXT_POW2;
456 const TRANSCODE_ALPHA_DATA_TO_OPAQUE_FORMATS = sys::ktx_transcode_flag_bits_e_KTX_TF_TRANSCODE_ALPHA_DATA_TO_OPAQUE_FORMATS;
457 const HIGH_QUALITY = sys::ktx_transcode_flag_bits_e_KTX_TF_HIGH_QUALITY;
458 }
459}