私はゲームエンジンに取り組んでおり、大きく進化しています。エンジンは Mac でも動作する必要があるため、私はまだ OpenGL 3.2 と GLSL 1.2 を使用しています :-(.GLEW を使用すると、拡張機能の問題が解決すると思われます。
編集:一方、質問の一部が回答されています-次の編集で読んでください:
Windows と Mac の両方で常にシェーダーを動作させることができましたが、GLSL コードに#extension GL_EXT_gpu_shader4 : enableのような行を追加して Mac で動作させる必要がある場合がありました。同じシェーダーをコンパイルすると、私の Windows バージョンでは警告が表示されるようですが、動作します。
しかし、ジオメトリ シェーダーを使い始めてから、悪夢が始まりました。何らかの理由で、Mac は#extension GL_EXT_gpu_shader4 : enableを使用することを期待していますが、Windows は#extension GL_EXT_geometry_shader4 : enable を使用することを期待しています。これにより、プラットフォームに依存しないシェーダーを作成することがわかりにくくなります。
また、これはさらに面倒です: Windows バージョンでは、glTransformFeedbackVaryings を使用する必要があります。GLEWによって Mac で使用できるようになると思いますが、Windows バージョンでは機能しないglTransformFeedbackVaryingsEXTを明示的に使用する必要があります。したがって、 APPLEが必要なものを使用するには #ifdef が必要です。glBeginTransformFeedbackとglBeginTransformFeedbackEXTの同じ問題。
しかし、どちらもglProgramParameteriEXTを受け入れます。そこでは区別は必要ありません...
私が問題を抱えているのはトランスフォーム フィードバックのみであることは理解していますが、これは一体何なのでしょうか?
OpenGL 拡張機能がどのように機能するかを理解していると思っていましたが、その理解を失い始めています。
別の Windows システム、別の Mac システム、または別の Linux システムでコードを実行すると、別のグラフィックス アダプターなどがあるため、新しい問題が発生すると思うところまで来ています。
誰でもこれを理解するのを手伝ってもらえますか? 拡張機能に関する OpenGL のマニュアルを読んだことがあるので、明らかな何かが欠けています。コードが常に機能することを確認するにはどうすればよいですか?
編集: GLEW を Mac バージョンから完全に削除し、Mac 独自の OpenGL 3.2 実装を完全に使用することで、すべての命名が正常になり、#extension GL_EXT_gpu_shader4 : enableをシェーダーから完全に削除できます。今私を心配させている唯一のことは、ジオメトリ シェーダーの場合、存在しないように見える関数glProgramParameteriが必要ですが、 glProgramParameteriEXTは存在するということです。なぜか、この機能は Windows でも動作します。なんで?すべてのシステム/ハードウェアで動作することを確信できますか?