summaryrefslogtreecommitdiff
path: root/src/renderergl2/tr_local.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/renderergl2/tr_local.h')
-rw-r--r--src/renderergl2/tr_local.h77
1 files changed, 38 insertions, 39 deletions
diff --git a/src/renderergl2/tr_local.h b/src/renderergl2/tr_local.h
index 5e6bf768..1c1dcff0 100644
--- a/src/renderergl2/tr_local.h
+++ b/src/renderergl2/tr_local.h
@@ -97,40 +97,36 @@ typedef struct {
float transformMatrix[16];
} orientationr_t;
+// Ensure this is >= the ATTR_INDEX_COUNT enum below
+#define VAO_MAX_ATTRIBS 16
+
typedef enum
{
VBO_USAGE_STATIC,
VBO_USAGE_DYNAMIC
} vboUsage_t;
+typedef struct vaoAttrib_s
+{
+ uint32_t enabled;
+ uint32_t count;
+ uint32_t type;
+ uint32_t normalized;
+ uint32_t stride;
+ uint32_t offset;
+}
+vaoAttrib_t;
+
typedef struct VBO_s
{
char name[MAX_QPATH];
uint32_t vertexesVBO;
int vertexesSize; // amount of memory data allocated for all vertices in bytes
- uint32_t ofs_xyz;
- uint32_t ofs_normal;
- uint32_t ofs_st;
- uint32_t ofs_lightmap;
- uint32_t ofs_vertexcolor;
- uint32_t ofs_lightdir;
-#ifdef USE_VERT_TANGENT_SPACE
- uint32_t ofs_tangent;
-#endif
- uint32_t stride_xyz;
- uint32_t stride_normal;
- uint32_t stride_st;
- uint32_t stride_lightmap;
- uint32_t stride_vertexcolor;
- uint32_t stride_lightdir;
-#ifdef USE_VERT_TANGENT_SPACE
- uint32_t stride_tangent;
-#endif
+ vaoAttrib_t attribs[VAO_MAX_ATTRIBS];
+
uint32_t size_xyz;
uint32_t size_normal;
-
- int attribs;
} VBO_t;
typedef struct IBO_s
@@ -515,8 +511,8 @@ static ID_INLINE qboolean ShaderRequiresCPUDeforms(const shader_t * shader)
enum
{
ATTR_INDEX_POSITION = 0,
- ATTR_INDEX_TEXCOORD0 = 1,
- ATTR_INDEX_TEXCOORD1 = 2,
+ ATTR_INDEX_TEXCOORD = 1,
+ ATTR_INDEX_LIGHTCOORD = 2,
ATTR_INDEX_TANGENT = 3,
ATTR_INDEX_NORMAL = 4,
ATTR_INDEX_COLOR = 5,
@@ -528,26 +524,28 @@ enum
// GPU vertex animations
ATTR_INDEX_POSITION2 = 10,
ATTR_INDEX_TANGENT2 = 11,
- ATTR_INDEX_NORMAL2 = 12
+ ATTR_INDEX_NORMAL2 = 12,
+
+ ATTR_INDEX_COUNT = 13
};
enum
{
- ATTR_POSITION = 0x0001,
- ATTR_TEXCOORD = 0x0002,
- ATTR_LIGHTCOORD = 0x0004,
- ATTR_TANGENT = 0x0008,
- ATTR_NORMAL = 0x0010,
- ATTR_COLOR = 0x0020,
- ATTR_PAINTCOLOR = 0x0040,
- ATTR_LIGHTDIRECTION = 0x0080,
- ATTR_BONE_INDEXES = 0x0100,
- ATTR_BONE_WEIGHTS = 0x0200,
+ ATTR_POSITION = 1 << ATTR_INDEX_POSITION,
+ ATTR_TEXCOORD = 1 << ATTR_INDEX_TEXCOORD,
+ ATTR_LIGHTCOORD = 1 << ATTR_INDEX_LIGHTCOORD,
+ ATTR_TANGENT = 1 << ATTR_INDEX_TANGENT,
+ ATTR_NORMAL = 1 << ATTR_INDEX_NORMAL,
+ ATTR_COLOR = 1 << ATTR_INDEX_COLOR,
+ ATTR_PAINTCOLOR = 1 << ATTR_INDEX_PAINTCOLOR,
+ ATTR_LIGHTDIRECTION = 1 << ATTR_INDEX_LIGHTDIRECTION,
+ ATTR_BONE_INDEXES = 1 << ATTR_INDEX_BONE_INDEXES,
+ ATTR_BONE_WEIGHTS = 1 << ATTR_INDEX_BONE_WEIGHTS,
// for .md3 interpolation
- ATTR_POSITION2 = 0x0400,
- ATTR_TANGENT2 = 0x0800,
- ATTR_NORMAL2 = 0x1000,
+ ATTR_POSITION2 = 1 << ATTR_INDEX_POSITION2,
+ ATTR_TANGENT2 = 1 << ATTR_INDEX_TANGENT2,
+ ATTR_NORMAL2 = 1 << ATTR_INDEX_NORMAL2,
ATTR_DEFAULT = ATTR_POSITION,
ATTR_BITS = ATTR_POSITION |
@@ -2035,6 +2033,7 @@ typedef struct shaderCommands_s
uint32_t lightdir[SHADER_MAX_VERTEXES] QALIGN(16);
//int vertexDlightBits[SHADER_MAX_VERTEXES] QALIGN(16);
+ void *attribPointers[ATTR_INDEX_COUNT];
VBO_t *vbo;
IBO_t *ibo;
qboolean useInternalVBO;
@@ -2203,10 +2202,10 @@ void R_VboUnpackTangent(vec4_t v, uint32_t b);
void R_VboUnpackNormal(vec3_t v, uint32_t b);
VBO_t *R_CreateVBO(const char *name, byte * vertexes, int vertexesSize, vboUsage_t usage);
-VBO_t *R_CreateVBO2(const char *name, int numVertexes, srfVert_t * vertexes, uint32_t stateBits, vboUsage_t usage);
+VBO_t *R_CreateVBO2(const char *name, int numVertexes, srfVert_t * vertexes);
IBO_t *R_CreateIBO(const char *name, byte * indexes, int indexesSize, vboUsage_t usage);
-IBO_t *R_CreateIBO2(const char *name, int numIndexes, glIndex_t * inIndexes, vboUsage_t usage);
+IBO_t *R_CreateIBO2(const char *name, int numIndexes, glIndex_t * inIndexes);
void R_BindVBO(VBO_t * vbo);
void R_BindNullVBO(void);
@@ -2218,7 +2217,7 @@ void R_InitVBOs(void);
void R_ShutdownVBOs(void);
void R_VBOList_f(void);
-void RB_UpdateVBOs(unsigned int attribBits);
+void RB_UpdateTessVbo(unsigned int attribBits);
/*