2
0

r3d_material.c 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /* r3d_material.h -- R3D Material Module.
  2. *
  3. * Copyright (c) 2025 Le Juez Victor
  4. *
  5. * This software is provided 'as-is', without any express or implied warranty.
  6. * For conditions of distribution and use, see accompanying LICENSE file.
  7. */
  8. #include <r3d/r3d_material.h>
  9. #include <r3d/r3d_utils.h>
  10. #include <glad.h>
  11. #include "./modules/r3d_texture.h"
  12. // ========================================
  13. // PUBLIC API
  14. // ========================================
  15. R3D_Material R3D_GetDefaultMaterial(void)
  16. {
  17. R3D_Material material = { 0 };
  18. // Albedo map
  19. material.albedo.texture = R3D_GetWhiteTexture();
  20. material.albedo.color = WHITE;
  21. // Emission map
  22. material.emission.texture = R3D_GetWhiteTexture();
  23. material.emission.color = WHITE;
  24. material.emission.energy = 0.0f;
  25. // Normal map
  26. material.normal.texture = R3D_GetNormalTexture();
  27. material.normal.scale = 1.0f;
  28. // ORM map
  29. material.orm.texture = R3D_GetWhiteTexture();
  30. material.orm.occlusion = 1.0f;
  31. material.orm.roughness = 1.0f;
  32. material.orm.metalness = 0.0f;
  33. // Misc
  34. material.transparencyMode = R3D_TRANSPARENCY_DISABLED;
  35. material.billboardMode = R3D_BILLBOARD_DISABLED;
  36. material.blendMode = R3D_BLEND_MIX;
  37. material.cullMode = R3D_CULL_BACK;
  38. material.uvOffset = (Vector2) {0.0f, 0.0f};
  39. material.uvScale = (Vector2) {1.0f, 1.0f};
  40. material.alphaCutoff = 0.01f;
  41. return material;
  42. }
  43. void R3D_UnloadMaterial(const R3D_Material* material)
  44. {
  45. #define UNLOAD_TEXTURE_IF_VALID(id) \
  46. do { \
  47. if ((id) != 0 && !r3d_texture_is_default(id)) { \
  48. glDeleteTextures(1, &id); \
  49. } \
  50. } while (0)
  51. UNLOAD_TEXTURE_IF_VALID(material->albedo.texture.id);
  52. UNLOAD_TEXTURE_IF_VALID(material->emission.texture.id);
  53. UNLOAD_TEXTURE_IF_VALID(material->normal.texture.id);
  54. UNLOAD_TEXTURE_IF_VALID(material->orm.texture.id);
  55. #undef UNLOAD_TEXTURE_IF_VALID
  56. }