void DrawTranslucentPart( ChunkInfo info, ref ChunkPartInfo part ) { api.BindVb( part.VbId ); bool drawLeft = (drawAllFaces || info.DrawLeft) && part.LeftCount > 0; bool drawRight = (drawAllFaces || info.DrawRight) && part.RightCount > 0; bool drawBottom = (drawAllFaces || info.DrawBottom) && part.BottomCount > 0; bool drawTop = (drawAllFaces || info.DrawTop) && part.TopCount > 0; bool drawFront = (drawAllFaces || info.DrawFront) && part.FrontCount > 0; bool drawBack = (drawAllFaces || info.DrawBack) && part.BackCount > 0; if( drawLeft && drawRight ) { api.DrawIndexedVb_TrisT2fC4b( part.LeftCount + part.RightCount, part.LeftIndex ); } else if( drawLeft ) { api.DrawIndexedVb_TrisT2fC4b( part.LeftCount, part.LeftIndex ); } else if( drawRight ) { api.DrawIndexedVb_TrisT2fC4b( part.RightCount, part.RightIndex ); } if( drawFront && drawBack ) { api.DrawIndexedVb_TrisT2fC4b( part.FrontCount + part.BackCount, part.FrontIndex ); } else if( drawFront ) { api.DrawIndexedVb_TrisT2fC4b( part.FrontCount, part.FrontIndex ); } else if( drawBack ) { api.DrawIndexedVb_TrisT2fC4b( part.BackCount, part.BackIndex ); } if( drawBottom && drawTop ) { api.DrawIndexedVb_TrisT2fC4b( part.BottomCount + part.TopCount, part.BottomIndex ); } else if( drawBottom ) { api.DrawIndexedVb_TrisT2fC4b( part.BottomCount, part.BottomIndex ); } else if( drawTop ) { api.DrawIndexedVb_TrisT2fC4b( part.TopCount, part.TopIndex ); } }
void DrawPart( ChunkInfo info, ref ChunkPartInfo part ) { api.BindVb( part.VbId ); bool drawLeft = info.DrawLeft && part.LeftCount > 0; bool drawRight = info.DrawRight && part.RightCount > 0; bool drawBottom = info.DrawBottom && part.BottomCount > 0; bool drawTop = info.DrawTop && part.TopCount > 0; bool drawFront = info.DrawFront && part.FrontCount > 0; bool drawBack = info.DrawBack && part.BackCount > 0; if( drawLeft && drawRight ) { api.FaceCulling = true; api.DrawIndexedVb_TrisT2fC4b( part.LeftCount + part.RightCount, part.LeftIndex ); api.FaceCulling = false; } else if( drawLeft ) { api.DrawIndexedVb_TrisT2fC4b( part.LeftCount, part.LeftIndex ); } else if( drawRight ) { api.DrawIndexedVb_TrisT2fC4b( part.RightCount, part.RightIndex ); } if( drawFront && drawBack ) { api.FaceCulling = true; api.DrawIndexedVb_TrisT2fC4b( part.FrontCount + part.BackCount, part.FrontIndex ); api.FaceCulling = false; } else if( drawFront ) { api.DrawIndexedVb_TrisT2fC4b( part.FrontCount, part.FrontIndex ); } else if( drawBack ) { api.DrawIndexedVb_TrisT2fC4b( part.BackCount, part.BackIndex ); } if( drawBottom && drawTop ) { api.FaceCulling = true; api.DrawIndexedVb_TrisT2fC4b( part.BottomCount + part.TopCount, part.BottomIndex ); api.FaceCulling = false; } else if( drawBottom ) { api.DrawIndexedVb_TrisT2fC4b( part.BottomCount, part.BottomIndex ); } else if( drawTop ) { api.DrawIndexedVb_TrisT2fC4b( part.TopCount, part.TopIndex ); } }
void IncrementUsed( ChunkPartInfo[] parts ) { if( parts == null ) return; for( int i = 0; i < parts.Length; i++ ) { if( parts[i].IndicesCount == 0 ) continue; renderer.totalUsed[i]++; } }
void DrawBigPart( ChunkInfo info, ref ChunkPartInfo part ) { api.BindVb( part.VbId ); bool drawLeft = info.DrawLeft && part.LeftCount > 0; bool drawRight = info.DrawRight && part.RightCount > 0; bool drawBottom = info.DrawBottom && part.BottomCount > 0; bool drawTop = info.DrawTop && part.TopCount > 0; bool drawFront = info.DrawFront && part.FrontCount > 0; bool drawBack = info.DrawBack && part.BackCount > 0; if( drawLeft && drawRight ) { api.FaceCulling = true; api.DrawIndexedVb_TrisT2fC4b( part.LeftCount + part.RightCount, part.LeftIndex ); api.FaceCulling = false; } else if( drawLeft ) { api.DrawIndexedVb_TrisT2fC4b( part.LeftCount, part.LeftIndex ); } else if( drawRight ) { api.DrawIndexedVb_TrisT2fC4b( part.RightCount, part.RightIndex ); } if( drawFront && drawBack ) { api.FaceCulling = true; api.DrawIndexedVb_TrisT2fC4b( part.FrontCount + part.BackCount, part.FrontIndex ); api.FaceCulling = false; } else if( drawFront ) { api.DrawIndexedVb_TrisT2fC4b( part.FrontCount, part.FrontIndex ); } else if( drawBack ) { api.DrawIndexedVb_TrisT2fC4b( part.BackCount, part.BackIndex ); } // Special handling for top and bottom as these can go over 65536 vertices and we need to adjust the indices in this case. if( drawBottom && drawTop ) { api.FaceCulling = true; if( part.IndicesCount > maxIndices ) { int part1Count = maxIndices - part.BottomIndex; api.DrawIndexedVb_TrisT2fC4b( part1Count, part.BottomIndex ); api.DrawIndexedVb_TrisT2fC4b( part.BottomCount + part.TopCount - part1Count, maxVertex, 0 ); } else { api.DrawIndexedVb_TrisT2fC4b( part.BottomCount + part.TopCount, part.BottomIndex ); } api.FaceCulling = false; } else if( drawBottom ) { int part1Count; if( part.IndicesCount > maxIndices && ( part1Count = maxIndices - part.BottomIndex ) < part.BottomCount ) { api.DrawIndexedVb_TrisT2fC4b( part1Count, part.BottomIndex ); api.DrawIndexedVb_TrisT2fC4b( part.BottomCount - part1Count, maxVertex, 0 ); } else { api.DrawIndexedVb_TrisT2fC4b( part.BottomCount, part.BottomIndex ); } } else if( drawTop ) { int part1Count; if( part.IndicesCount > maxIndices && ( part1Count = maxIndices - part.TopIndex ) < part.TopCount ) { api.DrawIndexedVb_TrisT2fC4b( part1Count, part.TopIndex ); api.DrawIndexedVb_TrisT2fC4b( part.TopCount - part1Count, maxVertex, 0 ); } else { api.DrawIndexedVb_TrisT2fC4b( part.TopCount, part.TopIndex ); } } }
void DeleteData( ref ChunkPartInfo[] parts, bool decUsed ) { if( decUsed ) DecrementUsed( parts ); if( parts == null ) return; for( int i = 0; i < parts.Length; i++ ) api.DeleteVb( parts[i].VbId ); parts = null; }