3

このフラグメント シェーダー コードは Windows でコンパイルされますが、OS X (Mountain Lion、3.2 コア コンテキストを使用) ではエラーがスローされます。

#version 150 core
in int vinstance_id;
uniform uint object_id[16];
out uint id_map;

void main() {
    id_map = object_id[vinstance_id];
}

エラーは次のとおりです。

ERROR: 0:2: int can't be an in in the fragment shader

私はそれが正しいとは思わない: GLSL 1.50 仕様では、セクション 4.3.4 でフラグメント シェーダーについて次のように述べられています。

フラグメント入力は、符号付きおよび符号なしの整数と整数ベクトル、float ... のみにすることができます。

これはドライバーのバグですか?

4

1 に答える 1

10

いいえ、仕様を完全に読んでいませんでした。

符号付きまたは符号なし整数または整数ベクトルであるフラグメントシェーダー入力は、補間修飾子flatで修飾する必要があります。

(誰かが確認したい場合は、リンクされたドキュメントの32ページのほぼ中央にあります)

于 2013-02-12T14:30:06.110 に答える