Mac OS 上的 pyglet 模板测试

pyglet stencil test on Mac OS

我正在尝试使用模板测试来剪辑和创建二维内容的边框,但它似乎不起作用。这可能是一个平台问题,我是 运行 带有 MacOS 12.0.1

的 M1 MacBook Air 上的代码

根据下面的代码,我希望有一个带有 50px 红色边框的蓝色方块,但我只得到一个大红色方块。

from pyglet import window, gl, shapes, app
win = window.Window(width=800, height=600)


@win.event
def on_draw():
    win.clear()
    gl.glEnable(gl.GL_STENCIL_TEST)
    gl.glStencilMask(gl.GL_TRUE)
    gl.glClearStencil(0)
    gl.glClear(gl.GL_STENCIL_BUFFER_BIT)
    gl.glStencilFunc(gl.GL_NEVER, 1, 0xFF)
    gl.glStencilOp(gl.GL_REPLACE, gl.GL_KEEP, gl.GL_KEEP)
    square = shapes.Rectangle(x=200, y=200, width=200, height=200, color=(0, 0, 255))
    square.draw()
    gl.glStencilMask(gl.GL_FALSE)
    gl.glStencilFunc(gl.GL_NOTEQUAL, 1, 0xFF)
    square2 = shapes.Rectangle(x=150, y=150, width=300, height=300, color=(255, 0, 0))
    square2.draw()
    gl.glDisable(gl.GL_STENCIL_TEST)


app.run()

window 没有模板缓冲区。不能保证 window 的默认帧缓冲区在默认情况下会有模板缓冲区。显式指定模板缓冲区位(参见 pyglet, Context configuration):

config = gl.Config(double_buffer=True, stencil_size=8)
win = window.Window(width=800, height=600, config=config)