3

現時点で glUnmapBuffer を見ると、一部のドキュメントによると、成功 (GL_TRUE) または失敗 (GL_FALSE) を示すために GLboolean が返されます。おそらく失敗すると、GLエラーが設定されます。

私の質問は、デバッグ ビルドで OpenGL を呼び出すたびに glGetError をチェックしていると仮定して、リリース ビルドで GL_TRUE が返されるかどうかを確認するためにどのような状況でチェックする必要があるかということです。

というか、他の OpenGL 関数が返さないのに、なぜこの関数はブール値の成功/失敗を返す必要があるのでしょうか? ここで組織化の原則を探しています。つまり、gl エラーを設定せずに GL_FALSE を返すことがありますか?

編集:

OK、答えが見つかりました。面白いのでこのままにしておこうか迷っています。 このページでは:

「その低レベルの性質のため、これらの保護を緩和する必要があります。したがって、バッファがマップされている間に、何らかの破損が発生する可能性があります。これが発生した場合、 glUnmapBuffer を呼び出すと GL_FALSE が返されます。そのときポイント、問題のバッファの内容は未定義と見なされます。データが含まれているか、ランダムなガベージが含まれている可能性があります。」

Windows 7 以降を指定しているので、考慮する必要はありません (と思います)。皮肉なことに、私が Direct 3D から OpenGL に切り替えた理由の 1 つは、まさにこれでした (Direct 3D 9.0 を使用)。

4

1 に答える 1

3

Because it's not a regular OpenGL error:

(...) This can occur for system-specific reasons that affect the availability of graphics memory, such as screen mode changes. In such situations, GL_FALSE is returned and the data store contents are undefined. An application must detect this rare condition and reinitialize the data store.

This special mechanism was undoubtfully introduced to separate such cases from typical user interaction errors caught by glGetError.

于 2013-10-23T14:46:27.843 に答える