2017-05-22 4 views
1

Sehr neu für Grafiken im Allgemeinen, beginnend mit Metal für unmittelbare Bedürfnisse, wird OpenGL bald genug ausprobieren.was ist colorAttachment [n] in Metall?

War fragen sich, was die Frage in Laien bedeutet. Was ist das Ausmaß von 'n'? Ich habe es gerade als 0 im 2D Dreieck benutzt.

Antwort

3

Im Allgemeinen werden die gerenderten Bilder während eines Render-Durchlaufs (zumindest zeitweise) in den Farbanhängen gespeichert. Es ist üblich, nur einen Farbanhang bei Index 0 zu verwenden, also ist es gut, was Sie tun. Es ist auch möglich, mehrere Farbanhänge gleichzeitig zu rendern, weshalb es ein Array gibt. Es ist eine fortgeschrittene Technik, um die Sie sich keine Sorgen machen müssen, bis Sie die Notwendigkeit erkennen. An diesem Punkt sollte es einfach sein, wie es gemacht wird.

Es gibt zwei Stellen, wo colorAttachments[n] in Metal erscheint. Erste ist in MTLRenderPipelineDescriptor. Die andere ist in MTLRenderPassDescriptor.

In beiden Fällen ist der Umfang in der Tabelle Metal Implementation Limits im Abschnitt "Render-Ziele" in der Zeile "Maximale Anzahl der Farbwiedergabeziele pro Render-Deskriptor" angegeben.

Für MTLRenderPipelineDescriptor, colorAttachments[n] ist eine Referenz auf eine MTLRenderPipelineColorAttachmentDescriptor. Hier konfigurieren Sie das Pixelformat, die Schreibmaske und die Farbmischung.

Für MTLRenderPassDescriptor, colorAttachments[n] ist eine Referenz auf eine MTLRenderPassColorAttachmentDescriptor. Dies ist eine Unterklasse von MTLRenderPassAttachmentDescriptor, in der die meisten Eigenschaften definiert sind. Hier konfigurieren Sie, welcher Teil der Textur gerendert wird, was mit den Daten dieser Textur passieren soll, wenn der Render-Durchlauf beginnt und endet, und, wenn sie gelöscht werden soll, auf welche Farbe sie gelöscht werden soll.

Informationen zu Farbanhängen werden auf diese beiden Objekte aufgeteilt, je nachdem, wie teuer es ist, sie zu ändern. Das Render-Pipeline-Statusobjekt ist ziemlich teuer aus dem Pipelinedeskriptor zu erstellen. Normalerweise würden Sie alle Ihre Pipelinezustandsobjekte einmal in einem Lauf erstellen und sie für den Rest der Laufzeit Ihrer App wiederverwenden.

Im Gegensatz dazu werden Render-Befehlscodierer ziemlich häufig aus Render-Pass-Deskriptoren erstellt. mindestens einmal pro Frame. Sie können relativ kostengünstig erstellt werden, sodass Sie den Deskriptor ändern und einen neuen erstellen können, der anderswo gerendert wird.

Das Farbanfügungspixelformat des Renderpipelinestatus muss mit dem Pixelformat der Textur der Farbanfügetextur des Renderbefehlscodierers übereinstimmen.

Verwandte Themen