Skip to content

Commit

Permalink
Refactor|Client|Map Renderer: Specify texture coordinates to the rend…
Browse files Browse the repository at this point in the history
…er lists with de::VectorN<>
  • Loading branch information
danij-deng committed Aug 6, 2013
1 parent 788acb2 commit c2e4275
Show file tree
Hide file tree
Showing 12 changed files with 148 additions and 182 deletions.
16 changes: 8 additions & 8 deletions doomsday/client/include/render/rend_list.h
Expand Up @@ -147,10 +147,10 @@ void RL_Rtu_SetTextureUnmanaged(uint idx, DGLuint glName, int wrapS, int wrapT);
*/
void RL_AddPolyWithCoordsModulationReflection(primtype_t primType, int flags,
uint numElements, const rvertex_t* vertices, const de::Vector4f* colors,
const rtexcoord_t* primaryCoords, const rtexcoord_t* interCoords,
DGLuint modTex, const de::Vector4f* modColor, const rtexcoord_t* modCoords,
const de::Vector4f* reflectionColors, const rtexcoord_t* reflectionCoords,
const rtexcoord_t* reflectionMaskCoords);
const de::Vector2f* primaryCoords, const de::Vector2f* interCoords,
DGLuint modTex, const de::Vector4f* modColor, const de::Vector2f* modCoords,
const de::Vector4f* reflectionColors, const de::Vector2f* reflectionCoords,
const de::Vector2f* reflectionMaskCoords);

/**
* @param primType Type of primitive being written.
Expand All @@ -161,8 +161,8 @@ void RL_AddPolyWithCoordsModulationReflection(primtype_t primType, int flags,
*/
void RL_AddPolyWithCoordsModulation(primtype_t primType, int flags,
uint numElements, const rvertex_t* vertices, const de::Vector4f* colors,
const rtexcoord_t* primaryCoords, const rtexcoord_t* interCoords,
DGLuint modTex, const de::Vector4f* modColor, const rtexcoord_t* modCoords);
const de::Vector2f* primaryCoords, const de::Vector2f* interCoords,
DGLuint modTex, const de::Vector4f* modColor, const de::Vector2f* modCoords);

/**
* @param primType Type of primitive being written.
Expand All @@ -173,7 +173,7 @@ void RL_AddPolyWithCoordsModulation(primtype_t primType, int flags,
*/
void RL_AddPolyWithCoords(primtype_t primType, int flags, uint numElements,
const rvertex_t* vertices, const de::Vector4f* colors,
const rtexcoord_t* primaryCoords, const rtexcoord_t* interCoords);
const de::Vector2f* primaryCoords, const de::Vector2f* interCoords);

/**
* @param primType Type of primitive being written.
Expand All @@ -184,7 +184,7 @@ void RL_AddPolyWithCoords(primtype_t primType, int flags, uint numElements,
*/
void RL_AddPolyWithModulation(primtype_t primType, int flags, uint numElements,
const rvertex_t* vertices, const de::Vector4f* colors,
DGLuint modTex, const de::Vector4f* modColor, const rtexcoord_t* modCoords);
DGLuint modTex, const de::Vector4f* modColor, const de::Vector2f* modCoords);

/**
* @param primType Type of primitive being written.
Expand Down
2 changes: 1 addition & 1 deletion doomsday/client/include/render/rend_main.h
Expand Up @@ -169,7 +169,7 @@ texturevariantspecification_t &Rend_MapSurfaceShinyMaskTextureSpec();
void R_DivVerts(rvertex_t *dst, rvertex_t const *src,
de::WorldEdge const &leftEdge, de::WorldEdge const &rightEdge);

void R_DivTexCoords(rtexcoord_t *dst, rtexcoord_t const *src,
void R_DivTexCoords(de::Vector2f *dst, de::Vector2f const *src,
de::WorldEdge const &leftEdge, de::WorldEdge const &rightEdge);

void R_DivVertColors(de::Vector4f *dst, de::Vector4f const *src,
Expand Down
4 changes: 2 additions & 2 deletions doomsday/client/include/render/rendpoly.h
Expand Up @@ -168,7 +168,7 @@ de::Vector4f *R_AllocRendColors(uint num);
*
* @return Ptr to array of rtexcoord_t
*/
rtexcoord_t *R_AllocRendTexCoords(uint num);
de::Vector2f *R_AllocRendTexCoords(uint num);

/**
* Doesn't actually free anything. Instead, mark them as unused ready for
Expand All @@ -192,7 +192,7 @@ void R_FreeRendColors(de::Vector4f *rcolors);
*
* @param rtexcoords Ptr to array of rtexcoord_t to mark unused.
*/
void R_FreeRendTexCoords(rtexcoord_t *rtexcoords);
void R_FreeRendTexCoords(de::Vector2f *rtexcoords);

/// Manipulators, for convenience.
void Rtu_Init(rtexmapunit_t *rtu);
Expand Down
2 changes: 1 addition & 1 deletion doomsday/client/include/render/trianglestripbuilder.h
Expand Up @@ -147,7 +147,7 @@ class WorldEdge : public AbstractEdge
namespace de {

typedef QVarLengthArray<rvertex_t, 24> PositionBuffer;
typedef QVarLengthArray<rtexcoord_t, 24> TexCoordBuffer;
typedef QVarLengthArray<Vector2f, 24> TexCoordBuffer;

/**
* Abstract triangle strip geometry builder.
Expand Down
12 changes: 6 additions & 6 deletions doomsday/client/src/dd_main.cpp
Expand Up @@ -2595,13 +2595,13 @@ void *DD_GetVariable(int ddvalue)

#ifdef __CLIENT__
case DD_TORCH_RED:
return &torchColor[CR];
return &torchColor.x;

case DD_TORCH_GREEN:
return &torchColor[CG];
return &torchColor.y;

case DD_TORCH_BLUE:
return &torchColor[CB];
return &torchColor.z;

case DD_TORCH_ADDITIVE:
return &torchAdditive;
Expand Down Expand Up @@ -2687,15 +2687,15 @@ void DD_SetVariable(int ddvalue, void *parm)

#ifdef __CLIENT__
case DD_TORCH_RED:
torchColor[CR] = MINMAX_OF(0, *((float*) parm), 1);
torchColor.x = de::clamp(0.f, *((float*) parm), 1.f);
return;

case DD_TORCH_GREEN:
torchColor[CG] = MINMAX_OF(0, *((float*) parm), 1);
torchColor.y = de::clamp(0.f, *((float*) parm), 1.f);
return;

case DD_TORCH_BLUE:
torchColor[CB] = MINMAX_OF(0, *((float*) parm), 1);
torchColor.z = de::clamp(0.f, *((float*) parm), 1.f);
return;

case DD_TORCH_ADDITIVE:
Expand Down
16 changes: 8 additions & 8 deletions doomsday/client/src/render/rend_dynlight.cpp
Expand Up @@ -35,7 +35,7 @@ static void drawDynlight(dynlight_t const &dyn, renderlightprojectionparams_t &p
{
// Allocate enough for the divisions too.
rvertex_t *rvertices = R_AllocRendVertices(parm.realNumVertices);
rtexcoord_t *rtexcoords = R_AllocRendTexCoords(parm.realNumVertices);
Vector2f *rtexcoords = R_AllocRendTexCoords(parm.realNumVertices);
Vector4f *rcolors = R_AllocRendColors(parm.realNumVertices);
bool const mustSubdivide = (parm.isWall && (parm.wall.leftEdge->divisionCount() || parm.wall.rightEdge->divisionCount() ));

Expand All @@ -49,10 +49,10 @@ static void drawDynlight(dynlight_t const &dyn, renderlightprojectionparams_t &p
WallEdge const &leftEdge = *parm.wall.leftEdge;
WallEdge const &rightEdge = *parm.wall.rightEdge;

rtexcoords[1].st[0] = rtexcoords[0].st[0] = dyn.s[0];
rtexcoords[1].st[1] = rtexcoords[3].st[1] = dyn.t[0];
rtexcoords[3].st[0] = rtexcoords[2].st[0] = dyn.s[1];
rtexcoords[2].st[1] = rtexcoords[0].st[1] = dyn.t[1];
rtexcoords[1].x = rtexcoords[0].x = dyn.s[0];
rtexcoords[1].y = rtexcoords[3].y = dyn.t[0];
rtexcoords[3].x = rtexcoords[2].x = dyn.s[1];
rtexcoords[2].y = rtexcoords[0].y = dyn.t[1];

if(mustSubdivide)
{
Expand All @@ -63,7 +63,7 @@ static void drawDynlight(dynlight_t const &dyn, renderlightprojectionparams_t &p
*/

rvertex_t origVerts[4]; std::memcpy(origVerts, parm.rvertices, sizeof(rvertex_t) * 4);
rtexcoord_t origTexCoords[4]; std::memcpy(origTexCoords, rtexcoords, sizeof(rtexcoord_t) * 4);
Vector2f origTexCoords[4]; std::memcpy(origTexCoords, rtexcoords, sizeof(Vector2f) * 4);
Vector4f origColors[4]; std::memcpy(origColors, rcolors, sizeof(Vector4f) * 4);

R_DivVerts(rvertices, origVerts, leftEdge, rightEdge);
Expand All @@ -83,10 +83,10 @@ static void drawDynlight(dynlight_t const &dyn, renderlightprojectionparams_t &p

for(uint i = 0; i < parm.numVertices; ++i)
{
rtexcoords[i].st[0] = ((parm.texBR->x - parm.rvertices[i].pos[VX]) / width * dyn.s[0]) +
rtexcoords[i].x = ((parm.texBR->x - parm.rvertices[i].pos[VX]) / width * dyn.s[0]) +
((parm.rvertices[i].pos[VX] - parm.texTL->x) / width * dyn.s[1]);

rtexcoords[i].st[1] = ((parm.texBR->y - parm.rvertices[i].pos[VY]) / height * dyn.t[0]) +
rtexcoords[i].y = ((parm.texBR->y - parm.rvertices[i].pos[VY]) / height * dyn.t[0]) +
((parm.rvertices[i].pos[VY] - parm.texTL->y) / height * dyn.t[1]);
}

Expand Down
30 changes: 15 additions & 15 deletions doomsday/client/src/render/rend_fakeradio.cpp
Expand Up @@ -974,29 +974,29 @@ static void setSideShadowParams(rendershadowseg_params_t *p, float shadowSize,
}
}

static void quadTexCoords(rtexcoord_t *tc, rvertex_t const *rverts, float wallLength,
static void quadTexCoords(Vector2f *tc, rvertex_t const *rverts, float wallLength,
Vector3f const &texTopLeft, Vector3f const &texBottomRight,
Vector2f const &texOrigin, Vector2f const &texDimensions, bool horizontal)
{
if(horizontal)
{
// Special horizontal coordinates for wall shadows.
tc[0].st[0] = tc[2].st[0] = rverts[0].pos[VX] - texTopLeft.x + texOrigin.y / texDimensions.y;
tc[0].st[1] = tc[1].st[1] = rverts[0].pos[VY] - texTopLeft.y + texOrigin.x / texDimensions.x;
tc[0].x = tc[2].x = rverts[0].pos[VX] - texTopLeft.x + texOrigin.y / texDimensions.y;
tc[0].y = tc[1].y = rverts[0].pos[VY] - texTopLeft.y + texOrigin.x / texDimensions.x;

tc[1].st[0] = tc[0].st[0] + (rverts[1].pos[VZ] - texBottomRight.z) / texDimensions.y;
tc[3].st[0] = tc[0].st[0] + (rverts[3].pos[VZ] - texBottomRight.z) / texDimensions.y;
tc[3].st[1] = tc[0].st[1] + wallLength / texDimensions.x;
tc[2].st[1] = tc[0].st[1] + wallLength / texDimensions.x;
tc[1].x = tc[0].x + (rverts[1].pos[VZ] - texBottomRight.z) / texDimensions.y;
tc[3].x = tc[0].x + (rverts[3].pos[VZ] - texBottomRight.z) / texDimensions.y;
tc[3].y = tc[0].y + wallLength / texDimensions.x;
tc[2].y = tc[0].y + wallLength / texDimensions.x;
return;
}

tc[0].st[0] = tc[1].st[0] = rverts[0].pos[VX] - texTopLeft.x + texOrigin.x / texDimensions.x;
tc[3].st[1] = tc[1].st[1] = rverts[0].pos[VY] - texTopLeft.y + texOrigin.y / texDimensions.y;
tc[0].x = tc[1].x = rverts[0].pos[VX] - texTopLeft.x + texOrigin.x / texDimensions.x;
tc[3].y = tc[1].y = rverts[0].pos[VY] - texTopLeft.y + texOrigin.y / texDimensions.y;

tc[3].st[0] = tc[2].st[0] = tc[0].st[0] + wallLength / texDimensions.x;
tc[2].st[1] = tc[3].st[1] + (rverts[1].pos[VZ] - rverts[0].pos[VZ]) / texDimensions.y;
tc[0].st[1] = tc[3].st[1] + (rverts[3].pos[VZ] - rverts[2].pos[VZ]) / texDimensions.y;
tc[3].x = tc[2].x = tc[0].x + wallLength / texDimensions.x;
tc[2].y = tc[3].y + (rverts[1].pos[VZ] - rverts[0].pos[VZ]) / texDimensions.y;
tc[0].y = tc[3].y + (rverts[3].pos[VZ] - rverts[2].pos[VZ]) / texDimensions.y;
}

static void drawWallSectionShadow(rvertex_t const *origVertices,
Expand All @@ -1013,7 +1013,7 @@ static void drawWallSectionShadow(rvertex_t const *origVertices,
realNumVertices = 4;

// Allocate enough for the divisions too.
rtexcoord_t *rtexcoords = R_AllocRendTexCoords(realNumVertices);
Vector2f *rtexcoords = R_AllocRendTexCoords(realNumVertices);
Vector4f *rcolors = R_AllocRendColors(realNumVertices);

quadTexCoords(rtexcoords, origVertices, wsParms.sectionWidth,
Expand All @@ -1039,8 +1039,8 @@ static void drawWallSectionShadow(rvertex_t const *origVertices,

rvertex_t *rvertices = R_AllocRendVertices(realNumVertices);

rtexcoord_t origTexCoords[4];
std::memcpy(origTexCoords, rtexcoords, sizeof(rtexcoord_t) * 4);
Vector2f origTexCoords[4];
std::memcpy(origTexCoords, rtexcoords, sizeof(Vector2f) * 4);

Vector4f origColors[4];
std::memcpy(origColors, rcolors, sizeof(Vector4f) * 4);
Expand Down
48 changes: 24 additions & 24 deletions doomsday/client/src/render/rend_list.cpp
Expand Up @@ -772,8 +772,8 @@ static void endWrite(rendlist_t *list)
}

static void writePrimitive(rendlist_t const *list, uint base,
rvertex_t const *rvertices, rtexcoord_t const *coords,
rtexcoord_t const *coords1, rtexcoord_t const *coords2,
rvertex_t const *rvertices, Vector2f const *coords,
Vector2f const *coords1, Vector2f const *coords2,
Vector4f const *rcolors, uint numElements, rendpolytype_t type)
{
for(uint i = 0; i < numElements; ++i)
Expand All @@ -792,31 +792,31 @@ static void writePrimitive(rendlist_t const *list, uint base,
// Primary texture coordinates.
if(TU(list, TU_PRIMARY)->hasTexture())
{
rtexcoord_t const *rtc = &coords[i];
Vector2f const *rtc = &coords[i];
dgl_texcoord_t *tc = &texCoords[TCA_MAIN][base + i];

tc->st[0] = rtc->st[0];
tc->st[1] = rtc->st[1];
tc->st[0] = rtc->x;
tc->st[1] = rtc->y;
}

// Secondary texture coordinates.
if(TU(list, TU_INTER)->hasTexture())
{
rtexcoord_t const *rtc = &coords1[i];
Vector2f const *rtc = &coords1[i];
dgl_texcoord_t *tc = &texCoords[TCA_BLEND][base + i];

tc->st[0] = rtc->st[0];
tc->st[1] = rtc->st[1];
tc->st[0] = rtc->x;
tc->st[1] = rtc->y;
}

// First light texture coordinates.
if((list->last->flags & PF_IS_LIT) && IS_MTEX_LIGHTS)
{
rtexcoord_t const *rtc = &coords2[i];
Vector2f const *rtc = &coords2[i];
dgl_texcoord_t *tc = &texCoords[TCA_LIGHT][base + i];

tc->st[0] = rtc->st[0];
tc->st[1] = rtc->st[1];
tc->st[0] = rtc->x;
tc->st[1] = rtc->y;
}

// Color.
Expand All @@ -843,8 +843,8 @@ static void writePrimitive(rendlist_t const *list, uint base,
*/
static void writePoly2(primtype_t type, rendpolytype_t polyType, int flags,
uint numElements, rvertex_t const *vertices, Vector4f const *colors,
rtexcoord_t const *primaryCoords, rtexcoord_t const *interCoords,
DGLuint modTex, Vector4f const *modColor, rtexcoord_t const *modCoords)
Vector2f const *primaryCoords, Vector2f const *interCoords,
DGLuint modTex, Vector4f const *modColor, Vector2f const *modCoords)
{
boolean const isLit = (polyType != PT_LIGHT && (modTex || !!(flags & RPF_HAS_DYNLIGHTS)));
uint i, base, primSize, numIndices;
Expand Down Expand Up @@ -939,8 +939,8 @@ END_PROF( PROF_RL_ADD_POLY );
*/
static void writePoly(primtype_t type, rendpolytype_t polyType, int flags,
uint numElements, rvertex_t const *vertices, Vector4f const *colors,
rtexcoord_t const *primaryCoords, rtexcoord_t const *interCoords,
DGLuint modTex, Vector4f const *modColor, rtexcoord_t const *modCoords)
Vector2f const *primaryCoords, Vector2f const *interCoords,
DGLuint modTex, Vector4f const *modColor, Vector2f const *modCoords)
{
if(numElements < 3) return; // huh?

Expand Down Expand Up @@ -1124,10 +1124,10 @@ static void prepareTextureUnitMapForShinyPoly()

void RL_AddPolyWithCoordsModulationReflection(primtype_t primType, int flags,
uint numElements, rvertex_t const *vertices, Vector4f const *colors,
rtexcoord_t const *primaryCoords, rtexcoord_t const *interCoords,
DGLuint modTex, Vector4f const *modColor, rtexcoord_t const *modCoords,
Vector4f const *reflectionColors, rtexcoord_t const *reflectionCoords,
rtexcoord_t const *reflectionMaskCoords)
Vector2f const *primaryCoords, Vector2f const *interCoords,
DGLuint modTex, Vector4f const *modColor, Vector2f const *modCoords,
Vector4f const *reflectionColors, Vector2f const *reflectionCoords,
Vector2f const *reflectionMaskCoords)
{
prepareTextureUnitMap();
writePoly(primType, choosePolyType(flags), flags, numElements,
Expand All @@ -1143,9 +1143,9 @@ void RL_AddPolyWithCoordsModulationReflection(primtype_t primType, int flags,
}

void RL_AddPolyWithCoordsModulation(primtype_t primType, int flags, uint numElements,
rvertex_t const *vertices, Vector4f const *colors, rtexcoord_t const *primaryCoords,
rtexcoord_t const *interCoords,
DGLuint modTex, Vector4f const *modColor, rtexcoord_t const *modCoords)
rvertex_t const *vertices, Vector4f const *colors, Vector2f const *primaryCoords,
Vector2f const *interCoords,
DGLuint modTex, Vector4f const *modColor, Vector2f const *modCoords)
{
prepareTextureUnitMap();
writePoly(primType, choosePolyType(flags), flags, numElements,
Expand All @@ -1154,7 +1154,7 @@ void RL_AddPolyWithCoordsModulation(primtype_t primType, int flags, uint numElem

void RL_AddPolyWithCoords(primtype_t primType, int flags, uint numElements,
rvertex_t const *vertices, Vector4f const *colors,
rtexcoord_t const *primaryCoords, rtexcoord_t const *interCoords)
Vector2f const *primaryCoords, Vector2f const *interCoords)
{
prepareTextureUnitMap();
writePoly(primType, choosePolyType(flags), flags, numElements,
Expand All @@ -1163,7 +1163,7 @@ void RL_AddPolyWithCoords(primtype_t primType, int flags, uint numElements,

void RL_AddPolyWithModulation(primtype_t primType, int flags, uint numElements,
rvertex_t const *vertices, Vector4f const *colors,
DGLuint modTex, Vector4f const *modColor, rtexcoord_t const *modCoords)
DGLuint modTex, Vector4f const *modColor, Vector2f const *modCoords)
{
prepareTextureUnitMap();
writePoly(primType, choosePolyType(flags), flags, numElements,
Expand Down

0 comments on commit c2e4275

Please sign in to comment.