我最近一直在研究处理/Java/JOGL 作品,其中我正在绘制到屏幕外缓冲区。当我启动程序时,我看到了一些漂亮的故障(见下图)。
我假设这是我上次运行程序时缓冲区地址空间中的剩余数据。最小的方块是 8x8 像素。似乎更大的块将 8x8px 的正方形平铺在 4x4 元块中,而这些块也以 4x4 平铺成 überchunks。我使用的是 64 位操作系统。
谁能向我解释为什么我在程序 init 上看到这个故障图像?我已经回答了我的问题了吗?(主要是好奇引擎盖下发生了什么。)
编辑:添加了图像的放大版本,因为 SO 没有任何类型的点击缩放图像。
编辑: @SuperKael 要求提供代码。很难隔离可能造成这种效果的原因,因为渲染主要被抽象到 Processing 的 JOGL 实现中。以下是试图解释我的代码中发生的事情:
地图背景图像加载为PImage
:
PImage backgroundImage = pApplet.loadImage(pathToImage);
要在该背景图像上绘制的内容的缓冲区被初始化:
PGraphics foregroundBuffer = pApplet.createGraphics(w, h, PApplet.OPENGL);
加载要在缓冲区内渲染的前景图像:
for (String path : foregroundImagePaths) {
pApplet.loadImage(path);
}
在我的主draw()
循环中,绘制背景图像,将其他图像绘制到缓冲区中,然后绘制缓冲区:
pApplet.image(backgroundImage, 0, 0);
foregroundBuffer.blendMode(PApplet.ADD);
for (PImage foregroundImage : foregroundImages) {
foregroundBuffer.image(foregroundImage);
}
pApplet.image(foregroundBuffer, 0, 0);
当应用程序启动时,故障图像只会短暂出现。我相信foregroundBuffer
在正确初始化之前可能会被绘制到屏幕上,并且其他操作会阻塞主线程足够长的时间以在初始化发生时看到故障。
这是背景图像的缩小副本: