FBO에서 간단한 바둑판을 렌더링 한 다음 glReadPixels()을 수행하려고합니다.FBO + glReadPixels 모두 검정색으로 렌더링하십시오.
FBO가 없으면 모든 것이 정상적으로 작동합니다. 그래서 내 렌더링 함수는 괜찮아 glReadPixels()라고 가정합니다. FBO를 사용하면 FBO 호출이 끝난 후에 그릴 수있는 모든 선을 얻을 수 있습니다.
이def renderFBO():
#WhyYouNoWorking(GL_FRAMEBUFFER) # degug function... error checking
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer)
glBindRenderbuffer(GL_RENDERBUFFER, renderbufferA)
glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA, window.width, window.height)
glBindRenderbuffer(GL_RENDERBUFFER, renderbufferB)
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, window.width, window.height)
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer)
glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, renderbufferA)
glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, renderbufferB)
#WhyYouNoWorking(GL_FRAMEBUFFER)
glDrawBuffer(GL_COLOR_ATTACHMENT0)
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
glViewport(0, 0, window.width, window.height)
DrawChecker(Nbr = 16, Dark = 25.0/255, Light = 75.0/255)
for i in range(len(labelSysInfo)):
pyglet.text.Label(labelSysInfo[i], font_name='Times New Roman', font_size=26, x=(window.width*0.68), y= (window.height*0.04*i)+(window.height*2/3), anchor_x='left', anchor_y='center', color = (250, 250, 250, 150)).draw()
glReadPixels(0, 0, window.width, window.height, GL_RGBA, GL_UNSIGNED_BYTE, a)
glBindFramebuffer(GL_FRAMEBUFFER, 0)
내 다른 기능 : 메인에서
def on_draw(dt):
glDrawBuffer(GL_BACK)
glClear(GL_COLOR_BUFFER_BIT)
glClearColor(0.0, 0.0, 0.0, 1.0)
glLoadIdentity()
glEnable(GL_TEXTURE_2D)
glDisable(GL_TEXTURE_2D)
BlueLine() # draw a simple line. works fine
DropFrameTest() # draw a simple line. works fine
는 renderFBO()에 대한 호출이 다음 번 수행하고, 여기에
내 코드 (파이썬, 목표로 크로스 플랫폼)입니다 on_draw는 주기적으로 호출됩니다.dt = pyglet.clock.tick()
renderFBO()
pyglet.clock.schedule_interval(on_draw, 0.007)
pyglet.app.run()
시도했지만 작동하지 않았습니다. glCheckFramebufferStatus()를 호출합니다. 도와 주셔서 감사합니다 :) – BaldDude
그것은 파이썬 + gl을 사용했기 때문에 나이가 지났지 만 FBO를 바인딩 해제 한 후에 시도해 볼 수 있습니까? glBindFramebuffer (GL_READ_FRAMEBUFFER, framebuffer); glBindFramebuffer (GL_DRAW_FRAMEBUFFER, 0); glBlitFramebuffer (0, 0, window.width, window.height, 0, 0, window.width, window.height, GL_COLOR_BUFFER_BIT, GL_NEAREST); glBindFramebuffer (GL_READ_FRAMEBUFFER, 0); FBO – jozxyqk
의 내용을 볼 수 있습니다. 내 FBO의 내용을 검증하는 방법을 생각하지 않았습니다. 힌트를 가져 주셔서 감사합니다. 그래서 제가 얻은 것은 FBO가 한 번만 렌더링된다는 것입니다. FBO의 내용을 읽기 전에 내용을 삭제할 것을 제안합니까? – BaldDude