0

SDL_LockSurface 関数の実装を調べると、次のことがわかりました。

/* This needs to be done here in case pixels changes value */
surface->pixels = (Uint8 *)surface->pixels + surface->offset;

なぜpixelsその値を変更するのでしょうか? 実際のピクセル配列の位置も変わるのでしょうか?

特に、次のことを考慮してください。

SDL_LockSurface(sur);
Uint8* my_pixels = reinterpret_cast<Uint8*>sur->pixels;
SDL_UnlockSurface(sur);

my_pixelsさて、私がそれを解放しない限り、それが現在指している表面のピクセル配列を常に指していると仮定しても安全surですか? (それらの巨大な配列を移動するのは少しばかげているように見えるので、そうであるとほぼ確信していますが、それでも...多分私は愚かです...)

4

1 に答える 1

2

いいえ、想定するのは安全ではありません。

「これらの巨大な配列を移動する」には、実際にデータをコピーする必要はありません。変更されるのは、データが配置される物理アドレス (GPU RAM にある場合もあります) ではなく、仮想 -> 物理マッピングです。

于 2013-08-07T20:42:01.033 に答える