2

クロスプラットフォームのOpenGL関数読み込みライブラリを作成しています。Windowsでは、コンパイラー(奇妙なことに、VSwglGetProcAddressGCCの両方)は、ある種類の関数ポインター(戻り型がからの戻り型void(*)())を別の種類の関数ポインターに暗黙的に変換することで問題ないように見えます。

ただし、 Linux上のGCCはそうではありません。glXGetProcAddressを返しますがvoid(*)()、常に警告を発行します。そして、OpenGLには文字通り何千ものこれらのものがあるので、それは完全に無関係な巨大な診断スピューになります。

この特定の警告を無効にする方法はありますか?GCCがシャットダウンするようにコードを再配置するか、#pragmaまたは何らかの方法で?全部試してみました#pragma diagnostic ignore -Wblahblahが、警告に一致する「何とか」が見つかりませんでした。

4

1 に答える 1

3

提供されているマクロを使用して正しい型を取得することになっていると確信しています。たとえば、gl3w OpenGL拡張ローダー(このようなコードを生成するには、Pythonスクリプトを実行する必要があります)から取得すると、次のような行があります。

gl3wBindImageTexture = (PFNGLBINDIMAGETEXTUREPROC)get_proc("glBindImageTexture");

真ん中の奇妙なPFNGLBINDIMAGETEXTUREPROCものは、関数の正しい関数型のマクロですglBindImageTexture(その名前は実際にはPointer unctioFであることがわかりますN GLBINDIMAGETEXTURE PROC)。

于 2012-10-24T17:43:02.353 に答える