OpenGL着色器?

时间:2010-09-29 20:09:57

标签: java opengl gpu

我正在用Java编写游戏,LJGWL(OpenGL)。我正在使用一个为我处理大量杂乱细节的库,但需要找到更快的方法来实现这一点。

基本上我想设置屏幕上的每个像素尽可能快地说出随机颜色。 “随机颜色”只是一个每隔2-3秒更新一次的Array [] []。我已经尝试过绘制rects并使用图像,但对于我想做的事情来说,两者都很慢。

我想我想学习如何编写GPU着色器?这是最快的方法吗? LJGWL将OpenGL api暴露给java。有关如何开始使用OpenGL着色器的任何基础教程?或者我应该动态创建某种纹理,然后只是抛出整个纹理,那会更快吗?

4 个答案:

答案 0 :(得分:6)

如果是静态显示相同图像的情况,那么使用纹理或显示列表就足够了。但是,由于您希望经常更新它,着色器确实是最佳选择。着色器代码在GPU上执行并修改GRAM中的数据,因此您没有瓶颈从CPU转移到GPU。下一个最好的事情可能是像素或帧缓冲对象。缓冲对象允许您通过DMA读取/写入GRAM(无需通过CPU),因此它们可以非常快。

我还没有写过任何着色器,所以我不能推荐任何好的资源。但是SongHo's OpenGL pages是学习缓冲对象的好地方。 (他的例子是用C ++编写的)

答案 1 :(得分:2)

纹理是在屏幕上绘制内容的最快方式,将纹理映射四边形绘制到屏幕上,它应该足够快。当您需要重新上载纹理数据时,请使用glTexSubimage2D进行更新。

无需使用着色器。

答案 2 :(得分:0)

我还没有在OpenGL中使用着色器进行任何工作,但是在多个场合给出了相同的场景,我用一个纹理来处理它,我在屏幕顶部抛出,并且它非常有效。

答案 3 :(得分:0)

我不知道你是如何准确地绘制像素的,但是这个限制你可能是因为传输的数据量很大(效率低下?)。每2-3秒更新一个完整像素的屏幕应该不会很难。虽然着色器使您更接近显卡,但它们永远不会快速制作效率低下的方法,所以......

为什么你的代码这么慢?

  1. 什么代码?您尝试过什么代码?你使用了什么纹理,渲染,......?
  2. 慢吗?多慢?你期望它有多快?
  3. 在视频RAM中获得1920x1080(?)像素的速度有多快,您的硬件,驱动程序和操作系统是什么?
  4. 我认为您需要先编辑/重新发布才能帮助您解决问题。仅仅因为它很慢,根本不能保证着色器甚至会更快一个