Skip to content
Snippets Groups Projects
Unverified Commit 64c4579b authored by Hanicef's avatar Hanicef
Browse files

Retain skybox and horizon line order

parent ee724de4
Branches
Tags
No related merge requests found
...@@ -116,15 +116,20 @@ void HWR_ProcessPolygon(FSurfaceInfo *pSurf, FOutVector *pOutVerts, FUINT iNumPt ...@@ -116,15 +116,20 @@ void HWR_ProcessPolygon(FSurfaceInfo *pSurf, FOutVector *pOutVerts, FUINT iNumPt
polygonArray[polygonArraySize].texture = current_texture; polygonArray[polygonArraySize].texture = current_texture;
polygonArray[polygonArraySize].shader = shader; polygonArray[polygonArraySize].shader = shader;
polygonArray[polygonArraySize].horizonSpecial = horizonSpecial; polygonArray[polygonArraySize].horizonSpecial = horizonSpecial;
polygonArray[polygonArraySize].hash = 0; // default to polygonArraySize so we don't lose order on horizon lines
// (yes, it's supposed to be negative, since we're sorting in that direction)
polygonArray[polygonArraySize].hash = -polygonArraySize;
polygonArraySize++; polygonArraySize++;
if (!(PolyFlags & PF_NoTexture) && !horizonSpecial) if (!(PolyFlags & PF_NoTexture) && !horizonSpecial)
{ {
// use FNV-1a to hash polygons for later sorting. // use FNV-1a to hash polygons for later sorting.
int32_t hash = 0x811c9dc5; INT32 hash = 0x811c9dc5;
#define DIGEST(h, x) h ^= (x); h *= 0x01000193 #define DIGEST(h, x) h ^= (x); h *= 0x01000193
if (current_texture)
{
DIGEST(hash, current_texture->downloaded); DIGEST(hash, current_texture->downloaded);
}
DIGEST(hash, PolyFlags); DIGEST(hash, PolyFlags);
DIGEST(hash, pSurf->PolyColor.rgba); DIGEST(hash, pSurf->PolyColor.rgba);
if (cv_glshaders.value && gl_shadersavailable) if (cv_glshaders.value && gl_shadersavailable)
...@@ -137,7 +142,8 @@ void HWR_ProcessPolygon(FSurfaceInfo *pSurf, FOutVector *pOutVerts, FUINT iNumPt ...@@ -137,7 +142,8 @@ void HWR_ProcessPolygon(FSurfaceInfo *pSurf, FOutVector *pOutVerts, FUINT iNumPt
DIGEST(hash, pSurf->LightInfo.fade_end); DIGEST(hash, pSurf->LightInfo.fade_end);
} }
#undef DIGEST #undef DIGEST
polygonArray[polygonArraySize-1].hash = hash; // remove the sign bit to ensure that skybox and horizon line comes first.
polygonArray[polygonArraySize-1].hash = (hash & INT32_MAX);
} }
memcpy(&unsortedVertexArray[unsortedVertexArraySize], pOutVerts, iNumPts * sizeof(FOutVector)); memcpy(&unsortedVertexArray[unsortedVertexArraySize], pOutVerts, iNumPts * sizeof(FOutVector));
......
...@@ -26,7 +26,7 @@ typedef struct ...@@ -26,7 +26,7 @@ typedef struct
int shader; int shader;
// this tells batching that the plane belongs to a horizon line and must be drawn in correct order with the skywalls // this tells batching that the plane belongs to a horizon line and must be drawn in correct order with the skywalls
boolean horizonSpecial; boolean horizonSpecial;
uint32_t hash; INT32 hash;
} PolygonArrayEntry; } PolygonArrayEntry;
void HWR_StartBatching(void); void HWR_StartBatching(void);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment