177 Vector3 v =
new(MathF.Floor(viewPosition.
X), 0f, MathF.Floor(viewPosition.
Z));
194 "SetShaderParameter",
205 int subsetsMask = 32;
213 Vector3 v =
new(MathF.Floor(viewPosition.
X), 0f, MathF.Floor(viewPosition.
Z));
217 Display.RasterizerState = m_subsystemSky.ViewUnderWaterDepth > 0f
231 "SetShaderParameter",
242 int subsetsMask = 64;
286 DynamicArray<TerrainChunkGeometry.Buffer> buffers,
287 Func<TerrainVertex, TerrainVertex> vertexTransform =
null) {
290 for (
int k = 0; k < chunkSliceGeometries.Length; k++) {
293 foreach (KeyValuePair<Texture2D, TerrainGeometry> drawItem
in geometry.Draws) {
295 for (
int i = 0; i < subGeometry.
Subsets.Length; i++) {
298 stat.Add(drawItem.Key, subsetStat);
302 subsetStat.subsetTotalIndexCount[i] += ic;
303 subsetStat.subsetTotalVertexCount[i] += vc;
304 subsetStat.totalIndexCount += ic;
305 subsetStat.totalVertextCount += vc;
310 foreach (KeyValuePair<Texture2D, SubsetStat> statItem
in stat) {
311 if (statItem.Value.totalIndexCount == 0) {
317 buffer.Texture = statItem.Key;
318 statItem.Value.Buffer = buffer;
320 int subsetSettedIndexCount = 0;
321 int subsetSettedVertexCount = 0;
322 for (
int i = 0; i < 7; i++) {
324 buffer.SubsetIndexBufferStarts[i] = 0;
325 buffer.SubsetIndexBufferEnds[i] = statItem.Value.subsetTotalIndexCount[i];
326 buffer.SubsetVertexBufferStarts[i] = 0;
327 buffer.SubsetVertexBufferEnds[i] = statItem.Value.subsetTotalVertexCount[i];
328 subsetSettedIndexCount = statItem.Value.subsetTotalIndexCount[i];
329 subsetSettedVertexCount = statItem.Value.subsetTotalVertexCount[i];
332 buffer.SubsetIndexBufferStarts[i] = subsetSettedIndexCount;
333 buffer.SubsetIndexBufferEnds[i] = statItem.Value.subsetTotalIndexCount[i] + buffer.SubsetIndexBufferStarts[i];
334 buffer.SubsetVertexBufferStarts[i] = subsetSettedVertexCount;
335 buffer.SubsetVertexBufferEnds[i] = statItem.Value.subsetTotalVertexCount[i] + buffer.SubsetVertexBufferStarts[i];
336 subsetSettedIndexCount += statItem.Value.subsetTotalIndexCount[i];
337 subsetSettedVertexCount += statItem.Value.subsetTotalVertexCount[i];
342 for (
int k = 0; k < chunkSliceGeometries.Length; k++) {
345 foreach (KeyValuePair<Texture2D, TerrainGeometry> drawItem
in geometry.Draws) {
347 for (
int i = 0; i < subGeometry.
Subsets.Length; i++) {
349 if (subsetStat.totalIndexCount == 0) {
352 TerrainGeometryDynamicArray<int> indices = subGeometry.
Subsets[i].
Indices;
353 TerrainGeometryDynamicArray<TerrainVertex> vertices = subGeometry.
Subsets[i].
Vertices;
354 if (indices.
Count > 0) {
356 m_tmpIndices.Count = indices.
Count;
360 buffer.SubsetVertexBufferStarts[i] + subsetStat.subsetSettedVertexCount[i],
363 buffer.IndexBuffer.SetData(
367 buffer.SubsetIndexBufferStarts[i] + subsetStat.subsetSettedIndexCount[i]
369 if (vertexTransform !=
null) {
370 m_tmpVertices.Count = vertices.
Count;
371 for (
int j = 0; j < vertices.
Count; j++) {
374 buffer.VertexBuffer.SetData(
378 buffer.SubsetVertexBufferStarts[i] + subsetStat.subsetSettedVertexCount[i]
382 buffer.VertexBuffer.SetData(
386 buffer.SubsetVertexBufferStarts[i] + subsetStat.subsetSettedVertexCount[i]
389 subsetStat.subsetSettedIndexCount[i] += indices.
Count;
390 subsetStat.subsetSettedVertexCount[i] += vertices.
Count;