package javaforce.webui; /** Test WebUI / WebGL. * * @author pquiring */ import javaforce.webui.event.*; import javaforce.gl.*; public class TestGL implements WebUIHandler { public Resource img; public TestGL() { } public static void main(String args[]) { new WebUIServer().start(new TestGL(), 8080, false); } public byte[] getResource(String url) { //TODO : return static images, etc needed by webpage return null; } private String vs = " attribute vec3 aVertexPosition;\n" + " attribute vec4 aVertexColor;\n" + "\n" + " uniform mat4 uPMatrix;\n" + " uniform mat4 uMVMatrix;\n" + " \n" + " varying lowp vec4 vColor;\n" + "\n" + " void main(void) {\n" + " gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);\n" + " vColor = aVertexColor;\n" + " }\n"; private String fs = " varying lowp vec4 vColor;\n" + "\n" + " void main(void) {\n" + " gl_FragColor = vColor;\n" + " }\n"; private float[] colors = {1.0f, 1.0f, 1.0f, 1.0f, // white 1.0f, 0.0f, 0.0f, 1.0f, // red 0.0f, 1.0f, 0.0f, 1.0f, // green 0.0f, 0.0f, 1.0f, 1.0f}; // blue private float[] vertices = {1.0f, 1.0f, 0.0f, -1.0f, 1.0f, 0.0f, 1.0f,-1.0f, 0.0f, -1.0f,-1.0f, 0.0f}; public byte[] convertFloatArray(float m[]) { byte data[] = new byte[16 * 4]; int off = 0; for(int a=0;a<m.length;a++) { javaforce.LE.setuint32(data, off, Float.floatToIntBits(m[a])); off += 4; } return data; } public Panel getRootPanel(WebUIClient client) { Panel panel = new Panel() { public void onLoaded(String args[]) { GLMatrix pMatrix = new GLMatrix(); pMatrix.perspective(45f, 640.0f/480.0f, 0.1f, 100.0f); GLMatrix mMatrix = new GLMatrix(); mMatrix.addTranslate(0, 0, -4.0f); Canvas canvas = (Canvas)getProperty("canvas"); //init gl resources canvas.sendEvent("initwebgl", null); canvas.sendEvent("loadvs", new String[] {"src=" + vs}); canvas.sendEvent("loadfs", new String[] {"src=" + fs}); canvas.sendEvent("link", null); canvas.sendEvent("getuniform", new String[] {"idx=0", "name=uPMatrix"}); canvas.sendEvent("getuniform", new String[] {"idx=1", "name=uMVMatrix"}); canvas.sendEvent("getattrib", new String[] {"idx=0", "name=aVertexPosition"}); canvas.sendEvent("getattrib", new String[] {"idx=1", "name=aVertexColor"}); canvas.sendData(convertFloatArray(pMatrix.m)); canvas.sendEvent("matrix", new String[] {"idx=0"}); canvas.sendData(convertFloatArray(mMatrix.m)); canvas.sendEvent("matrix", new String[] {"idx=1"}); canvas.sendData(convertFloatArray(vertices)); canvas.sendEvent("buffer", new String[] {"idx=0"}); canvas.sendData(convertFloatArray(colors)); canvas.sendEvent("buffer", new String[] {"idx=1"}); //setup rendering pipeline canvas.sendEvent("r_matrix", new String[] {"idx=0", "uidx=0", "midx=0"}); canvas.sendEvent("r_matrix", new String[] {"idx=1", "uidx=1", "midx=1"}); canvas.sendEvent("r_attrib", new String[] {"idx=2", "aidx=0", "bufidx=0", "cnt=3"}); canvas.sendEvent("r_attrib", new String[] {"idx=3", "aidx=1", "bufidx=1", "cnt=4"}); canvas.sendEvent("r_drawArrays", new String[] {"idx=4", "type=" + GL.GL_TRIANGLE_STRIP, "cnt=4"}); } }; Canvas canvas = new Canvas(); canvas.setWidth("640px"); canvas.setHeight("480px"); panel.add(canvas); panel.setProperty("canvas", canvas); return panel; } }