123456789101112131415161718192021222324252627282930313233343536373839404142 |
- /**
- * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
- *
- * @author Alexander Rose <alexander.rose@weirdbyte.de>
- */
- import { WebGLContext } from './context';
- import { Program } from './program';
- import { ElementsBuffer, AttributeBuffers } from './buffer';
- export function createVertexArray(ctx: WebGLContext, program: Program, attributeBuffers: AttributeBuffers, elementsBuffer?: ElementsBuffer) {
- const { vertexArrayObject } = ctx.extensions
- let vertexArray: WebGLVertexArrayObject | null = null
- if (vertexArrayObject) {
- vertexArray = vertexArrayObject.createVertexArray()
- if (vertexArray) {
- updateVertexArray(ctx, vertexArray, program, attributeBuffers, elementsBuffer)
- ctx.stats.vaoCount += 1
- } else {
- console.warn('Could not create WebGL vertex array')
- }
- }
- 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) {
- const { vertexArrayObject } = ctx.extensions
- if (vertexArrayObject && vertexArray) {
- vertexArrayObject.deleteVertexArray(vertexArray)
- ctx.stats.vaoCount -= 1
- }
- }
|