#pragma once #include "WebglContext.h" #include "types.h" #include "Shader.h" #include "mathlib.h" struct WebglContext; struct Renderer2d { Mat4x4 projection; uint32 shader; struct { int32 position; int32 color; } attributes; struct { int32 projection; int32 model; } uniforms; void load(WebglContext* context); void render(); void unload(); }; struct Vertex2d { Vector4 position; Vector4 color; }; enum MeshMode { Vertex = 0, Index = 1 }; struct Mesh2d { MeshMode mode = MeshMode::Vertex; uint32 vao; uint32 vbo; uint32 ebo; uint32 numVertices = 0; uint32 numIndices = 0; Mat4x4 model; bool isDynamic = false; void load(Vertex2d* vertices, uint32 numVertices, Renderer2d* renderer, GLenum loadType = GL_STATIC_DRAW); void load(Vertex2d* vertices, uint32 numVertices, GLuint* indices, uint32 numIndices, Renderer2d* renderer, GLenum loadType = GL_STATIC_DRAW); void render(Renderer2d* renderer, GLenum drawType = GL_TRIANGLES); void unload(); void updateVertices(Vertex2d* vertices); };