基本的に、私のコードでは glDeleteTextures と glBufferData 関数をフックしています。テクスチャのリストとバッファのリストを保存します。バッファー リストには、チェックサムとバッファーへのポインターが保持されます。以下のコードは、データがグラフィックス カードに到達する前にインターセプトします。
Hook_glDeleteTextures(GLsizei n, const GLuint* textures)
{
for (int I = 0; I < n; ++I)
{
if (ListOfTextures[I] == textures[I]) //??? Not sure if correct..
{
//Erase them from list of textures..
}
}
(*original_glDeleteTextures)(n, textures);
}
そして、バッファに対しても同じことを行います。バッファとテクスチャを次のようなリストに保存します。
void Hook_glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage)
{
Buffer.size = size;
Buffer.target = target;
Buffer.data = data;
Buffer.usage = usage;
ListOfBuffers.push_back(Buffer);
(*original_glBufferData(target, size, data, usage);
}
クライアントが削除するたびに削除する必要があります。これどうやってするの?デバッガーを使用しましたが、どのテクスチャーとバッファーが削除されているかを正確に認識しているようです。
私はそれを間違っていますか?渡されたポインタを反復処理してテクスチャを削除する必要がありますか?