bsp.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #pragma once
  2. #include "material.h"
  3. #include "render.h"
  4. #include "atto/math.h"
  5. struct Material;
  6. struct AABB { struct AVec3f min, max; };
  7. struct Plane { struct AVec3f n; float d; };
  8. struct BSPModelVertex {
  9. struct AVec3f vertex;
  10. struct AVec3f normal;
  11. struct AVec2f lightmap_uv;
  12. struct AVec2f tex_uv;
  13. };
  14. struct BSPDraw {
  15. const struct Material *material;
  16. unsigned int start, count;
  17. unsigned int vbo_offset;
  18. };
  19. /* TODO
  20. struct BSPNode {
  21. struct AABB aabb;
  22. struct {
  23. struct BSPDraw *p;
  24. unsigned n;
  25. } draw;
  26. struct Plane plane;
  27. int left, right;
  28. };
  29. */
  30. #define BSP_LANDMARK_NAME_LENGTH 64
  31. #define BSP_MAX_LANDMARKS 32
  32. struct BSPLandmark {
  33. char name[BSP_LANDMARK_NAME_LENGTH];
  34. struct AVec3f origin;
  35. };
  36. struct BSPModel {
  37. struct AABB aabb;
  38. RTexture lightmap;
  39. RBuffer vbo, ibo;
  40. int draws_count;
  41. struct BSPDraw *draws;
  42. struct BSPLandmark landmarks[BSP_MAX_LANDMARKS];
  43. int landmarks_count;
  44. struct AVec3f player_start;
  45. };
  46. struct ICollection;
  47. struct MemoryPool;
  48. struct Stack;
  49. struct BSPLoadModelContext {
  50. struct ICollection *collection;
  51. struct Stack *persistent;
  52. struct Stack *tmp;
  53. /* allocated by caller, populated by callee */
  54. struct BSPModel *model;
  55. };
  56. enum BSPLoadResult {
  57. BSPLoadResult_Success,
  58. BSPLoadResult_ErrorFileOpen,
  59. BSPLoadResult_ErrorFileFormat,
  60. BSPLoadResult_ErrorMemory,
  61. BSPLoadResult_ErrorTempMemory,
  62. BSPLoadResult_ErrorCapabilities
  63. };
  64. enum BSPLoadResult bspLoadWorldspawn(struct BSPLoadModelContext context, const char *mapname);
  65. void openSourceAddMap(const char* mapname, int mapname_length);