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);