繁体   English   中英

使用OpenGL将着色器绘制到流吗?

[英]Use OpenGL to draw shader to a stream?

我正在使用将OpenGL 2.0与Renderer,屏幕外GLSurfaceView和一些着色器脚本(* .fsh和* .vsh)配合使用的照片应用程序。

从Assets文件夹加载着色器脚本,准备GL曲面和上下文等后,我们最终调用GLES20.glDrawArrays(GLES20.GL_TRIANGLE_FAN, 0, 4); 而且效果很好,并生成带有效果的位图。

当然,问题是内存限制和任何足够大的位图(无论设备如何,对于旧的Gingerbread而言都不大,而对于Nexus 10而言则非常大),它将产生和OutOfMemoryException。

我对OpenGL不太了解,我知道处理大量数据的方式是使用流,因此不必将其全部保存在内存中。

因此,问题是,是否有一种方法可以通过流而不是内存中的位图来应用openGl着色器/渲染器? 如果是,是否有指向链接或基本过程的指针?

不完全确定Stream含义,但这是另一种解决方案。 将渲染分成多个通道。 例如,如果您具有512x512纹理和相应的纹理四边形,但由于内存限制而只能上传256x256,请执行以下操作:

  • 将纹理分成4个块
  • 创建一个合适的纹理对象
  • 对于每个块
    • 将当前块上传到tex对象数据存储中
    • 绘制四边形的1/4,例如左上角并相应地纹理

请注意,以上示例假设512x512纹理和屏幕尺寸。 无论如何,我想您会明白的。

显然,这是通常的内存/性能折衷。您可以通过使用更多带宽进行传输和执行更多渲染来规避内存限制。

注意:我是台式机GL的家伙,我不太确定如何在GPU和其余的内存之间分配内存,或者甚至没有专用的VRAM。 我认为您有有限的可用GL资源,甚至比整个系统内存还小。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM