psychopy.tools.gltools
psychopy.tools.gltools
createProgram createProgramObjectARB compileShader compileShaderObjectARB embedShaderSourceDefs deleteObject deleteObjectARB attachShader attachObjectARB detachShader detachObjectARB linkProgram linkProgramObjectARB validateProgram validateProgramARB useProgram useProgramObjectARB getInfoLog getUniformLocations getAttribLocations createQueryObject beginQuery endQuery getQuery getAbsTimeGPU createFBO attach isComplete deleteFBO blitFBO useFBO createRenderbuffer deleteRenderbuffer createTexImage2D createTexImage2DMultisample deleteTexture VertexArrayInfo createVAO drawVAO deleteVAO VertexBufferInfo createVBO bindVBO unbindVBO mapBuffer unmapBuffer deleteVBO setVertexAttribPointer enableVertexAttribArray disableVertexAttribArray createMaterial useMaterial createLight useLights setAmbientLight ObjMeshInfo loadObjFile loadMtlFile createUVSphere createPlane getIntegerv getFloatv getString getOpenGLInfo
createProgram
createProgramObjectARB
compileShader
compileShaderObjectARB
embedShaderSourceDefs
deleteObject
deleteObjectARB
attachShader
attachObjectARB
detachShader
detachObjectARB
linkProgram
linkProgramObjectARB
validateProgram
validateProgramARB
useProgram
useProgramObjectARB
getInfoLog
getUniformLocations
getAttribLocations
createQueryObject
beginQuery
endQuery
getQuery
getAbsTimeGPU
createFBO
attach
isComplete
deleteFBO
blitFBO
useFBO
createRenderbuffer
deleteRenderbuffer
createTexImage2D
createTexImage2DMultisample
deleteTexture
createVAO
drawVAO
deleteVAO
createVBO
bindVBO
unbindVBO
mapBuffer
unmapBuffer
deleteVBO
setVertexAttribPointer
enableVertexAttribArray
disableVertexAttribArray
createMaterial
useMaterial
createLight
useLights
setAmbientLight
loadObjFile
loadMtlFile
createUVSphere
createPlane
getIntegerv
getFloatv
getString
getOpenGLInfo
Working with Framebuffer Objects (FBOs):
Creating an empty framebuffer with no attachments:
fbo = createFBO() # invalid until attachments are added
Create a render target with multiple color texture attachments:
colorTex = createTexImage2D(1024,1024) # empty texture
depthRb = createRenderbuffer(800,600,internalFormat=GL.GL_DEPTH24_STENCIL8)
GL.glBindFramebuffer(GL.GL_FRAMEBUFFER, fbo.id)
attach(GL.GL_COLOR_ATTACHMENT0, colorTex)
attach(GL.GL_DEPTH_ATTACHMENT, depthRb)
attach(GL.GL_STENCIL_ATTACHMENT, depthRb)
# or attach(GL.GL_DEPTH_STENCIL_ATTACHMENT, depthRb)
GL.glBindFramebuffer(GL.GL_FRAMEBUFFER, 0)
Attach FBO images using a context. This automatically returns to the previous FBO binding state when complete. This is useful if you don't know the current binding state:
with useFBO(fbo):
attach(GL.GL_COLOR_ATTACHMENT0, colorTex)
attach(GL.GL_DEPTH_ATTACHMENT, depthRb)
attach(GL.GL_STENCIL_ATTACHMENT, depthRb)
How to set userData some custom function might access:
fbo.userData['flags'] = ['left_eye', 'clear_before_use']
Binding an FBO for drawing/reading:
GL.glBindFramebuffer(GL.GL_FRAMEBUFFER, fb.id)
Depth-only framebuffers are valid, sometimes need for generating shadows:
depthTex = createTexImage2D(800, 600,
internalFormat=GL.GL_DEPTH_COMPONENT24,
pixelFormat=GL.GL_DEPTH_COMPONENT)
fbo = createFBO([(GL.GL_DEPTH_ATTACHMENT, depthTex)])
Deleting a framebuffer when done with it. This invalidates the framebuffer's ID and makes it available for use:
deleteFBO(fbo)