SDL_Surface :: pixels会改变它的值

时间:2013-08-07 19:37:14

标签: c++ sdl

检查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指向当前,除非我释放它? (我几乎可以肯定,因为移动那些巨大的阵列似乎有点愚蠢,但仍然......也许我很蠢......)

1 个答案:

答案 0 :(得分:2)

不,假设是不安全的。

“移动那些巨大的数组”并不涉及实际复制任何数据。什么变化不是放置数据的物理地址(甚至可能在GPU RAM中),而是虚拟&gt;物理映射。