Glad: 接尾辞のない定義は、OpenGLESでは定義しないでください

作成日 2020年06月18日  ·  8コメント  ·  ソース: Dav1dde/glad

生成されたファイル(glad v1)で、多くの関数とタイプのサフィックス(glObjectLabelKHRなど)バージョンとサフィックスなし(glObjectLabelなど)バージョンの両方を取得していることに気付きました。

少なくとも、これはメモリとCPUが重複する関数ポインタをロードする無駄ですが、実際には仕様に違反していると思います。 KHR_debug(https://www.khronos.org/registry/OpenGL/extensions/KHR/KHR_debug.txt)の定義は、次のように述べています。

この拡張仕様では、新しいエントリポイント、タイプ、およびトークンにサフィックスなしの名前が使用されます。 これは、OpenGLに対する実装には正しいです。 ただし、OpenGL ESコンテキストで実装された場合、すべての新しいエントリポイント、タイプ、およびトークンにはKHRサフィックスが付けられます。

加えて、全体を通して同様の文。

理想的には、ジェネレーターでサフィックスのないバージョンを無視するようにします。 それは可能ですか?

編集:明確にするために、これらの関数は、私が喜んで要求しているOpenGL ES3.1仕様の一部ではありません。 私のコマンドラインは "python -m glad--out-pathです。--profile =" core "--api =" gles2 = 3.1 "--generator =" c "--spec =" gl "--extensions = 「GL_KHR_debug」-reproducible--no-loader」。

bug glad1 glad2

全てのコメント8件

これは、glad1で修正するのは簡単ではありません。 拡張機能に含める関数/コマンドの決定は、生成するAPIの知識が得られる前に行われます。

Glad2は最初は正しく実行しましたが、Vulkan1.1を使用しました。 エイリアスを解決する必要があり、 glObjectLabelKHRのエイリアスはglObjectLabel設定されています。 エイリアスを解決する必要がある理由は、vk1.0拡張シンボルがvk1.1コアに昇格したことで仕様がおかしくなったためです。

これは間違いなく両方のバージョンのバグです:(。

glad2で修正されましたが、実際には上記の問題とは関係ありませんでしたが、比較的類似しています。

これをglad​​1で修正したいかどうかはわかりませんが、 require指示が行われる方法は完全に間違っています。

私はうれしいです(しゃれは意図されていません)それは迅速な修正でした! これは私が今うれしいv2を試さなければならないことを意味すると思います...

_KHRサフィックスが拡張機能で使用されるすべてのトークンに適用されるのか、それとも新しいトークンだけに適用されるのかについて、仕様がかなり混乱していることがわかりました。 拡張ドキュメントからこの表の値が指定されているものだけを想定しています(他すでに存在している

        BUFFER                                           0x82E0
        SHADER                                           0x82E1
        PROGRAM                                          0x82E2
        VERTEX_ARRAY
        QUERY                                            0x82E3
        PROGRAM_PIPELINE                                 0x82E4
        TRANSFORM_FEEDBACK
        SAMPLER                                          0x82E6
        TEXTURE
        RENDERBUFFER
        FRAMEBUFFER

期待どおりにGL_BUFFER_KHRを取得します( GL_BUFFERありません)。 私が取得GL_FRAMEBUFFER (とないGL_FRAMEBUFFER_KHR私は期待して考えると)。 しかし、私はGL_VERTEX_ARRAY_KHRGL_VERTEX_ARRAYではありません)。これはわかりません。

何か洞察はありますか?

  • GL_FRAMEBUFFERはgles22.0の一部です。
  • GL_BUFFER_KHRGL_KHR_debug gles2 APIからのものです(以下を参照)
  • GL_VERTEX_ARRAY_KHRGL_KHR_debug gles2 APIからのものです(以下を参照)
  • GL_VERTEX_ARRAYはgles2 3.2のみですが、3.1を生成します
        <extension name="GL_KHR_debug" supported="gl|glcore|gles1|gles2">
            <require api="gl" comment="KHR extensions *mandate* suffixes for ES, unlike for GL">
                <enum name="GL_DEBUG_OUTPUT_SYNCHRONOUS"/>
                <enum name="GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH"/>
                <enum name="GL_DEBUG_CALLBACK_FUNCTION"/>
                <enum name="GL_DEBUG_CALLBACK_USER_PARAM"/>
                <enum name="GL_DEBUG_SOURCE_API"/>
                <enum name="GL_DEBUG_SOURCE_WINDOW_SYSTEM"/>
                <enum name="GL_DEBUG_SOURCE_SHADER_COMPILER"/>
                <enum name="GL_DEBUG_SOURCE_THIRD_PARTY"/>
                <enum name="GL_DEBUG_SOURCE_APPLICATION"/>
                <enum name="GL_DEBUG_SOURCE_OTHER"/>
                <enum name="GL_DEBUG_TYPE_ERROR"/>
                <enum name="GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR"/>
                <enum name="GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR"/>
                <enum name="GL_DEBUG_TYPE_PORTABILITY"/>
                <enum name="GL_DEBUG_TYPE_PERFORMANCE"/>
                <enum name="GL_DEBUG_TYPE_OTHER"/>
                <enum name="GL_DEBUG_TYPE_MARKER"/>
                <enum name="GL_DEBUG_TYPE_PUSH_GROUP"/>
                <enum name="GL_DEBUG_TYPE_POP_GROUP"/>
                <enum name="GL_DEBUG_SEVERITY_NOTIFICATION"/>
                <enum name="GL_MAX_DEBUG_GROUP_STACK_DEPTH"/>
                <enum name="GL_DEBUG_GROUP_STACK_DEPTH"/>
                <enum name="GL_BUFFER"/>
                <enum name="GL_SHADER"/>
                <enum name="GL_PROGRAM"/>
                <enum name="GL_VERTEX_ARRAY"/>
                <enum name="GL_QUERY"/>
                <enum name="GL_PROGRAM_PIPELINE"/>
                <enum name="GL_SAMPLER"/>
                <enum name="GL_MAX_LABEL_LENGTH"/>
                <enum name="GL_MAX_DEBUG_MESSAGE_LENGTH"/>
                <enum name="GL_MAX_DEBUG_LOGGED_MESSAGES"/>
                <enum name="GL_DEBUG_LOGGED_MESSAGES"/>
                <enum name="GL_DEBUG_SEVERITY_HIGH"/>
                <enum name="GL_DEBUG_SEVERITY_MEDIUM"/>
                <enum name="GL_DEBUG_SEVERITY_LOW"/>
                <enum name="GL_DEBUG_OUTPUT"/>
                <enum name="GL_CONTEXT_FLAG_DEBUG_BIT"/>
                <enum name="GL_STACK_OVERFLOW"/>
                <enum name="GL_STACK_UNDERFLOW"/>
                <command name="glDebugMessageControl"/>
                <command name="glDebugMessageInsert"/>
                <command name="glDebugMessageCallback"/>
                <command name="glGetDebugMessageLog"/>
                <command name="glPushDebugGroup"/>
                <command name="glPopDebugGroup"/>
                <command name="glObjectLabel"/>
                <command name="glGetObjectLabel"/>
                <command name="glObjectPtrLabel"/>
                <command name="glGetObjectPtrLabel"/>
                <command name="glGetPointerv"/>
            </require>
            <require api="gles2">
                <enum name="GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR"/>
                <enum name="GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_KHR"/>
                <enum name="GL_DEBUG_CALLBACK_FUNCTION_KHR"/>
                <enum name="GL_DEBUG_CALLBACK_USER_PARAM_KHR"/>
                <enum name="GL_DEBUG_SOURCE_API_KHR"/>
                <enum name="GL_DEBUG_SOURCE_WINDOW_SYSTEM_KHR"/>
                <enum name="GL_DEBUG_SOURCE_SHADER_COMPILER_KHR"/>
                <enum name="GL_DEBUG_SOURCE_THIRD_PARTY_KHR"/>
                <enum name="GL_DEBUG_SOURCE_APPLICATION_KHR"/>
                <enum name="GL_DEBUG_SOURCE_OTHER_KHR"/>
                <enum name="GL_DEBUG_TYPE_ERROR_KHR"/>
                <enum name="GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_KHR"/>
                <enum name="GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_KHR"/>
                <enum name="GL_DEBUG_TYPE_PORTABILITY_KHR"/>
                <enum name="GL_DEBUG_TYPE_PERFORMANCE_KHR"/>
                <enum name="GL_DEBUG_TYPE_OTHER_KHR"/>
                <enum name="GL_DEBUG_TYPE_MARKER_KHR"/>
                <enum name="GL_DEBUG_TYPE_PUSH_GROUP_KHR"/>
                <enum name="GL_DEBUG_TYPE_POP_GROUP_KHR"/>
                <enum name="GL_DEBUG_SEVERITY_NOTIFICATION_KHR"/>
                <enum name="GL_MAX_DEBUG_GROUP_STACK_DEPTH_KHR"/>
                <enum name="GL_DEBUG_GROUP_STACK_DEPTH_KHR"/>
                <enum name="GL_BUFFER_KHR"/>
                <enum name="GL_SHADER_KHR"/>
                <enum name="GL_PROGRAM_KHR"/>
                <enum name="GL_VERTEX_ARRAY_KHR"/>
                <enum name="GL_QUERY_KHR"/>
                <enum name="GL_PROGRAM_PIPELINE_KHR"/>
                <enum name="GL_SAMPLER_KHR"/>
                <enum name="GL_MAX_LABEL_LENGTH_KHR"/>
                <enum name="GL_MAX_DEBUG_MESSAGE_LENGTH_KHR"/>
                <enum name="GL_MAX_DEBUG_LOGGED_MESSAGES_KHR"/>
                <enum name="GL_DEBUG_LOGGED_MESSAGES_KHR"/>
                <enum name="GL_DEBUG_SEVERITY_HIGH_KHR"/>
                <enum name="GL_DEBUG_SEVERITY_MEDIUM_KHR"/>
                <enum name="GL_DEBUG_SEVERITY_LOW_KHR"/>
                <enum name="GL_DEBUG_OUTPUT_KHR"/>
                <enum name="GL_CONTEXT_FLAG_DEBUG_BIT_KHR"/>
                <enum name="GL_STACK_OVERFLOW_KHR"/>
                <enum name="GL_STACK_UNDERFLOW_KHR"/>
                <command name="glDebugMessageControlKHR"/>
                <command name="glDebugMessageInsertKHR"/>
                <command name="glDebugMessageCallbackKHR"/>
                <command name="glGetDebugMessageLogKHR"/>
                <command name="glPushDebugGroupKHR"/>
                <command name="glPopDebugGroupKHR"/>
                <command name="glObjectLabelKHR"/>
                <command name="glGetObjectLabelKHR"/>
                <command name="glObjectPtrLabelKHR"/>
                <command name="glGetObjectPtrLabelKHR"/>
                <command name="glGetPointervKHR"/>
            </require>
            <require api="gl" profile="compatibility">
                <enum name="GL_DISPLAY_LIST"/>
            </require>
        </extension>

ソース: https

どうもありがとうございます。 それは理にかなっている; GL_VERTEX_ARRAYが定義されている場所が見つからなかったため、混乱しました。

この問題を解決できてうれしいです。glad1では未修正のままにしておきますか?

ええ、それについて考えて、私はglad1でこれを修正しません。 これはバグです、はい、しかしそれはあまりにも多くのシンボルを生成するので、それは「ただ」迷惑になることになります。

報告ありがとうございます!

PS:glad2からの最新のコミットをチェックアウトしたいかもしれません、私はあまりにも多くの改行を生成しました。

迅速な修正をありがとう!

PS:glad2からの最新のコミットをチェックアウトしたいかもしれません、私はあまりにも多くの改行を生成しました。

= Pに気づきました

このページは役に立ちましたか?
0 / 5 - 0 評価