#ifndef STKMESH_H #define STKMESH_H #include "graphics/glwrap.hpp" #include "graphics/irr_driver.hpp" #include "utils/tuple.hpp" #include #include #include "../lib/irrlicht/source/Irrlicht/CMeshSceneNode.h" #include enum MeshMaterial { MAT_DEFAULT, MAT_ALPHA_REF, MAT_NORMAL_MAP, MAT_GRASS, MAT_SPHEREMAP, MAT_SPLATTING, MAT_UNLIT, MAT_DETAIL, MAT_COUNT }; enum TransparentMaterial { TM_DEFAULT, TM_ADDITIVE, TM_BUBBLE, TM_DISPLACEMENT, TM_COUNT }; struct GLMesh { GLuint vao; GLuint vao_shadow_pass; GLuint vertex_buffer; GLuint index_buffer; video::ITexture *textures[6]; GLenum PrimitiveType; GLenum IndexType; size_t IndexCount; size_t Stride; core::matrix4 TextureMatrix; size_t vaoBaseVertex; size_t vaoOffset; size_t vaoBaseInstance; video::E_VERTEX_TYPE VAOType; uint64_t TextureHandles[6]; }; GLMesh allocateMeshBuffer(scene::IMeshBuffer* mb); void fillLocalBuffer(GLMesh &, scene::IMeshBuffer* mb); video::E_VERTEX_TYPE getVTXTYPEFromStride(size_t stride); GLuint createVAO(GLuint vbo, GLuint idx, video::E_VERTEX_TYPE type); core::matrix4 computeMVP(const core::matrix4 &ModelViewProjectionMatrix); bool isObject(video::E_MATERIAL_TYPE type); core::vector3df getWind(); template class MeshList : public Singleton, public std::vector > {}; class ListMatDefault : public MeshList {}; class AnimatedListMatDefault : public MeshList {}; class ListMatAlphaRef : public MeshList {}; class AnimatedListMatAlphaRef : public MeshList {}; class ListMatNormalMap : public MeshList {}; class ListMatGrass : public MeshList {}; class ListMatSphereMap : public MeshList {}; class ListMatSplatting : public MeshList {}; class ListMatUnlit : public MeshList {}; class AnimatedListMatUnlit : public MeshList {}; class ListMatDetails : public MeshList {}; class AnimatedListMatDetails : public MeshList {}; class ListBlendTransparent : public MeshList {}; class ListAdditiveTransparent : public MeshList {}; class ListBlendTransparentFog : public MeshList {}; class ListAdditiveTransparentFog : public MeshList {}; class ListDisplacement : public MeshList {}; // Forward pass (for transparents meshes) void drawBubble(const GLMesh &mesh, const core::matrix4 &ModelViewProjectionMatrix); MeshMaterial MaterialTypeToMeshMaterial(video::E_MATERIAL_TYPE, video::E_VERTEX_TYPE); TransparentMaterial MaterialTypeToTransparentMaterial(video::E_MATERIAL_TYPE, f32 MaterialTypeParam); #endif // STKMESH_H