我使用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 |
|---------------------| |---------------------|
为什么呢?我如何区分这两个案件呢?
答案 0 :(得分:3)
这似乎是由于SDL已经修复然后重新开启的错误 有关详细信息,请参阅here。
试图总结讨论,可能是因为OpenGL坐标系左下角有(0,0)而SDL没有正确抽象,而SDL应该给用户抽象的相干坐标系,原点设置在左上角。
错误中的信息与您在评论中对我的问题的回答所提供的内容一致。我建议你遵循这个bug并更新SDL以获取上游的最新信息。