render.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #pragma once
  2. #include "atto/math.h"
  3. #if !defined(ATTO_PLATFORM)
  4. #include "atto/platform.h"
  5. #endif
  6. #if !defined(ATTO_GL_HEADERS_INCLUDED)
  7. #ifdef ATTO_PLATFORM_X11
  8. #define GL_GLEXT_PROTOTYPES 1
  9. #include <GL/glx.h>
  10. #include <GL/gl.h>
  11. #include <GL/glext.h>
  12. #define ATTO_GL_DESKTOP
  13. #endif /* ifdef ATTO_PLATFORM_X11 */
  14. #ifdef ATTO_PLATFORM_RPI
  15. #include <GLES2/gl2.h>
  16. #include <GLES2/gl2ext.h>
  17. #define ATTO_GL_ES
  18. #endif /* ifdef ATTO_PLATFORM_RPI */
  19. #ifdef ATTO_PLATFORM_WINDOWS
  20. #include "libc.h"
  21. #include <GL/gl.h>
  22. #include <glext.h>
  23. #define ATTO_GL_DESKTOP
  24. #endif /* ifdef ATTO_PLATFORM_WINDOWS */
  25. #ifdef ATTO_PLATFORM_OSX
  26. #include <OpenGL/gl3.h>
  27. #define ATTO_GL_DESKTOP
  28. #endif
  29. #endif /* if !defined(ATTO_GL_HEADERS_INCLUDED) */
  30. int renderInit();
  31. void renderClear();
  32. typedef enum {
  33. RTexFormat_RGB565
  34. } RTexFormat;
  35. typedef struct RTexture {
  36. int width, height;
  37. RTexFormat format;
  38. GLuint gl_name;
  39. } RTexture;
  40. typedef struct {
  41. int width, height;
  42. RTexFormat format;
  43. const void *pixels;
  44. } RTextureCreateParams;
  45. void renderTextureCreate(RTexture *texture, RTextureCreateParams params);
  46. typedef struct {
  47. GLuint gl_name;
  48. } RBuffer;
  49. typedef enum {
  50. RBufferType_Vertex = GL_ARRAY_BUFFER,
  51. RBufferType_Index = GL_ELEMENT_ARRAY_BUFFER
  52. } RBufferType;
  53. void renderBufferCreate(RBuffer *buffer, RBufferType type, int size, const void *data);
  54. //void renderBufferUpload(RBuffer *buffer, RBufferUpload upload);
  55. struct BSPModel;
  56. void renderModelOptimize(struct BSPModel *model);
  57. void renderModelDraw(const struct AMat4f *mvp, float lmn, const struct BSPModel *model);