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

时间:2015-06-14 17:21:11

标签: c++ sdl sdl-2

我使用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               |
|---------------------|          |---------------------|

为什么呢?我如何区分这两个案件呢?

1 个答案:

答案 0 :(得分:3)

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

试图总结讨论,可能是因为OpenGL坐标系左下角有(0,0)而SDL没有正确抽象,而SDL应该给用户抽象的相干坐标系,原点设置在左上角。

错误中的信息与您在评论中对我的问题的回答所提供的内容一致。我建议你遵循这个bug并更新SDL以获取上游的最新信息。