浏览代码

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 年之前
父节点
当前提交
66820fee90
共有 2 个文件被更改,包括 4 次插入1 次删除
  1. 1 0
      Engine/source/T3D/decal/decalManager.cpp
  2. 3 1
      Engine/source/environment/decalRoad.cpp

+ 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.