port from perforce

This commit is contained in:
2026-04-18 22:31:51 +02:00
commit 8d0ab5b7cc
8409 changed files with 3972376 additions and 0 deletions

92
4kgfx/mesh.h Normal file
View File

@@ -0,0 +1,92 @@
#pragma once
struct MeshVertex
{
vec4 Position;
vec4 Normal;
};
struct Instance
{
Matrix transform;
};
class Mesh
{
public:
Mesh();
struct VertexInfo
{
int Pos;
int Normal;
int UV;
bool operator < (const VertexInfo& v) const
{
if (Pos == v.Pos)
{
if (Normal == v.Normal)
{
return UV < v.UV;
}
return Normal < v.Normal;
}
return Pos < v.Pos;
}
};
int VertexCount;
int IndexCount;
int FaceCount;
static const int MaxVertexBuffer = 65536;
static const int MaxIndexBuffer = 65536 * 9 / 2;
MeshVertex* VertexBuffer;
unsigned short* IndexBuffer;
struct OpInfo
{
void Reset();
MeshVertex NextVB[Mesh::MaxVertexBuffer];
unsigned short int NextIB[Mesh::MaxIndexBuffer];
int NextVertexCount;
int NextIndexCount;
int NextFaceCount;
int EdgeCount;
unsigned int EdgeConfiguration[Mesh::MaxIndexBuffer];
unsigned char EdgeUsage[Mesh::MaxIndexBuffer];
int MakeEdgeID(unsigned short VertexA, unsigned short VertexB);
unsigned short int EdgeID[Mesh::MaxIndexBuffer];
};
OpInfo OP;
unsigned int VertexArrayObject;
unsigned int VertexArrayBuffer;
unsigned int IndexBufferObject;
void Render();
void Lock();
void Unlock();
void Transform(const Matrix& transform);
void CreateCube();
void CreateSphere(unsigned int lod);
private:
void Homogenize();
void GenerateNormals();
void NormalizeNormals();
void CatmullClarkSubdivide();
void StandardSubdivide();
void Extrude(float extend);
void Bevel(float extend, float minAngle);
void Triangulate();
};