SDL_RenderSetClipRect 在不同平台上的工作方式不同 - 如何检测是从顶部测量还是从底部测量?

SDL_RenderSetClipRect works different on different platforms - how detect whether measured from top or bottom?

我使用 libSDL2 并使用 Cliprect。

简化我有这个代码:

SDL_Window* window = SDL_CreateWindow(
     "foo", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
     1024, 768, SDL_WINDOW_SHOWN);
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1,
      SDL_RENDERER_ACCELERATED |  SDL_RENDERER_TARGETTEXTURE);
SDL_Texture* offscreenTexture = SDL_CreateTexture(
     renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, 
     1024, 768);

SDL_Rect sdlRect = { 100, 100, 200, 200 };
SDL_RenderSetClipRect(renderer, &sdlRect);

我注意到 SDL_RenderSetClipRect 在不同平台上的工作方式不同:在每个平台上,剪切矩形的大小都是 200x200。 在某些平台上,y = 100 是从屏幕顶部开始测量的(如我所料),而在某些平台上,它是从底部开始测量的。

          1024                       1024
|---------------------|          |---------------------|
|   100               |          |                     |
|   *****             |          |                     |
|   *****             |          |                     |
|   *****             |   768    |                     |
|                     |          |   *****             |
|                     |          |   *****             |
|                     |          |   *****             |
|                     |          |   100               |
|---------------------|          |---------------------|

为什么?如何区分这两种情况?

这似乎是由于 SDL 的一个已经修复然后重新打开的错误。
有关详细信息,请参阅 here

尝试总结一下讨论,这可能是由于OpenGL坐标系在左下角有(0,0),SDL没有正确抽象它,而SDL应该给用户原点设置在左上角的连贯坐标系的抽象。

错误中的信息与您在评论中对我的问题的回复所提供的信息一致。我建议您关注该错误并更新 SDL 以从上游获取最新信息。