mirror of
https://github.com/ioquake/ioq3.git
synced 2025-05-30 00:20:59 +00:00
OpenGL2: Support half floats for texcoords and vertex colors.
This commit is contained in:
parent
1ba9e7a45e
commit
943259f6b4
10 changed files with 193 additions and 154 deletions
|
@ -674,10 +674,10 @@ static qboolean R_LoadMD3(model_t * mod, int lod, void *buffer, int bufferSize,
|
|||
{
|
||||
// vertex animation, store texcoords first, then position/normal/tangents
|
||||
offset_st = 0;
|
||||
offset_xyz = surf->numVerts * sizeof(vec2_t);
|
||||
offset_xyz = surf->numVerts * glRefConfig.packedTexcoordDataSize;
|
||||
offset_normal = offset_xyz + sizeof(vec3_t);
|
||||
offset_tangent = offset_normal + sizeof(uint32_t);
|
||||
stride_st = sizeof(vec2_t);
|
||||
stride_st = glRefConfig.packedTexcoordDataSize;
|
||||
stride_xyz = sizeof(vec3_t) + sizeof(uint32_t);
|
||||
#ifdef USE_VERT_TANGENT_SPACE
|
||||
stride_xyz += sizeof(uint32_t);
|
||||
|
@ -691,7 +691,7 @@ static qboolean R_LoadMD3(model_t * mod, int lod, void *buffer, int bufferSize,
|
|||
// no animation, interleave everything
|
||||
offset_xyz = 0;
|
||||
offset_st = offset_xyz + sizeof(vec3_t);
|
||||
offset_normal = offset_st + sizeof(vec2_t);
|
||||
offset_normal = offset_st + glRefConfig.packedTexcoordDataSize;
|
||||
offset_tangent = offset_normal + sizeof(uint32_t);
|
||||
#ifdef USE_VERT_TANGENT_SPACE
|
||||
stride_xyz = offset_tangent + sizeof(uint32_t);
|
||||
|
@ -711,8 +711,7 @@ static qboolean R_LoadMD3(model_t * mod, int lod, void *buffer, int bufferSize,
|
|||
{
|
||||
st = surf->st;
|
||||
for ( j = 0 ; j < surf->numVerts ; j++, st++ ) {
|
||||
memcpy(data + dataOfs, &st->st, sizeof(vec2_t));
|
||||
dataOfs += sizeof(vec2_t);
|
||||
dataOfs += R_VaoPackTexCoord(data + dataOfs, st->st);
|
||||
}
|
||||
|
||||
v = surf->verts;
|
||||
|
@ -722,16 +721,12 @@ static qboolean R_LoadMD3(model_t * mod, int lod, void *buffer, int bufferSize,
|
|||
vec3_t nxt;
|
||||
vec4_t tangent;
|
||||
#endif
|
||||
uint32_t *p;
|
||||
|
||||
// xyz
|
||||
memcpy(data + dataOfs, &v->xyz, sizeof(vec3_t));
|
||||
dataOfs += sizeof(vec3_t);
|
||||
|
||||
// normal
|
||||
p = (uint32_t *)(data + dataOfs);
|
||||
*p = R_VaoPackNormal(v->normal);
|
||||
dataOfs += sizeof(uint32_t);
|
||||
dataOfs += R_VaoPackNormal(data + dataOfs, v->normal);
|
||||
|
||||
#ifdef USE_VERT_TANGENT_SPACE
|
||||
CrossProduct(v->normal, v->tangent, nxt);
|
||||
|
@ -739,9 +734,7 @@ static qboolean R_LoadMD3(model_t * mod, int lod, void *buffer, int bufferSize,
|
|||
tangent[3] = (DotProduct(nxt, v->bitangent) < 0.0f) ? -1.0f : 1.0f;
|
||||
|
||||
// tangent
|
||||
p = (uint32_t *)(data + dataOfs);
|
||||
*p = R_VaoPackTangent(tangent);
|
||||
dataOfs += sizeof(uint32_t);
|
||||
dataOfs += R_VaoPackTangent(data + dataOfs, tangent);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
@ -755,20 +748,15 @@ static qboolean R_LoadMD3(model_t * mod, int lod, void *buffer, int bufferSize,
|
|||
vec3_t nxt;
|
||||
vec4_t tangent;
|
||||
#endif
|
||||
uint32_t *p;
|
||||
|
||||
// xyz
|
||||
memcpy(data + dataOfs, &v->xyz, sizeof(vec3_t));
|
||||
dataOfs += sizeof(v->xyz);
|
||||
|
||||
// st
|
||||
memcpy(data + dataOfs, &st->st, sizeof(vec2_t));
|
||||
dataOfs += sizeof(st->st);
|
||||
dataOfs += R_VaoPackTexCoord(data + dataOfs, st->st);
|
||||
|
||||
// normal
|
||||
p = (uint32_t *)(data + dataOfs);
|
||||
*p = R_VaoPackNormal(v->normal);
|
||||
dataOfs += sizeof(uint32_t);
|
||||
dataOfs += R_VaoPackNormal(data + dataOfs, v->normal);
|
||||
|
||||
#ifdef USE_VERT_TANGENT_SPACE
|
||||
CrossProduct(v->normal, v->tangent, nxt);
|
||||
|
@ -776,9 +764,7 @@ static qboolean R_LoadMD3(model_t * mod, int lod, void *buffer, int bufferSize,
|
|||
tangent[3] = (DotProduct(nxt, v->bitangent) < 0.0f) ? -1.0f : 1.0f;
|
||||
|
||||
// tangent
|
||||
p = (uint32_t *)(data + dataOfs);
|
||||
*p = R_VaoPackTangent(tangent);
|
||||
dataOfs += sizeof(uint32_t);
|
||||
dataOfs += R_VaoPackTangent(data + dataOfs, tangent);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
@ -807,7 +793,7 @@ static qboolean R_LoadMD3(model_t * mod, int lod, void *buffer, int bufferSize,
|
|||
vaoSurf->vao->attribs[ATTR_INDEX_TANGENT ].count = 4;
|
||||
|
||||
vaoSurf->vao->attribs[ATTR_INDEX_POSITION].type = GL_FLOAT;
|
||||
vaoSurf->vao->attribs[ATTR_INDEX_TEXCOORD].type = GL_FLOAT;
|
||||
vaoSurf->vao->attribs[ATTR_INDEX_TEXCOORD].type = glRefConfig.packedTexcoordDataType;
|
||||
vaoSurf->vao->attribs[ATTR_INDEX_NORMAL ].type = glRefConfig.packedNormalDataType;
|
||||
vaoSurf->vao->attribs[ATTR_INDEX_TANGENT ].type = glRefConfig.packedNormalDataType;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue