C++ SDL#U曲面::像素更改它';s值
在检查SDL_LockSurface函数的实现时,我偶然发现: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
/* 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。我想我只是不应该读实现。。。但我想得到更好的理解。