2016-08-03 13 views
1

メタルシェイダーにヘッダーファイルを含めることを試みています。このようなプロトタイプのために 、メタル:不明な型名float4

float4 someFunction(float4 v); 

私は、このエラーメッセージを取得し、他のエラーがそれがない示唆しているが、それは...それはシェーダプログラムのヘッダです理解していないようです

Unknown type name 'float4'; did you mean 'float'? 

。例えば、私は、私はこのエラーを取得し、ここで私が使用している場合は、私が

constant static float someK = 2.0; 

を追加する場合、固定することができ

Global variables must have a constant address space qualifier 

static float someK = 2.0; 

をアドレス空間を指定しない場合参照、私はまた、これらのタイプのエラーを取得する

Reference type must include device, threadgroup, constant, or thread address space qualifier 

コンパイラがそれがシェーダであることを知っているかのように見えます。なぜfloat4について知りませんか? :(

答えて

1

あなたは、この例のように、あなたのシェーダの最初の2行を持っていることを確認してください:

#include <metal_stdlib> 

using namespace metal; 

float4 someFunction(float4 v); 

kernel void compute(texture2d<float, access::write> output [[texture(0)]], 
        uint2 gid [[thread_position_in_grid]]) 
{ 
    float4 color = float4(0, 0.5, 0.5, 1); 
    output.write(color, gid); 
} 

これは私のために正常に動作します

+0

おかげで、私は中metal_stdlibを含める必要はありませんでした。!私のヘッダーファイルが、私はベクトル型のヘッダーに金属の名前空間が必要だと気付かなかった...ダム!ありがとうagain :) :) – endavid

+0

これは私のために働いていない - 最近何か変わった?通常のヘッダーでは動作しますが、SwiftとMetalの両方から使用されるブリッジヘッダーでは機能しません。 – bsabiston

関連する問題