Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 访问像素格式是否需要SDL_LockSurface?_C++_Sdl_Sdl 1.2 - Fatal编程技术网

C++ 访问像素格式是否需要SDL_LockSurface?

C++ 访问像素格式是否需要SDL_LockSurface?,c++,sdl,sdl-1.2,C++,Sdl,Sdl 1.2,SDL_LockSurface并不清楚地表明,某些曲面的像素格式在其使用寿命期间可能会发生变化,因此访问曲面像素格式的正确方法是首先检查曲面是否需要使用SDL_MUSTLOCK锁定,如果需要,则使用SDL_LockSurface锁定 然而,许多在线用户在不执行任何检查的情况下访问该格式 锁定曲面是否真的需要访问像素格式?在曲面使用寿命期间,格式是否会更改,从而需要锁定 我使用SDL 1.2以防版本之间有任何差异。 不太可能改变像素格式,如果是,那么它不会发生在访问它的中间,因为格式驻留在客户端内

SDL_LockSurface
并不清楚地表明,某些曲面的像素格式在其使用寿命期间可能会发生变化,因此访问曲面像素格式的正确方法是首先检查曲面是否需要使用
SDL_MUSTLOCK
锁定,如果需要,则使用
SDL_LockSurface
锁定

然而,许多在线用户在不执行任何检查的情况下访问该格式

锁定曲面是否真的需要访问像素格式?在曲面使用寿命期间,格式是否会更改,从而需要锁定


我使用SDL 1.2以防版本之间有任何差异。

不太可能改变像素格式,如果是,那么它不会发生在访问它的中间,因为格式驻留在客户端内存中(仅由您和SDL触摸)。如果您仍然担心这种可能性,请始终使用SDL_SWSURFACE标志创建曲面,或在访问格式之前锁定曲面。

曲面的问题在于它们可能驻留在视频内存中,而不是直接访问的“常规”内存中,或者是一种组合(如RAM缓存版本)。这取决于视频驱动程序和卡,因此我认为您应该始终检查
SDL\u MUSTLOCK
。(通常,我只在全局屏幕更新之前检查
SDL_MUSTLOCK
,而不是在“每像素”例程中)。我在循环中有一个switch语句,仅在某些情况下,我需要构造颜色,以便与不需要显式锁定的函数一起使用,例如,
SDL_FillRect
-因此我需要访问曲面的像素格式,仅用于颜色。我曾考虑尽早在循环之前获取格式,甚至在创建曲面时也是如此,但我不确定在使用它之前它是否可能“过时”。