1

Texture クラス (SFML) の update メソッドに渡されるピクセルの配列は、どのようにメモリ管理されますか? これらは私の推測の一部です:

  1. ウィーク ポインターはテクスチャ インスタンス内に保存されます。つまり、独自のピクセル配列へのポインターを保持し、それを自分で管理する必要があります。

  2. 配列はコピーされ、テクスチャによって管理されます (これは、update メソッドが再度呼び出されるたびに、前のメソッドの割り当てが解除されることも意味します)。

2 番目の推測は、テクスチャを複数回更新するためにこれを正当化します。

auto newPixels = new sf::Uint8[WIDTH * HEIGHT * 4];
... //do stuff to pixels
texture.update(newPixels);

テクスチャが更新されるたびにピクセルが再割り当てされる場所。それ以外の場合 (ピクセルが弱いポインターとして格納され、管理/割り当て解除/割り当てされていない場合)、ピクセルがユーザーによって管理される別のアプローチが必要になります...

ご回答ありがとうございます:)

4

1 に答える 1

0

SFML はオープンソースです。ここで推測したり質問したりする必要はありません。あなたはそれを自分で読むことができます:

https://github.com/SFML/SFML/blob/master/src/SFML/Graphics/Texture.cpp#L390

具体的には、ポインターがglTexSubImage2D OpenGL メソッドに渡されます。

于 2016-11-29T11:17:53.937 に答える