我有一些代码初始化OpenGL以呈现给java.awt.Canvas.问题是,我无法弄清楚如何获取画布的缓冲区并将其转换为BufferedImage.
我已经尝试重写getGraphics(),克隆Raster,并用自定义替换CanvasPeer.
我猜测OpenGL不会以任何方式使用java图形,那么我如何获得OpenGL的缓冲区并将其转换为BufferedImage?
我正在使用LWJGL的代码来设置父级:
Display.setParent(display_parent);
Display.create();
Run Code Online (Sandbox Code Playgroud) 我正在制作一个渲染动态高分辨率体素景观的程序.
目前,我将体素数据存储在32x32x32块中,每块4位:
struct MapData {
char data[32][32][16];
}
MapData *world = new MapData[(width >> 5) * (height >> 5) * (depth >> 5)];
Run Code Online (Sandbox Code Playgroud)
我正在尝试做的是将它发送到我的顶点和片段着色器进行处理和渲染.我见过有几种不同的方法可以做到这一点,但我不知道哪一种最适合这种方法.
我开始使用一种sampler1D格式,但这会导致浮点输出介于0和1之间.我还怀疑它是将每个体素存储为16位.
至于统一缓冲区对象,我尝试过但未能实现这一点.
我对这一切的最大担忧是不必每帧都将整个地图发送到GPU.我希望能够加载大小为~256MB(1024x2048x256体素)的地图,所以我需要能够发送一次,然后只重新发送已更改的块.
对于编写OpenCL以便为我处理视频内存的最佳解决方案是什么?如果有更好的方法来存储我的体素使这更容易,我会接受其他格式.