StackGenVis: Alignment of Data, Algorithms, and Models for Stacking Ensemble Learning Using Performance Metrics
https://doi.org/10.1109/TVCG.2020.3030352
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.1 KiB
87 lines
2.1 KiB
"use strict"
|
|
|
|
var bindAttribs = require("./do-bind.js")
|
|
|
|
function VertexAttribute(location, dimension, a, b, c, d) {
|
|
this.location = location
|
|
this.dimension = dimension
|
|
this.a = a
|
|
this.b = b
|
|
this.c = c
|
|
this.d = d
|
|
}
|
|
|
|
VertexAttribute.prototype.bind = function(gl) {
|
|
switch(this.dimension) {
|
|
case 1:
|
|
gl.vertexAttrib1f(this.location, this.a)
|
|
break
|
|
case 2:
|
|
gl.vertexAttrib2f(this.location, this.a, this.b)
|
|
break
|
|
case 3:
|
|
gl.vertexAttrib3f(this.location, this.a, this.b, this.c)
|
|
break
|
|
case 4:
|
|
gl.vertexAttrib4f(this.location, this.a, this.b, this.c, this.d)
|
|
break
|
|
}
|
|
}
|
|
|
|
function VAONative(gl, ext, handle) {
|
|
this.gl = gl
|
|
this._ext = ext
|
|
this.handle = handle
|
|
this._attribs = []
|
|
this._useElements = false
|
|
this._elementsType = gl.UNSIGNED_SHORT
|
|
}
|
|
|
|
VAONative.prototype.bind = function() {
|
|
this._ext.bindVertexArrayOES(this.handle)
|
|
for(var i=0; i<this._attribs.length; ++i) {
|
|
this._attribs[i].bind(this.gl)
|
|
}
|
|
}
|
|
|
|
VAONative.prototype.unbind = function() {
|
|
this._ext.bindVertexArrayOES(null)
|
|
}
|
|
|
|
VAONative.prototype.dispose = function() {
|
|
this._ext.deleteVertexArrayOES(this.handle)
|
|
}
|
|
|
|
VAONative.prototype.update = function(attributes, elements, elementsType) {
|
|
this.bind()
|
|
bindAttribs(this.gl, elements, attributes)
|
|
this.unbind()
|
|
this._attribs.length = 0
|
|
if(attributes)
|
|
for(var i=0; i<attributes.length; ++i) {
|
|
var a = attributes[i]
|
|
if(typeof a === "number") {
|
|
this._attribs.push(new VertexAttribute(i, 1, a))
|
|
} else if(Array.isArray(a)) {
|
|
this._attribs.push(new VertexAttribute(i, a.length, a[0], a[1], a[2], a[3]))
|
|
}
|
|
}
|
|
this._useElements = !!elements
|
|
this._elementsType = elementsType || this.gl.UNSIGNED_SHORT
|
|
}
|
|
|
|
VAONative.prototype.draw = function(mode, count, offset) {
|
|
offset = offset || 0
|
|
var gl = this.gl
|
|
if(this._useElements) {
|
|
gl.drawElements(mode, count, this._elementsType, offset)
|
|
} else {
|
|
gl.drawArrays(mode, offset, count)
|
|
}
|
|
}
|
|
|
|
function createVAONative(gl, ext) {
|
|
return new VAONative(gl, ext, ext.createVertexArrayOES())
|
|
}
|
|
|
|
module.exports = createVAONative |