TextureResource.cpp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #include "anki/resource/TextureResource.h"
  2. #include "anki/resource/Image.h"
  3. #include "anki/util/Exception.h"
  4. namespace anki {
  5. //==============================================================================
  6. void TextureResource::load(const char* filename)
  7. {
  8. try
  9. {
  10. load(Image(filename));
  11. }
  12. catch(std::exception& e)
  13. {
  14. throw ANKI_EXCEPTION("File \"" + filename + "\"") << e;
  15. }
  16. }
  17. //==============================================================================
  18. void TextureResource::load(const Image& img)
  19. {
  20. Initializer init;
  21. init.width = img.getWidth();
  22. init.height = img.getHeight();
  23. init.dataSize = img.getDataSize();
  24. bool compressionEnabled =
  25. TextureManagerSingleton::get().getCompressionEnabled();
  26. switch(img.getColorType())
  27. {
  28. case Image::CT_R:
  29. init.internalFormat = (compressionEnabled)
  30. ? GL_COMPRESSED_RED : GL_RED;
  31. init.format = GL_RED;
  32. init.type = GL_UNSIGNED_BYTE;
  33. break;
  34. case Image::CT_RGB:
  35. init.internalFormat = (compressionEnabled)
  36. ? GL_COMPRESSED_RGB : GL_RGB;
  37. init.format = GL_RGB;
  38. init.type = GL_UNSIGNED_BYTE;
  39. break;
  40. case Image::CT_RGBA:
  41. init.internalFormat = (compressionEnabled)
  42. ? GL_COMPRESSED_RGBA : GL_RGBA;
  43. init.format = GL_RGBA;
  44. init.type = GL_UNSIGNED_BYTE;
  45. break;
  46. default:
  47. ANKI_ASSERT(0);
  48. }
  49. switch(img.getDataCompression())
  50. {
  51. case Image::DC_NONE:
  52. break;
  53. case Image::DC_DXT1:
  54. init.internalFormat = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT;
  55. break;
  56. case Image::DC_DXT3:
  57. init.internalFormat = GL_COMPRESSED_RGBA_S3TC_DXT3_EXT;
  58. break;
  59. case Image::DC_DXT5:
  60. init.internalFormat = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT;
  61. break;
  62. }
  63. init.data = img.getData();
  64. init.mipmapping = TextureManagerSingleton::get().getMipmappingEnabled();
  65. init.filteringType = init.mipmapping ? TFT_TRILINEAR : TFT_LINEAR;
  66. init.repeat = true;
  67. init.anisotropyLevel = TextureManagerSingleton::get().getAnisotropyLevel();
  68. create(init);
  69. }
  70. } // end namespace