Browse Source

let me underscore this is painfully incorrect and we'll want to revisit it when we have more time, but... this seems to fix mangled decal and decalroad rendering

AzaezelX 3 years ago
parent
commit
66820fee90

+ 1 - 0
Engine/source/T3D/decal/decalManager.cpp

@@ -1425,6 +1425,7 @@ void DecalManager::prepRenderImage( SceneRenderState* state )
       ri->prim->numPrimitives = currentBatch->iCount / 3;
       ri->prim->startVertex = 0;
       ri->prim->numVertices = currentBatch->vCount;
+      ri->translucentSort = !currentBatch->matInst->getMaterial()->isTranslucent();
 
       // Ugly hack for ProjectedShadow!
       if ( customTex )

+ 3 - 1
Engine/source/environment/decalRoad.cpp

@@ -734,7 +734,7 @@ void DecalRoad::prepRenderImage( SceneRenderState* state )
    coreRI.sortDistSq = F32_MAX;
 
 	// If we need lights then set them up.
-   if ( matInst->isForwardLit() )
+   if ( matInst->isForwardLit() && !coreRI.lights[0])
    {
       LightQuery query;
       query.init( getWorldSphere() );
@@ -784,6 +784,7 @@ void DecalRoad::prepRenderImage( SceneRenderState* state )
 
       *ri = coreRI;
 
+      ri->matInst = matInst;
       ri->prim = renderPass->allocPrim();
       ri->prim->type = GFXTriangleList;
       ri->prim->minIndex = 0;
@@ -791,6 +792,7 @@ void DecalRoad::prepRenderImage( SceneRenderState* state )
       ri->prim->numPrimitives = triangleCount;
       ri->prim->startVertex = 0;
       ri->prim->numVertices = endBatch.endVert + 1;
+      ri->translucentSort = !matInst->getMaterial()->isTranslucent();
 
       // For sorting we first sort by render priority
       // and then by objectId.