2016-09-20 1 views
1

Ich möchte mit der Maus meine Kameraposition steuern. Die Idee ist, eine globale Variable float3 pos zu haben, die die aktuelle Kameraposition trägt, so dass das nächste Update von der pos selbst sein wird.Globale Variable in Metal Shading Sprache

Wenn ich erkläre ein global variable in Metal:

float3 pos; 

und diese Fehlermeldung erhalten:

Global variable must have a constant address space qualifier.

Aber wenn ich constant hinzufügen, nur so kann ich nicht meine aktuelle Position aktualisiert werden lesen.

Eine Alternative, die ich mir vorstellen kann, ist struct. Aber das scheint ein bisschen vorbei zu sein.

Was ist der beste Weg, dies zu tun?

Antwort

0

Tatsächlich können nur schreibgeschützte Variablen (Konstanten) in MSL als globale Variablen definiert werden. Sie können dies tun, indem Sie die Mauskoordinaten vom Host-Code (API) über einen Puffer an Ihren Shader senden. Aktualisieren Sie dort den Wert dieser Koordinaten und aktualisieren Sie dann den Puffer, damit der Host-Code Ihre aktualisierten Werte in Echtzeit sehen kann. Hier sehen Sie eine playground, die Ihnen die Mauskoordinaten in der Konsole zeigt, während Sie in den gerenderten Bereich klicken.

+0

Bin ich richtig, wenn ich das über deinen Code sage: sende 'mousebuffer' und' outbuffer' an 'kernel'. 'Mousepuffer' immer updaten und' outbuffer' nur updaten, wenn die Maus nicht läuft? – sooon

+1

korrekt. Sie können jedoch das gewünschte Ereignis (oder die gewünschten Koordinaten) aus der Benutzerschnittstellenklasse einschließlich der Tastenanschläge senden. – Marius