2016-09-20 4 views
1

Я хочу использовать мышь для управления моим положением камеры. Идея состоит в том, чтобы иметь глобальную переменную float3 pos, которая несут текущую позицию камеры, чтобы следующее обновление было от самого pos.Глобальная переменная в Metal Shading Language

Когда я объявить global variable в Metal:

float3 pos; 

и получить эту ошибку:

Global variable must have a constant address space qualifier.

Но если добавить constant, он стал читать только таким образом я не могу обновить свою текущую позицию.

Альтернатива, о которой я могу думать, это использовать struct. Но это кажется немного более.

Каков наилучший способ для этого?

ответ

0

Действительно, только переменные только для чтения (константы) могут быть определены как глобальные значения в MSL. Вы можете сделать это, отправив координаты мыши из кода хоста (API) через буфер, в ваш шейдер. Там обновляются значение этих координат, а затем обновляется буфер, поэтому хост-код видит ваши обновленные значения в режиме реального времени. Вот playground, который показывает координаты мыши в консоли, когда вы нажимаете внутри визуализированной области.

+0

Я прав, если я говорю об этом коде: отправьте 'mousebuffer' и' outbuffer' в 'kernel'. 'Mousebuffer' всегда обновляется и' outbuffer' обновляется только при отключении мыши? – sooon

+1

правильный. однако вы можете отправить какое-либо событие (или координаты) из класса UI, включая нажатия клавиш. – Marius