I'd like to move the global variables vertexBlaBuffer to the scope of the Geometry prototype:
Any tips?Code:function Geometry(position, rotation, path) { this.position = position; this.rotation = rotation; this.path = path; var request = new XMLHttpRequest(); request.open("GET", path); request.onreadystatechange = function() { if (request.readyState == 4) { handleLoadedModel(JSON.parse(request.responseText)); } } request.send(); initTextures(); } var vertexPositionBuffer; var vertexNormalBuffer; var vertexTextureCoordBuffer; var vertexIndexBuffer; function handleLoadedModel(modelData) { vertexNormalBuffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, vertexNormalBuffer); gl.bufferData(gl.ARRAY_BUFFER, new WebGLFloatArray(modelData.vertexNormals), gl.STATIC_DRAW); vertexNormalBuffer.itemSize = 3; vertexNormalBuffer.numItems = modelData.vertexNormals.length / 3; vertexTextureCoordBuffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, vertexTextureCoordBuffer); gl.bufferData(gl.ARRAY_BUFFER, new WebGLFloatArray(modelData.vertexTextureCoords), gl.STATIC_DRAW); vertexTextureCoordBuffer.itemSize = 2; vertexTextureCoordBuffer.numItems = modelData.vertexTextureCoords.length / 2; vertexPositionBuffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, vertexPositionBuffer); gl.bufferData(gl.ARRAY_BUFFER, new WebGLFloatArray(modelData.vertexPositions), gl.STATIC_DRAW); vertexPositionBuffer.itemSize = 3; vertexPositionBuffer.numItems = modelData.vertexPositions.length / 3; vertexIndexBuffer = gl.createBuffer(); gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, vertexIndexBuffer); gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new WebGLUnsignedShortArray(modelData.indices), gl.STREAM_DRAW); vertexIndexBuffer.itemSize = 1; vertexIndexBuffer.numItems = modelData.indices.length; } Geometry.prototype.draw = function() { mvPushMatrix(); mvTranslate(this.position); multMatrix(this.rotation); // Tell WebGL you want to work with the cube's vertex positions buffer gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBuffer); // Feed the shader program with the cube's vertex positions gl.vertexAttribPointer(currentProgram.vertexPositionAttribute, this.vertexPositionBuffer.itemSize, gl.FLOAT, false, 0, 0); // Tell WebGL you want to work with the cube's normal buffer gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexNormalBuffer); // Feed the shader program with the cube's vertex normals gl.vertexAttribPointer(currentProgram.vertexNormalAttribute, this.vertexNormalBuffer.itemSize, gl.FLOAT, false, 0, 0); // Tell WebGL you want to work with the cube's texture buffer gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexTextureCoordBuffer); // Feed the shader program with the cube's texture data gl.vertexAttribPointer(currentProgram.textureCoordAttribute, this.vertexTextureCoordBuffer.itemSize, gl.FLOAT, false, 0, 0); gl.activeTexture(gl.TEXTURE0); gl.bindTexture(gl.TEXTURE_2D, texture); gl.uniform1i(currentProgram.samplerUniform, 0); // Tell WebGL you want to work with the cube's vertex index buffer gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.vertexIndexBuffer); // Draw the cube gl.drawElements(gl.TRIANGLES, this.vertexIndexBuffer.numItems, gl.UNSIGNED_SHORT, 0); mvPopMatrix(); }


Reply With Quote
Bookmarks