mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-11-25 09:32:46 +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 float2 &offset[[buffer(1)]],
|
||||
unsigned int vid[[vertex_id]],
|
||||
constant float4x4 &transformMatrix[[buffer(2)]]
|
||||
constant float4x4 &transformMatrix[[buffer(2)]],
|
||||
constant int &indexOffset[[buffer(3)]]
|
||||
) {
|
||||
Varyings out;
|
||||
constant Vertex &v = verticies[vid];
|
||||
constant Vertex &v = verticies[vid + indexOffset];
|
||||
float2 viewSize(512.0f, 512.0f);
|
||||
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);
|
||||
|
||||
@ -458,11 +458,7 @@ public final class MeshRenderer: MTKView {
|
||||
let baseVertexIndex = Int32(startVertexIndex)
|
||||
|
||||
segment.triangles.withUnsafeBytes { triangles in
|
||||
let trianglesBase = triangles.baseAddress!.assumingMemoryBound(to: Int32.self)
|
||||
let indexBase = indexData.advanced(by: nextIndexIndex)
|
||||
for i in 0 ..< triangles.count / 4 {
|
||||
indexBase[i] = trianglesBase[i] + baseVertexIndex
|
||||
}
|
||||
let _ = memcpy(indexData.advanced(by: nextIndexIndex), triangles.baseAddress!, triangles.count)
|
||||
}
|
||||
nextIndexIndex += segment.triangles.count / 4
|
||||
|
||||
@ -527,6 +523,8 @@ public final class MeshRenderer: MTKView {
|
||||
transformBytes[15] = Float(transform.m44)
|
||||
|
||||
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.drawIndexedPrimitives(type: .triangle, indexCount: iCount, indexType: .uint32, indexBuffer: mesh.indexBuffer, indexBufferOffset: iStart * 4)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user