我正在优化我的SDL代码并在可能的情况下添加const限定词,并偶然发现以下SDL_RenderCopy声明:
int SDL_RenderCopy(SDL_Renderer* renderer,
SDL_Texture* texture,
const SDL_Rect* srcrect,
const SDL_Rect* dstrect)
texture参数不是const。 为什么纹理应该是非常量的? 我以为该功能仅将纹理作为源,而不会对其进行修改。
我想念什么吗?
答案 0 :(得分:1)
简短的回答:RenderCopy通过修改texture->last_command_generation
:https://hg.libsdl.org/SDL/file/355a4f94a782/src/render/SDL_render.c#l2997
texture->last_command_generation = renderer->render_command_generation;
retval = QueueCmdCopy(renderer, texture, &real_srcrect, &real_dstrect);
当您排队等待渲染时严重修改纹理(例如销毁)时,需要使用此跟踪。销毁时,SDL检查生成并在需要时刷新渲染队列。否则,实施“创建纹理,填充数据,立即绘制,销毁纹理”之类的东西(不是很好)将是有问题的。
虽然可以修改SDL以将世代保留在某个单独的位置(例如,渲染器),但是在这种情况下逻辑上“ const”值得怀疑-您已排队要渲染的纹理,在该纹理与RenderPresent之间对其进行修改可能不是一个好主意,所以..不是那么常量?