检查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
指向当前,除非我释放它? (我几乎可以肯定,因为移动那些巨大的阵列似乎有点愚蠢,但仍然......也许我很蠢......)
答案 0 :(得分:2)
不,假设是不安全的。
“移动那些巨大的数组”并不涉及实际复制任何数据。什么变化不是放置数据的物理地址(甚至可能在GPU RAM中),而是虚拟&gt;物理映射。