我正在用Java编写游戏,LJGWL(OpenGL)。我正在使用一个为我处理大量杂乱细节的库,但需要找到更快的方法来实现这一点。
基本上我想设置屏幕上的每个像素尽可能快地说出随机颜色。 “随机颜色”只是一个每隔2-3秒更新一次的Array [] []。我已经尝试过绘制rects并使用图像,但对于我想做的事情来说,两者都很慢。
我想我想学习如何编写GPU着色器?这是最快的方法吗? LJGWL将OpenGL api暴露给java。有关如何开始使用OpenGL着色器的任何基础教程?或者我应该动态创建某种纹理,然后只是抛出整个纹理,那会更快吗?
答案 0 :(得分:6)
如果是静态显示相同图像的情况,那么使用纹理或显示列表就足够了。但是,由于您希望经常更新它,着色器确实是最佳选择。着色器代码在GPU上执行并修改GRAM中的数据,因此您没有瓶颈从CPU转移到GPU。下一个最好的事情可能是像素或帧缓冲对象。缓冲对象允许您通过DMA读取/写入GRAM(无需通过CPU),因此它们可以非常快。
我还没有写过任何着色器,所以我不能推荐任何好的资源。但是SongHo's OpenGL pages是学习缓冲对象的好地方。 (他的例子是用C ++编写的)
答案 1 :(得分:2)
纹理是在屏幕上绘制内容的最快方式,将纹理映射四边形绘制到屏幕上,它应该足够快。当您需要重新上载纹理数据时,请使用glTexSubimage2D进行更新。
无需使用着色器。
答案 2 :(得分:0)
我还没有在OpenGL中使用着色器进行任何工作,但是在多个场合给出了相同的场景,我用一个纹理来处理它,我在屏幕顶部抛出,并且它非常有效。
答案 3 :(得分:0)
我不知道你是如何准确地绘制像素的,但是这个限制你可能是因为传输的数据量很大(效率低下?)。每2-3秒更新一个完整像素的屏幕应该不会很难。虽然着色器使您更接近显卡,但它们永远不会快速制作效率低下的方法,所以......
为什么你的代码这么慢?
我认为您需要先编辑/重新发布才能帮助您解决问题。仅仅因为它很慢,根本不能保证着色器甚至会更快一个位。