2016-09-20 12 views
1

私はカメラの位置を制御するためにマウスを使用したいと思います。現在のカメラ位置を保持するグローバル変数float3 posを持って、次の更新がposからのものになるようにします。メタルシェーディング言語のグローバル変数

私はMetalglobal variableを宣言:

float3 pos; 

と、このエラーが発生します。

Global variable must have a constant address space qualifier.

しかし、私はconstantを追加する場合、それが唯一のため、私は私の現在の位置を更新することはできませんを読んなります。

代替方法として、structを使用していると考えることができます。しかし、それはやりすぎです。

これを行うにはどのような方法が最適ですか?

答えて

0

実際、読み取り専用変数(定数)は、MSLにグローバルとして定義できます。これを行うには、バッファを介してホスト(API)コードからシェーダにマウス座標を送信します。ここで、これらの座標の値を更新し、ホストコードが更新された値をリアルタイムで見るようにバッファを更新します。ここにはplaygroundがあり、レンダリングされた領域内をクリックすると、コンソールにマウスの座標が表示されます。

+0

私はあなたのコードについてこう言っています: 'kernelb 'に' mousebuffer'と 'outbuffer'を送ります。 'Mousebuffer'は常に更新され、' outbuffer'はマウスがダウンしたときにのみ更新されます。 – sooon

+1

が正しい。ただし、UIクラスからキーストロークを含む任意のイベント(または座標)を送信できます。 – Marius

関連する問題