今回はバックバッファに書き込まれている内容をメインメモリに読み込んで表示してみる.よく使うので.
コード
- ウィンドウを用意
window.clear()
でウィンドウ(バックバッファ)に書き込み- バックバッファ (
window.fbo
) にある内容をメインメモリに転送- Method 1
- バイトデータを読み込み
-
np.array
に変換 -
matplotlib.pyplot.imshow()
で表示
- Method 2
- バイトデータを読み込み
-
PIL.Image
に変換 -
PIL.Image.show()
で表示
- Method 1
window.swap_buffers()
でModernGLのウィンドウに表示- 3で読み込んでいるのはバックバッファ(隠れていて見えない)
- なので,この段階になるまでModernGLウィンドウは真っ白
import moderngl_window from moderngl_window.conf import settings import numpy as np import matplotlib.pyplot as plt from PIL import Image settings.WINDOW["class"] = "moderngl_window.context.glfw.Window" settings.WINDOW["gl_version"] = (4, 1) settings.WINDOW["title"] = "Hello GLFW" settings.WINDOW["size"] = (640, 480) window = moderngl_window.create_window_from_settings() while not window.is_closing: window.clear(0.5, 1.0, 0.25, 1.0) # Method 1 raw = window.fbo.read(components=4, dtype="f4") buf = np.frombuffer(raw, dtype="f4") buf = buf.reshape((window.height, window.width, 4)) plt.imshow(buf) plt.show() # Method 2 raw = window.fbo.read(components=4) img = Image.frombytes("RGBA", window.fbo.size, raw, "raw", "RGBA") img.show() window.swap_buffers() break