C++ SDL#U曲面::像素更改它';s值

C++ SDL#U曲面::像素更改它';s值,c++,sdl,C++,Sdl,在检查SDL_LockSurface函数的实现时,我偶然发现: /* This needs to be done here in case pixels changes value */ surface->pixels = (Uint8 *)surface->pixels + surface->offset; 为什么像素会更改其值?是否实际像素阵列的位置也会改变 特别是,考虑这个: SDL_LockSurface(sur); Uint8* my_pixels = reinte

在检查SDL_LockSurface函数的实现时,我偶然发现:

/* This needs to be done here in case pixels changes value */
surface->pixels = (Uint8 *)surface->pixels + surface->offset;
为什么
像素
会更改其值?是否实际像素阵列的位置也会改变

特别是,考虑这个:

SDL_LockSurface(sur);
Uint8* my_pixels = reinterpret_cast<Uint8*>sur->pixels;
SDL_UnlockSurface(sur);
SDL_锁面(sur);
Uint8*my_pixels=reinterpret_castsur->pixels;
SDL_解锁表面(sur);

现在,假设
my_pixels
始终指向曲面的像素阵列,除非我将其释放,否则
sur
当前指向该曲面的像素阵列是否安全?(我几乎可以肯定这是真的,因为移动那些巨大的阵列似乎有点愚蠢,但是……也许我很愚蠢……

不,这是不安全的假设


“移动那些巨大的阵列”并不涉及实际复制任何数据。更改的不是放置数据的物理地址(甚至可能在GPU RAM中),而是虚拟->物理映射。

软件表面安全吗?@nnnn:Read,这非常清楚,“不是所有表面都需要锁定。如果
SDL\U必须锁定(表面)
计算结果为0,然后您可以随时读取和写入曲面,曲面的像素格式不会更改。“hmmm…”。。。直到现在,我读过书,对此感到很舒服。如果
像素
可以改变,那么
偏移也应该改变,因为它参与了正确的
像素
值的恢复,这意味着
SDL\u MUSTLOCK
对于同一曲面可能表现不同:如果
像素
没有改变,则计算为false;如果改变,则计算为true。我想我只是不应该读实现。。。但我想得到更好的理解。