これにはGPUのメモリ量が必要です。
glBufferData(GL_ARRAY_BUFFER, 1000, NULL, GL_DYNAMIC_DRAW);
これにより「GPU上」にメモリが割り当てられるという保証はありません。ドライバーは、GPUではなくCPUメモリにバッファオブジェクトを配置することを決定する可能性があります。
代わりに、「バッファオブジェクトに割り当てられるメモリの量」という質問を想定します。
1000バイト。それはあなたが求めたものであり、それはドライバーが割り当てるものです。
次に、同じバッファでこれを行うと、占有メモリはどのように変化しますか。
glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(poly), &poly);
現在バインドされているバッファオブジェクトにGL_ARRAY_BUFFER
ストレージが割り当てられていて、そのストレージに少なくともバイトが含まれている場合、最初のバイトをsizeof(poly)
ストレージにコピーすることにより、バッファのストレージを変更します。sizeof(poly)
&poly
ストレージが割り当てられていない場合、またはストレージがsizeof(poly)
バイトよりも小さい場合は、GL_INVALID_VALUE
エラーが発生します。
割り当てのサイズは変更されません。返されたポインタmalloc
を呼び出しても、によって返される割り当てのサイズが変更されないのと同じです。のような; ストレージを割り当てます(そのストレージにへのオプションがあります)。のような; データを既存のストレージにコピーします。memcpy
glBufferData
malloc
memcpy
glBufferSubData
memcpy
memcpy
最初に割り当てずに電話をかけることができないのと同じように、最初に電話glBufferSubData
をかけずに電話をかけることはできませんglBufferData
。