私は最近、オフスクリーン バッファに描画している Processing/Java/JOGL の作品に取り組んでいます。プログラムを開始すると、美しいグリッチが表示されます (下の画像を参照)。
これは、前回プログラムを実行したときのバッファ アドレス空間に残っているデータだと思います。最小の正方形のチャンクは 8x8 ピクセルです。より大きなチャンクは 4x4 メタチャンクの 8x8px の正方形にタイル張りされ、それらも 4x4 にタイル張りされて uberchunks になっているようです。私は64ビットのオペレーティングシステムを使用しています。
プログラムの初期化でこのグリッチアウトされた画像が表示される理由を誰かに説明できますか? 私はすでに私の質問にほとんど答えましたか?(ほとんどの場合、ボンネットの下で何が起こっているのか興味があります。)
編集: 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
があり、他の操作がメインスレッドをブロックして、初期化中に不具合が発生するのを確認できると思います。
これは、背景画像の縮小コピーです。