refacto : use context object instead of returns
This commit is contained in:
		
							parent
							
								
									773c7a6091
								
							
						
					
					
						commit
						0e5e93d177
					
				|  | @ -1,27 +1,45 @@ | |||
| import {initShaderProgram, | ||||
| 	unlinkShaderProgram} from './shaders'; | ||||
| import $ from 'jquery'; | ||||
| 
 | ||||
| /** | ||||
|  * | ||||
|  * Initialize the parameters | ||||
|  * @param {any} context the program context | ||||
|  * @param {string} fsSource new fragment shader source | ||||
|  * @param {string} vsSource current vsSource | ||||
|  */ | ||||
| export function changeFragmentShader(context: any, | ||||
| 	fsSource: string, | ||||
| 	vsSource: string) { | ||||
| 	[context.shaderProgram, context.fragmentShader] = | ||||
| 		unlinkShaderProgram(context.gl, | ||||
| 			context.fragmentShader, | ||||
| 			context.shaderProgram); | ||||
| 	initShaderProgram(context, vsSource, fsSource); | ||||
| export function initParams(context: any) { | ||||
| 	const distance: any = $('#distance').val(); | ||||
| 	const distanceFine: any = $('#distancefine').val(); | ||||
| 
 | ||||
| 	context.params = { | ||||
| 		distance: parseFloat(distance) + parseFloat(distanceFine), | ||||
| 		circleSize: $('#circlesize').val(), | ||||
| 		fov: $('#fov').val(), | ||||
| 		length: 0, | ||||
| 		avg: { | ||||
| 			x: 0, | ||||
| 			y: 0, | ||||
| 			z: 0, | ||||
| 		}, | ||||
| 		range: 0, | ||||
| 		rot: { | ||||
| 			x: $('#rotx').val(), | ||||
| 			y: $('#roty').val(), | ||||
| 			z: $('#rotz').val(), | ||||
| 		}, | ||||
| 		rotSpeed: $('#rotspeed').val(), | ||||
| 		instanceNumber: $('#instance').val(), | ||||
| 		squareRotation: 0, | ||||
| 	}; | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Set the program info | ||||
|  * @param {any} context the program context | ||||
|  */ | ||||
| export function setProgramInfo(context: any) { | ||||
| 	context.programInfo = { | ||||
| 		program: context.shaderProgram, | ||||
| 		attribLocations: { | ||||
| 			vertexPosition: context.gl.getAttribLocation(context.shaderProgram, | ||||
| 				'aVertexPosition'), | ||||
| 			vertexColor: context.gl.getAttribLocation(context.shaderProgram, | ||||
| 				'aVertexColor'), | ||||
| 			vertexNormal: context.gl.getAttribLocation(context.shaderProgram, | ||||
| 				'aVertexNormal'), | ||||
| 			textureCoord: context.gl.getAttribLocation(context.shaderProgram, | ||||
|  | @ -1,5 +1,3 @@ | |||
| 
 | ||||
| import $ from 'jquery'; | ||||
| import vsSource from './shaders/shader.vert'; | ||||
| import fsSource4 from './shaders/texture.frag'; | ||||
| 
 | ||||
|  | @ -7,6 +5,7 @@ import {fetchObj, updateObj} from './objutils'; | |||
| import {initShaderProgram} from './shaders'; | ||||
| import {loadTexture} from './texture'; | ||||
| import {drawScene} from './draw'; | ||||
| import {initParams, setProgramInfo} from './init'; | ||||
| 
 | ||||
| import {uiUpdateParams, | ||||
| 	uiUpdateTexture, | ||||
|  | @ -40,57 +39,11 @@ async function main() { | |||
| 	} | ||||
| 
 | ||||
| 	const data = await fetchObj('/static/objs/racer.obj'); | ||||
| 	const distance: any = $('#distance').val(); | ||||
| 	const distanceFine: any = $('#distancefine').val(); | ||||
| 	const instanceNumber: any = $('#instance').val(); | ||||
| 	context.params = { | ||||
| 		distance: parseFloat(distance) + parseFloat(distanceFine), | ||||
| 		circleSize: $('#circlesize').val(), | ||||
| 		fov: $('#fov').val(), | ||||
| 		length: 0, | ||||
| 		avg: { | ||||
| 			x: 0, | ||||
| 			y: 0, | ||||
| 			z: 0, | ||||
| 		}, | ||||
| 		range: 0, | ||||
| 		rot: { | ||||
| 			x: $('#rotx').val(), | ||||
| 			y: $('#roty').val(), | ||||
| 			z: $('#rotz').val(), | ||||
| 		}, | ||||
| 		rotSpeed: $('#rotspeed').val(), | ||||
| 		instanceNumber: parseInt(instanceNumber), | ||||
| 		squareRotation: 0, | ||||
| 	}; | ||||
| 	[context.buffers, context.params] = updateObj( | ||||
| 		context.gl, data, context.buffers, context.params, true); | ||||
| 
 | ||||
| 	initParams(context); | ||||
| 	console.log(context.params); | ||||
| 	updateObj(context, data, true); | ||||
| 	initShaderProgram(context, vsSource, fsSource4); | ||||
| 	context.programInfo = { | ||||
| 		program: context.shaderProgram, | ||||
| 		attribLocations: { | ||||
| 			vertexPosition: context.gl.getAttribLocation(context.shaderProgram, | ||||
| 				'aVertexPosition'), | ||||
| 			vertexNormal: context.gl.getAttribLocation(context.shaderProgram, | ||||
| 				'aVertexNormal'), | ||||
| 			textureCoord: context.gl.getAttribLocation(context.shaderProgram, | ||||
| 				'aTextureCoord'), | ||||
| 		}, | ||||
| 		uniformLocations: { | ||||
| 			projectionMatrix: context.gl.getUniformLocation( | ||||
| 				context.shaderProgram, 'uProjectionMatrix'), | ||||
| 			viewMatrix: context.gl.getUniformLocation( | ||||
| 				context.shaderProgram, 'uviewMatrix'), | ||||
| 			modelMatrix: context.gl.getUniformLocation( | ||||
| 				context.shaderProgram, 'umodelMatrix'), | ||||
| 			normalModelMatrix: context.gl.getUniformLocation( | ||||
| 				context.shaderProgram, 'unormalModelMatrix'), | ||||
| 			uSampler: context.gl.getUniformLocation( | ||||
| 				context.shaderProgram, 'uSampler'), | ||||
| 		}, | ||||
| 	}; | ||||
| 
 | ||||
| 	setProgramInfo(context); | ||||
| 	context.texture = loadTexture(context.gl, '/static/textures/racer.png'); | ||||
| 	let then = 0; | ||||
| 	let changed = false; | ||||
|  |  | |||
|  | @ -15,18 +15,13 @@ export async function fetchObj(url: string) { | |||
| 
 | ||||
| /** | ||||
|  * Pushes a new obj file to the gl buffer | ||||
|  * @param {any} gl the WebGL context | ||||
|  * @param {any} context the program context | ||||
|  * @param {string} data the obj file to push | ||||
|  * @param {any} buffers the buffers to be updated | ||||
|  * @param {any} params the params to be updated | ||||
|  * @param {boolean} firstCall is it first object updated ? | ||||
|  * @return {Array<any>} the updated buffers and params | ||||
|  */ | ||||
| export function updateObj( | ||||
| 	gl: any, | ||||
| 	context: any, | ||||
| 	data: string, | ||||
| 	buffers: any, | ||||
| 	params: any, | ||||
| 	firstCall: boolean = false) { | ||||
| 	const [ | ||||
| 		positions, | ||||
|  | @ -34,7 +29,7 @@ export function updateObj( | |||
| 		uvs, | ||||
| 		indices, | ||||
| 	] = convert(data); | ||||
| 	params.length = indices.length; | ||||
| 	context.params.length = indices.length; | ||||
| 	let x = 0; | ||||
| 	let y = 0; | ||||
| 	let z = 0; | ||||
|  | @ -68,13 +63,12 @@ export function updateObj( | |||
| 			z += positions[i]; | ||||
| 		} | ||||
| 	} | ||||
| 	params.range = Math.max(maxx - minx, maxy - miny, maxz - minz); | ||||
| 	params.avg.x = x / (positions.length / 3); | ||||
| 	params.avg.y = y / (positions.length / 3); | ||||
| 	params.avg.z = z / (positions.length / 3); | ||||
| 	context.params.range = Math.max(maxx - minx, maxy - miny, maxz - minz); | ||||
| 	context.params.avg.x = x / (positions.length / 3); | ||||
| 	context.params.avg.y = y / (positions.length / 3); | ||||
| 	context.params.avg.z = z / (positions.length / 3); | ||||
| 	if (!firstCall) { | ||||
| 		deleteBuffers(gl, buffers); | ||||
| 		deleteBuffers(context.gl, context.buffers); | ||||
| 	} | ||||
| 	buffers = initBuffers(gl, positions, indices, normals, uvs); | ||||
| 	return [buffers, params]; | ||||
| 	context.buffers = initBuffers(context.gl, positions, indices, normals, uvs); | ||||
| } | ||||
|  |  | |||
|  | @ -1,15 +1,4 @@ | |||
| /** | ||||
|  * Initialize a shader program, so WebGL knows how to draw our data | ||||
|  * @param {any} gl the WebGL context | ||||
|  * @param {any} shader the shader to unlink | ||||
|  * @param {any} shaderProgram the existing shaderprogram | ||||
|  * @return {any} the shader program | ||||
|  */ | ||||
| export function unlinkShaderProgram(gl: any, shader: any, shaderProgram: any) { | ||||
| 	// Create the shader program
 | ||||
| 	gl.deleteShader(shader); | ||||
| 	return [shaderProgram, shader]; | ||||
| } | ||||
| import {setProgramInfo} from './init'; | ||||
| 
 | ||||
| /** | ||||
|  * Initialize a shader program, so WebGL knows how to draw our data | ||||
|  | @ -62,3 +51,17 @@ export function loadShader(gl: any, type: any, source: string) { | |||
| 	} | ||||
| 	return shader; | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * | ||||
|  * @param {any} context the program context | ||||
|  * @param {string} fsSource new fragment shader source | ||||
|  * @param {string} vsSource current vsSource | ||||
|  */ | ||||
| export function changeFragmentShader(context: any, | ||||
| 	fsSource: string, | ||||
| 	vsSource: string) { | ||||
| 	context.gl.deleteShader(context.fragmentShader); | ||||
| 	initShaderProgram(context, vsSource, fsSource); | ||||
| 	setProgramInfo(context); | ||||
| } | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| import $ from 'jquery'; | ||||
| import {loadTexture} from './texture'; | ||||
| import {fetchObj, updateObj} from './objutils'; | ||||
| import {changeFragmentShader} from './changeshader'; | ||||
| import {changeFragmentShader} from './shaders'; | ||||
| 
 | ||||
| import vsSource from './shaders/shader.vert'; | ||||
| import fsSource from './shaders/blackandwhite.frag'; | ||||
|  | @ -94,38 +94,23 @@ export function uiUpdateTexture(context: any) { | |||
| export function uiUpdateObject(context: any) { | ||||
| 	$('#o_sphere').on('click', async function() { | ||||
| 		const data = await fetchObj('/static/objs/sphere.obj'); | ||||
| 		[context.buffers, context.params] = updateObj(context.gl, | ||||
| 			data, | ||||
| 			context.buffers, | ||||
| 			context.params); | ||||
| 		updateObj(context, data); | ||||
| 	}); | ||||
| 	$('#o_teapot').on('click', async function() { | ||||
| 		const data = await fetchObj('/static/objs/teapot.obj'); | ||||
| 		[context.buffers, context.params] = updateObj(context.gl, | ||||
| 			data, | ||||
| 			context.buffers, | ||||
| 			context.params); | ||||
| 		updateObj(context, data); | ||||
| 	}); | ||||
| 	$('#o_fox').on('click', async function() { | ||||
| 		const data = await fetchObj('/static/objs/fox.obj'); | ||||
| 		[context.buffers, context.params] = updateObj(context.gl, | ||||
| 			data, | ||||
| 			context.buffers, | ||||
| 			context.params); | ||||
| 		updateObj(context, data); | ||||
| 	}); | ||||
| 	$('#o_mecha').on('click', async function() { | ||||
| 		const data = await fetchObj('/static/objs/mecha.obj'); | ||||
| 		[context.buffers, context.params] = updateObj(context.gl, | ||||
| 			data, | ||||
| 			context.buffers, | ||||
| 			context.params); | ||||
| 		updateObj(context, data); | ||||
| 	}); | ||||
| 	$('#o_racer').on('click', async function() { | ||||
| 		const data = await fetchObj('/static/objs/racer.obj'); | ||||
| 		[context.buffers, context.params] = updateObj(context.gl, | ||||
| 			data, | ||||
| 			context.buffers, | ||||
| 			context.params); | ||||
| 		updateObj(context, data); | ||||
| 	}); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue