Merge pull request #47 from dscyrescotti/feature/photo-render-pass

Fix content disappearing in subsequent render
This commit is contained in:
Aye Chan
2024-06-20 00:21:23 +07:00
committed by GitHub
3 changed files with 15 additions and 14 deletions

View File

@@ -48,35 +48,36 @@ final class Photo: @unchecked Sendable, Equatable, Comparable {
}
func generateVertices() {
let minX = origin.x - size.width / 2
let maxX = origin.x + size.width / 2
let minY = origin.y - size.height / 2
let maxY = origin.y + size.height / 2
let minX = origin.x - (size.width / 2)
let maxX = origin.x + (size.width / 2)
let minY = origin.y - (size.height / 2)
let maxY = origin.y + (size.height / 2)
vertices = [
PhotoVertex(x: minX, y: minY, textCoord: CGPoint(x: 0, y: 0)),
PhotoVertex(x: maxX, y: minY, textCoord: CGPoint(x: 1, y: 0)),
PhotoVertex(x: minX, y: maxY, textCoord: CGPoint(x: 0, y: 1)),
PhotoVertex(x: maxX, y: minY, textCoord: CGPoint(x: 1, y: 0)),
PhotoVertex(x: maxX, y: maxY, textCoord: CGPoint(x: 1, y: 1)),
PhotoVertex(x: minX, y: maxY, textCoord: CGPoint(x: 0, y: 1)),
PhotoVertex(x: maxX, y: maxY, textCoord: CGPoint(x: 1, y: 1))
]
}
}
extension Photo: Drawable {
func prepare(device: any MTLDevice) {
if vertexBuffer == nil {
vertexCount = vertices.endIndex
vertexBuffer = device.makeBuffer(bytes: vertices, length: vertexCount * MemoryLayout<PhotoVertex>.stride, options: [])
}
if texture == nil, let url = bookmark?.getBookmarkURL() {
texture = Textures.createPhotoTexture(for: url, on: device)
}
vertexCount = vertices.endIndex
vertexBuffer = device.makeBuffer(bytes: vertices, length: vertexCount * MemoryLayout<PhotoVertex>.stride, options: [.cpuCacheModeWriteCombined])
}
func draw(device: any MTLDevice, renderEncoder: any MTLRenderCommandEncoder) {
prepare(device: device)
renderEncoder.setFragmentTexture(texture, index: 0)
renderEncoder.setVertexBuffer(vertexBuffer, offset: 0, index: 0)
renderEncoder.drawPrimitives(type: .triangleStrip, vertexStart: 0, vertexCount: vertices.count)
renderEncoder.drawPrimitives(type: .triangle, vertexStart: 0, vertexCount: vertices.count)
vertexBuffer = nil
}
}

View File

@@ -69,8 +69,8 @@ class EraserRenderPass: RenderPass {
computeEncoder.label = "Quad Render Pass"
let quadBuffer = renderer.device.makeBuffer(bytes: &quads, length: MemoryLayout<Quad>.stride * quadCount, options: [])
let indexBuffer = renderer.device.makeBuffer(length: MemoryLayout<UInt>.stride * quadCount * 6, options: [])
let vertexBuffer = renderer.device.makeBuffer(length: MemoryLayout<QuadVertex>.stride * quadCount * 4, options: [])
let indexBuffer = renderer.device.makeBuffer(length: MemoryLayout<UInt>.stride * quadCount * 6, options: [.cpuCacheModeWriteCombined])
let vertexBuffer = renderer.device.makeBuffer(length: MemoryLayout<QuadVertex>.stride * quadCount * 4, options: [.cpuCacheModeWriteCombined])
computeEncoder.setComputePipelineState(quadPipelineState)
computeEncoder.setBuffer(quadBuffer, offset: 0, index: 0)

View File

@@ -79,8 +79,8 @@ class StrokeRenderPass: RenderPass {
let quadCount = stroke.quads.endIndex
var quads = stroke.quads
let quadBuffer = renderer.device.makeBuffer(bytes: &quads, length: MemoryLayout<Quad>.stride * quadCount, options: [])
let indexBuffer = renderer.device.makeBuffer(length: MemoryLayout<UInt>.stride * quadCount * 6, options: [])
let vertexBuffer = renderer.device.makeBuffer(length: MemoryLayout<QuadVertex>.stride * quadCount * 4, options: [])
let indexBuffer = renderer.device.makeBuffer(length: MemoryLayout<UInt>.stride * quadCount * 6, options: [.cpuCacheModeWriteCombined])
let vertexBuffer = renderer.device.makeBuffer(length: MemoryLayout<QuadVertex>.stride * quadCount * 4, options: [.cpuCacheModeWriteCombined])
computeEncoder.setComputePipelineState(quadPipelineState)
computeEncoder.setBuffer(quadBuffer, offset: 0, index: 0)