texture.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. /* -*- tab-width: 4; -*- */
  2. /* vi: set sw=2 ts=4 expandtab textwidth=70: */
  3. /*
  4. * Copyright 2019-2020 The Khronos Group Inc.
  5. * SPDX-License-Identifier: Apache-2.0
  6. */
  7. /**
  8. * @internal
  9. * @file texture.h
  10. * @~English
  11. *
  12. * @brief Declare internal ktxTexture functions for sharing between
  13. * compilation units.
  14. *
  15. * These functions are private and should not be used outside the library.
  16. */
  17. #ifndef _TEXTURE_H_
  18. #define _TEXTURE_H_
  19. #include "ktx.h"
  20. #include "formatsize.h"
  21. #define DECLARE_PRIVATE(class) class ## _private* private = This->_private
  22. #define DECLARE_PROTECTED(class) class ## _protected* prtctd = This->_protected;
  23. #ifdef __cplusplus
  24. extern "C" {
  25. #endif
  26. typedef enum {
  27. KTX_FORMAT_VERSION_ONE = 1,
  28. KTX_FORMAT_VERSION_TWO = 2
  29. } ktxFormatVersionEnum;
  30. typedef ktx_size_t (* PFNCALCDATASIZELEVELS)(ktxTexture* This,
  31. ktx_uint32_t levels);
  32. typedef ktx_size_t (* PFNCALCFACELODSIZE)(ktxTexture* This, ktx_uint32_t level);
  33. typedef ktx_size_t (* PFNCALCLEVELOFFSET)(ktxTexture* This, ktx_uint32_t level);
  34. typedef struct ktxTexture_vtblInt {
  35. PFNCALCDATASIZELEVELS calcDataSizeLevels;
  36. PFNCALCFACELODSIZE calcFaceLodSize;
  37. PFNCALCLEVELOFFSET calcLevelOffset;
  38. } ktxTexture_vtblInt;
  39. #define ktxTexture_calcDataSizeLevels(This, levels) \
  40. This->_protected->_vtbl.calcDataSizeLevels(This, levels);
  41. #define ktxTexture_calcFaceLodSize(This, level) \
  42. This->_protected->_vtbl.calcFaceLodSize(This, level);
  43. #define ktxTexture_calcLevelOffset(This, level) \
  44. This->_protected->_vtbl.calcLevelOffset(This, level);
  45. /**
  46. * @memberof ktxTexture
  47. * @~English
  48. *
  49. * @brief protected members of ktxTexture.
  50. */
  51. typedef struct ktxTexture_protected {
  52. ktxTexture_vtblInt _vtbl;
  53. ktxFormatSize _formatSize;
  54. ktx_uint32_t _typeSize;
  55. ktxStream _stream;
  56. } ktxTexture_protected;
  57. #define ktxTexture_getStream(t) ((ktxStream*)(&(t)->_protected->_stream))
  58. #define ktxTexture1_getStream(t1) ktxTexture_getStream((ktxTexture*)t1)
  59. #define ktxTexture2_getStream(t2) ktxTexture_getStream((ktxTexture*)t2)
  60. KTX_error_code
  61. ktxTexture_iterateLoadedImages(ktxTexture* This, PFNKTXITERCB iterCb,
  62. void* userdata);
  63. KTX_error_code
  64. ktxTexture_iterateSourceImages(ktxTexture* This, PFNKTXITERCB iterCb,
  65. void* userdata);
  66. ktx_size_t ktxTexture_calcDataSizeTexture(ktxTexture* This);
  67. ktx_size_t ktxTexture_calcImageSize(ktxTexture* This, ktx_uint32_t level,
  68. ktxFormatVersionEnum fv);
  69. ktx_bool_t ktxTexture_isActiveStream(ktxTexture* This);
  70. ktx_size_t ktxTexture_calcLevelSize(ktxTexture* This, ktx_uint32_t level,
  71. ktxFormatVersionEnum fv);
  72. ktx_size_t ktxTexture_doCalcFaceLodSize(ktxTexture* This, ktx_uint32_t level,
  73. ktxFormatVersionEnum fv);
  74. ktx_size_t ktxTexture_layerSize(ktxTexture* This, ktx_uint32_t level,
  75. ktxFormatVersionEnum fv);
  76. void ktxTexture_rowInfo(ktxTexture* This, ktx_uint32_t level,
  77. ktx_uint32_t* numRows, ktx_uint32_t* rowBytes,
  78. ktx_uint32_t* rowPadding);
  79. KTX_error_code
  80. ktxTexture_construct(ktxTexture* This, ktxTextureCreateInfo* createInfo,
  81. ktxFormatSize* formatSize);
  82. KTX_error_code
  83. ktxTexture_constructFromStream(ktxTexture* This, ktxStream* pStream,
  84. ktxTextureCreateFlags createFlags);
  85. void
  86. ktxTexture_destruct(ktxTexture* This);
  87. #ifdef __cplusplus
  88. }
  89. #endif
  90. #endif /* _TEXTURE_H_ */