[6d7e3a]: / org.synthclipse.examples / examples_jsx / II. Synth API / 1. ProgramFactory / program-factory.jsx  Maximize  Restore  History

Download this file

81 lines (65 with data), 3.2 kB

/*!
 * This example demonstrates use of ProgramFactory global object.
 * ProgramFactory creates instances of GLSLProgram class.
 *
 * GLSLProgram is wrapper of an OpenGL's shader program. It is slightly
 * easer to use (less verbose), but more importantly, it parses shader code
 * in search of Uniform Controls and Commands.
 *
 * ----------------------------------------------------------------------------------------------------
 * WARNING: Do not treat objects returned from Synth API as ordinary JavaScript
 *          objects. They are not dynamic objects - you cannot add to them variable/properties, e.g.:
 *
 *          	var program = ProgramFactory.createProgram("MyProgram");
 *          	program.someNewVariable = 5; // THIS WON'T WORK, but unfortunately you won't
 *                                           // get any error message doing so.
 * ----------------------------------------------------------------------------------------------------
 *
 * Documentation (for Java but it is also valid for JavaScript):
 *
 * - Synthclipse: http://synthclipse.sourceforge.net/scripting/api/index.html?org/synthclipse/scripting/core/JSSynthclipse.html
 * - ProgramFactory: http://synthclipse.sourceforge.net/scripting/api/index.html?org/synthclipse/scripting/gl/GLSLProgramFactory.html
 * - GLSLProgram: http://synthclipse.sourceforge.net/scripting/api/index.html?org/synthclipse/scripting/gl/GLSLProgram.html
 * - gl (for OpenGL 3+): http://synthclipse.sourceforge.net/scripting/api/index.html?org/synthclipse/scripting/gl/GL3Proxy.html
 * - gl (for OpenGL 4+): http://synthclipse.sourceforge.net/scripting/api/index.html?org/synthclipse/scripting/gl/GL4Proxy.html
 * - GeometryFactory: http://synthclipse.sourceforge.net/scripting/api/index.html?org/synthclipse/scripting/geom/GeometryFactory.html
 * - CameraManager: http://synthclipse.sourceforge.net/scripting/api/index.html?org/synthclipse/scripting/core/ICameraManager.html
 * - out (Console output stream): http://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html
 */
"use strict";

var renderable = {};

var program = null;
var model = null;

function initShaders() {
	program = ProgramFactory.createProgram("MyProgram");

	program.attachShader("shaders/program-factory.frag");
	program.attachShader("shaders/program-factory.vert");

	program.link();
	program.use();

	// print some debug information:
	program.printActiveAttributes();
	out.println();
	program.printActiveUniforms();

	// We can load saved preset:
	program.loadPreset("SomePreset");

	// If we want to have controls in the Uniform Controls View
	// we must create them explicitly:
    Synthclipse.createControls(program);
}

renderable.init = function() {
	initShaders();
	model = GeometryFactory.createTorus(0.5, 1.0, 32, 32);

	gl.clearColor(0.9, 0.8, 0.77, 1.0);
	gl.enable(gl.DEPTH_TEST);

	var freeCamera = CameraManager.getFreeCamera();
	freeCamera.setPosition(0, 0, -10);
	CameraManager.invertMouse = false;

	CameraManager.useFreeCamera();
};

renderable.display = function() {
	gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);

	program.use();
	program.applyUniforms();

	model.render();
};

Synthclipse.setRenderable(renderable);