1
0
Fork 0
mirror of https://github.com/bjornbytes/lovr.git synced 2024-07-03 04:53:35 +00:00
lovr/src/graphics/mesh.h

71 lines
2.1 KiB
C
Raw Normal View History

2017-03-11 22:13:49 +00:00
#include "util.h"
#include "graphics/shader.h"
#include "graphics/material.h"
2017-03-11 22:13:49 +00:00
#include "math/math.h"
#include "lib/glfw.h"
2018-01-26 02:31:56 +00:00
#include "lib/vertex.h"
2017-03-11 22:13:49 +00:00
#pragma once
typedef enum {
MESH_POINTS = GL_POINTS,
2017-11-26 03:49:22 +00:00
MESH_LINES = GL_LINES,
MESH_LINE_STRIP = GL_LINE_STRIP,
2017-03-11 22:13:49 +00:00
MESH_TRIANGLE_STRIP = GL_TRIANGLE_STRIP,
MESH_TRIANGLES = GL_TRIANGLES,
MESH_TRIANGLE_FAN = GL_TRIANGLE_FAN
} MeshDrawMode;
typedef enum {
MESH_STATIC = GL_STATIC_DRAW,
MESH_DYNAMIC = GL_DYNAMIC_DRAW,
MESH_STREAM = GL_STREAM_DRAW
} MeshUsage;
typedef struct {
Ref ref;
2017-06-18 23:19:26 +00:00
void* data;
size_t count;
2017-03-11 22:13:49 +00:00
int stride;
int enabledAttributes;
2017-10-31 08:14:09 +00:00
bool attributesDirty;
bool isMapped;
2017-03-12 01:27:18 +00:00
int mapStart;
size_t mapCount;
2018-01-26 02:31:56 +00:00
VertexFormat format;
2017-03-11 22:13:49 +00:00
MeshDrawMode drawMode;
MeshUsage usage;
GLuint vao;
GLuint vbo;
GLuint ibo;
void* indices;
size_t indexCount;
size_t indexSize;
2017-10-31 08:14:09 +00:00
bool isRangeEnabled;
2017-03-11 22:13:49 +00:00
int rangeStart;
int rangeCount;
Material* material;
Shader* lastShader;
2017-03-11 22:13:49 +00:00
} Mesh;
2018-01-26 02:31:56 +00:00
Mesh* lovrMeshCreate(size_t count, VertexFormat* format, MeshDrawMode drawMode, MeshUsage usage);
2017-03-11 22:13:49 +00:00
void lovrMeshDestroy(const Ref* ref);
void lovrMeshDraw(Mesh* mesh, mat4 transform, float* pose, int instances);
2018-01-26 02:31:56 +00:00
VertexFormat lovrMeshGetVertexFormat(Mesh* mesh);
2017-03-11 22:28:44 +00:00
MeshDrawMode lovrMeshGetDrawMode(Mesh* mesh);
2017-10-22 14:20:40 +00:00
void lovrMeshSetDrawMode(Mesh* mesh, MeshDrawMode drawMode);
2017-03-11 22:28:44 +00:00
int lovrMeshGetVertexCount(Mesh* mesh);
int lovrMeshGetVertexSize(Mesh* mesh);
void* lovrMeshGetVertexMap(Mesh* mesh, size_t* count);
void lovrMeshSetVertexMap(Mesh* mesh, void* data, size_t count);
2017-10-31 08:14:09 +00:00
bool lovrMeshIsAttributeEnabled(Mesh* mesh, const char* name);
void lovrMeshSetAttributeEnabled(Mesh* mesh, const char* name, bool enabled);
bool lovrMeshIsRangeEnabled(Mesh* mesh);
2017-03-11 22:28:44 +00:00
void lovrMeshSetRangeEnabled(Mesh* mesh, char isEnabled);
void lovrMeshGetDrawRange(Mesh* mesh, int* start, int* count);
2017-10-22 14:20:40 +00:00
void lovrMeshSetDrawRange(Mesh* mesh, int start, int count);
Material* lovrMeshGetMaterial(Mesh* mesh);
void lovrMeshSetMaterial(Mesh* mesh, Material* material);
2017-10-31 08:14:09 +00:00
void* lovrMeshMap(Mesh* mesh, int start, size_t count, bool read, bool write);
2017-03-12 01:27:18 +00:00
void lovrMeshUnmap(Mesh* mesh);