如何在SDL2中嵌套视口

时间:2019-07-24 21:11:47

标签: c++ nested viewport sdl-2

我在屏幕的右侧有一个较大的视口(在这里为“图层”),并且在该视口内渲染了一个矩形(“ actorRect”)。然后,将视口设置为actorRect,并尝试对矩形中的火柴人进行SDL_RenderDrawLines。

stickman被渲染到屏幕的左侧,就像使用ActorRect的普通x,y坐标一样。

illustration

在上图中,我绕着火柴人盘旋,并画了一个指向actorRect的箭头。 (actorRect在这里只是绿色,所以我可以知道它在哪里。稍后它将是其他颜色,或者像是轮廓线或其他东西,idk)。

我希望那个火柴人在那个矩形内渲染。

这是一个代码段:

//vector mStickmanIcon = {/*...a bunch of points...*/};
SDL_RenderSetViewport(gRenderer, &Layers);
SDL_SetRenderDrawColor(gRenderer, 200,250,165,255);
SDL_RenderFillRect(gRenderer, &actorRect);
SDL_RenderSetViewport(gRenderer, &actorRect);
SDL_SetRenderDrawColor(gRenderer, 0,0,0,255);
SDL_RenderDrawLines(gRenderer, mStickmanIcon.data(), mStickmanIcon.size());

你们怎么看?有什么建议吗?请将答案限制为SDL2。我没有使用OpenGL。

我也对简单的方式偏移SDL_Point的向量感兴趣,以便可以完全取消actorRect,但是我想以后我可能会再次嵌套视口,所以这就是我要问的问题。 / p>

ETA:我添加了以下代码以找出这些项目在屏幕上的位置:

SDL_Rect myRect;
SDL_RenderGetViewport(gRenderer, &myRect);
printf("Viewport h,w,x,y: %i,%i,%i,%i\n", myRect.h,myRect.w,myRect.x,myRect.y);
for(int i = 0; i < mStickmanIcon.size(); i++)
{
    printf("stickman i,x,y: %i,%i,%i\n", i,mStickmanIcon.data()[i].x, mStickmanIcon.data()[i].y);
}

以下是输出:

stickman i,x,y: 0,5,15
stickman i,x,y: 1,8,12
stickman i,x,y: 2,11,15
stickman i,x,y: 3,8,12
stickman i,x,y: 4,8,9
stickman i,x,y: 5,5,9
stickman i,x,y: 6,11,9
stickman i,x,y: 7,8,9
stickman i,x,y: 8,8,6
stickman i,x,y: 9,7,6
stickman i,x,y: 10,5,4
stickman i,x,y: 11,5,2
stickman i,x,y: 12,7,0
stickman i,x,y: 13,8,0
stickman i,x,y: 14,11,2
stickman i,x,y: 15,11,4
stickman i,x,y: 16,9,6
Viewport h,w,x,y: 16,16,247,119

1 个答案:

答案 0 :(得分:1)

浏览SDL似乎不太可能嵌套视口。不过,您很幸运-既然您已经拥有一个现有的视口,以及刚刚绘制的矩形,为什么不使用该矩形的坐标作为新视口的基础呢?

WriteDataToFileAsJSON() (numberOfBytesWritten, error)