mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-11-25 17:43:18 +00:00
Move reindexing to the shader
This commit is contained in:
parent
81fbc6b55c
commit
074df6febf
@ -26,10 +26,11 @@ vertex Varyings vertexPassthrough(
|
|||||||
constant Vertex *verticies[[buffer(0)]],
|
constant Vertex *verticies[[buffer(0)]],
|
||||||
constant float2 &offset[[buffer(1)]],
|
constant float2 &offset[[buffer(1)]],
|
||||||
unsigned int vid[[vertex_id]],
|
unsigned int vid[[vertex_id]],
|
||||||
constant float4x4 &transformMatrix[[buffer(2)]]
|
constant float4x4 &transformMatrix[[buffer(2)]],
|
||||||
|
constant int &indexOffset[[buffer(3)]]
|
||||||
) {
|
) {
|
||||||
Varyings out;
|
Varyings out;
|
||||||
constant Vertex &v = verticies[vid];
|
constant Vertex &v = verticies[vid + indexOffset];
|
||||||
float2 viewSize(512.0f, 512.0f);
|
float2 viewSize(512.0f, 512.0f);
|
||||||
float4 transformedVertex = transformMatrix * float4(v.position, 0.0, 1.0);
|
float4 transformedVertex = transformMatrix * float4(v.position, 0.0, 1.0);
|
||||||
out.position = float4(screenSpaceToRelative(float2(transformedVertex.x, transformedVertex.y) + offset, viewSize), 0.0, 1.0);
|
out.position = float4(screenSpaceToRelative(float2(transformedVertex.x, transformedVertex.y) + offset, viewSize), 0.0, 1.0);
|
||||||
|
|||||||
@ -458,11 +458,7 @@ public final class MeshRenderer: MTKView {
|
|||||||
let baseVertexIndex = Int32(startVertexIndex)
|
let baseVertexIndex = Int32(startVertexIndex)
|
||||||
|
|
||||||
segment.triangles.withUnsafeBytes { triangles in
|
segment.triangles.withUnsafeBytes { triangles in
|
||||||
let trianglesBase = triangles.baseAddress!.assumingMemoryBound(to: Int32.self)
|
let _ = memcpy(indexData.advanced(by: nextIndexIndex), triangles.baseAddress!, triangles.count)
|
||||||
let indexBase = indexData.advanced(by: nextIndexIndex)
|
|
||||||
for i in 0 ..< triangles.count / 4 {
|
|
||||||
indexBase[i] = trianglesBase[i] + baseVertexIndex
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
nextIndexIndex += segment.triangles.count / 4
|
nextIndexIndex += segment.triangles.count / 4
|
||||||
|
|
||||||
@ -527,6 +523,8 @@ public final class MeshRenderer: MTKView {
|
|||||||
transformBytes[15] = Float(transform.m44)
|
transformBytes[15] = Float(transform.m44)
|
||||||
|
|
||||||
renderEncoder.setVertexBytes(&transformBytes, length: transformBytes.count * 4, index: 2)
|
renderEncoder.setVertexBytes(&transformBytes, length: transformBytes.count * 4, index: 2)
|
||||||
|
var baseVertexIndexBytes: Int32 = Int32(baseVertexIndex)
|
||||||
|
renderEncoder.setVertexBytes(&baseVertexIndexBytes, length: 4, index: 3)
|
||||||
|
|
||||||
renderEncoder.setVertexBuffer(mesh.vertexBuffer, offset: 0, index: 0)
|
renderEncoder.setVertexBuffer(mesh.vertexBuffer, offset: 0, index: 0)
|
||||||
renderEncoder.drawIndexedPrimitives(type: .triangle, indexCount: iCount, indexType: .uint32, indexBuffer: mesh.indexBuffer, indexBufferOffset: iStart * 4)
|
renderEncoder.drawIndexedPrimitives(type: .triangle, indexCount: iCount, indexType: .uint32, indexBuffer: mesh.indexBuffer, indexBufferOffset: iStart * 4)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user