Android OpenGL ES:以正常分辨率渲染一次,然后将分辨率减半

Android OpenGL ES:以正常分辨率渲染一次,然后将分辨率减半,android,opengl-es-2.0,Android,Opengl Es 2.0,在Android上的OpenGL ES 2.0中,有没有一种方法可以将场景渲染到正常分辨率,然后将屏幕的另一部分渲染到较低的分辨率 如果我使用GLES20.glViewPort()并更改分辨率,它将不会缩放到全屏大小,但我会得到所需的结果,只是更小 我想要一个不必渲染到纹理的解决方案,而不是在屏幕上渲染四边形。如果您想要实现的是将低分辨率场景渲染到高分辨率视口(从而获得某种“像素化”效果),那么OpenGL无法轻松做到这一点。寻找一个类似的问题 基本上,您不会回避将整个内容渲染为低分辨率纹理(最

在Android上的OpenGL ES 2.0中,有没有一种方法可以将场景渲染到正常分辨率,然后将屏幕的另一部分渲染到较低的分辨率

如果我使用GLES20.glViewPort()并更改分辨率,它将不会缩放到全屏大小,但我会得到所需的结果,只是更小


我想要一个不必渲染到纹理的解决方案,而不是在屏幕上渲染四边形。

如果您想要实现的是将低分辨率场景渲染到高分辨率视口(从而获得某种“像素化”效果),那么OpenGL无法轻松做到这一点。寻找一个类似的问题

基本上,您不会回避将整个内容渲染为低分辨率纹理(最好使用)并在高分辨率视口中显示屏幕大小的四边形,使用nereast过滤从低分辨率纹理采样。OpenGL不能只放大像素,一个片段只能产生一个(或没有)像素


但也许这不是你想要的,我误解了你的问题。

所以这是不可能的,但是让片段着色器渲染更少的像素怎么样?由于指令集的限制,我基本上有一个照明程序和一个阴影程序。使用这样的阴影贴图,我必须渲染场景两次(除了从光点渲染之外),第二次使用alpha 0渲染场景,并且在对零件进行阴影处理时更改alpha值。我想知道我的第二次渲染,即带有阴影的渲染,是否可以在片段着色器上更轻松。@user1454653除了使片段完全透明之外,你可以做的是使用
放弃
关键字实际删除它。这将导致不发射碎片。但是片段着色器仍然会为片段执行(因为您自己决定放弃它),因此这不会给您带来任何性能方面的好处,只是从概念上更正确地删除片段,而不是使其完全透明(你可以禁用混合,这实际上可能会为你带来一些小利润,不确定)。@user1454653要真正防止OpenGL生成片段,你需要使用其他技术,比如使用模具缓冲区和依赖early-z硬件(如果ES硬件有),但这在您的情况下不起作用,因为您不知道片段是否可以省略,直到您实际拥有片段并可以在片段着色器中对其执行测试为止。@user1454653但我不确定您为什么要执行两个单独的过程。我真的无法相信执行普通照明着色器并预执行s的标准方法此照明着色器中的hadow贴图测试(在阴影中缩小颜色)对您不起作用。OpenGL ES 2不能有这么大的限制。但所有这些都是一个单独的问题(或更多问题),对于将低分辨率内容渲染到高分辨率视口的原始问题,答案肯定是“不,至少不是自动的”.通过在片段着色器中使用3个灯光,我没有更多的指令空间来处理同一着色器中的阴影,因为我需要很多指令:来自光源的MVP矩阵,如果块来确定灯光是否具有方向性,一些用于平滑的指令…总之,我的Android框架工作得很好,有一些它以60 FPS的速度运行数万个多边形,问题是:我想使用MSAA,当阴影打开时,它将帧降低到24 FPS,因为片段着色器自身执行两次(阴影),因此它必须渲染更多的像素。