]> git.lizzy.rs Git - dragonblocks3d.git/blob - src/mesh.hpp
Set antialiasing to 8
[dragonblocks3d.git] / src / mesh.hpp
1 #pragma once
2
3 #include <vector>
4 #include "gl.hpp"
5 #include "texture.hpp"
6
7 class Frustum;
8
9 namespace dragonblocks
10 {
11         class Scene;
12         class ShaderProgram;
13         
14         class Mesh
15         {
16                 public:
17                 class IAnimation
18                 {
19                         public:                 
20                         bool expired(double);
21                         virtual glm::vec3 getPos(glm::vec3);
22                         virtual glm::vec3 getSize(glm::vec3);
23                         virtual glm::vec3 getRotationAxis(glm::vec3);
24                         virtual float getRotationAngle(float);
25                         
26                         protected:
27                         bool expires = false;
28                         double time_left;
29                         void (*on_finish)(void *);
30                         void *extra_data;
31                         
32                         IAnimation() = default;
33                         IAnimation(double, void (*)(void *), void *);
34                 };
35                 
36                 int vertices_per_texture;
37                 glm::vec3 pos, size, rotation_axis;
38                 glm::vec3 minp, maxp;
39                 float rotation_angle = 0;
40                 std::vector<Texture> textures;  
41                 IAnimation *animation = nullptr;                
42                 bool visible = true;
43                 
44                 void render(double dtime, Frustum *, glm::mat4, glm::mat4, glm::vec3);
45                 bool isRendering();
46                 void die();
47                 
48                 Mesh(Scene *, ShaderProgram *, const GLfloat *, GLsizei);
49
50                 private:
51                 GLuint VAO = 0, VBO = 0;
52                 Scene *scene;
53                 ShaderProgram *shader_program;
54                 GLvoid *vertices = NULL;
55                 GLsizeiptr vertices_size;
56                 bool configured = false;
57                 bool rendering = false;
58                 bool prepare_death = false;
59                 bool do_delete = false;
60                 
61                 void configure();
62                 
63                 ~Mesh();
64         };
65 }