Est-il possible de modifier la taille de la mémoire tampon lors de l'exécution? Nous attribuons la taille de la mémoire tampon lors de l'enregistrement de notre device
:langue d'ombrage - modifier la taille du tampon
device = MTLCreateSystemDefaultDevice()
queue = device!.makeCommandQueue()
do {
let library = device!.newDefaultLibrary()!
let kernel = library.makeFunction(name: "compute")!
cps = try device!.makeComputePipelineState(function: kernel)
} catch let e {
Swift.print("\(e)")
}
paramBuffer = device!.makeBuffer(length: MemoryLayout<Float>.size*2, options: [])
nous le mettre à jour en conséquence au moment de l'exécution:
override public func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
if let drawable = currentDrawable {
let command_buffer = queue.makeCommandBuffer()
let command_encoder = command_buffer.makeComputeCommandEncoder()
command_encoder.setComputePipelineState(cps)
command_encoder.setTexture(drawable.texture, at: 0)
command_encoder.setBuffer(paramBuffer, offset: 0, at: 0)
Il fonctionne pour l'instant. Mais que faire si j'ai un scénario qui, ont des particules, à différents états ont des comptes différents. Par exemple, au début, j'ai 500 particules, Après un certain temps, les particules augmentent lentement de 10 à la fois, disons 510, 520, 530, ...
Comment dois-je aborder ce scénario? dois-je refaire le queue
chaque fois qu'il ya un changement sur les comptes de particules ?:
queue = device!.makeCommandQueue()
do {
let library = device!.newDefaultLibrary()!
let kernel = library.makeFunction(name: "compute")!
cps = try device!.makeComputePipelineState(function: kernel)
} catch let e {
Swift.print("\(e)")
}
paramBuffer = device!.makeBuffer(length: MemoryLayout<Float>.size*particleCount, options: [])//<--particleCount
Ou une meilleure façon de le faire?