Skip to content
Snippets Groups Projects
Commit 9e121dd1 authored by Alexander Rose's avatar Alexander Rose
Browse files

vao update improvements

parent 03a2966b
Branches
Tags
No related merge requests found
...@@ -216,11 +216,20 @@ export function createRenderItem(ctx: WebGLContext, drawMode: DrawMode, shaderCo ...@@ -216,11 +216,20 @@ export function createRenderItem(ctx: WebGLContext, drawMode: DrawMode, shaderCo
} }
if (valueChanges.attributes || valueChanges.defines || valueChanges.elements) { if (valueChanges.attributes || valueChanges.defines || valueChanges.elements) {
// console.log('program/defines or buffers changed, rebuild vaos') // console.log('program/defines or buffers changed, update vaos')
Object.keys(RenderVariantDefines).forEach(k => { const { vertexArrayObject } = ctx.extensions
deleteVertexArray(ctx, vertexArrays[k]) if (vertexArrayObject) {
vertexArrays[k] = createVertexArray(ctx, programs[k].value, attributeBuffers, elementsBuffer) Object.keys(RenderVariantDefines).forEach(k => {
}) vertexArrayObject.bindVertexArray(vertexArrays[k])
if (elementsBuffer && (valueChanges.defines || valueChanges.elements)) {
elementsBuffer.bind()
}
if (valueChanges.attributes || valueChanges.defines) {
programs[k].value.bindAttributes(attributeBuffers)
}
vertexArrayObject.bindVertexArray(null)
})
}
} }
valueChanges.textures = false valueChanges.textures = false
......
...@@ -17,11 +17,21 @@ export function createVertexArray(ctx: WebGLContext, program: Program, attribute ...@@ -17,11 +17,21 @@ export function createVertexArray(ctx: WebGLContext, program: Program, attribute
if (elementsBuffer) elementsBuffer.bind() if (elementsBuffer) elementsBuffer.bind()
program.bindAttributes(attributeBuffers) program.bindAttributes(attributeBuffers)
ctx.vaoCount += 1 ctx.vaoCount += 1
vertexArrayObject.bindVertexArray(null!) vertexArrayObject.bindVertexArray(null)
} }
return vertexArray return vertexArray
} }
export function updateVertexArray(ctx: WebGLContext, vertexArray: WebGLVertexArrayObject | null, program: Program, attributeBuffers: AttributeBuffers, elementsBuffer?: ElementsBuffer) {
const { vertexArrayObject } = ctx.extensions
if (vertexArrayObject && vertexArray) {
vertexArrayObject.bindVertexArray(vertexArray)
if (elementsBuffer) elementsBuffer.bind()
program.bindAttributes(attributeBuffers)
vertexArrayObject.bindVertexArray(null)
}
}
export function deleteVertexArray(ctx: WebGLContext, vertexArray: WebGLVertexArrayObject | null) { export function deleteVertexArray(ctx: WebGLContext, vertexArray: WebGLVertexArrayObject | null) {
const { vertexArrayObject } = ctx.extensions const { vertexArrayObject } = ctx.extensions
if (vertexArrayObject && vertexArray) { if (vertexArrayObject && vertexArray) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment