Skip to content

Commit

Permalink
all methods are implemented for triangle.js, not rendering anything t…
Browse files Browse the repository at this point in the history
…hough
  • Loading branch information
tmpvar committed Aug 21, 2011
1 parent b890792 commit d573cac
Show file tree
Hide file tree
Showing 3 changed files with 291 additions and 101 deletions.
62 changes: 16 additions & 46 deletions example/js/main.cc
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -21,14 +21,23 @@ static JSClass global_class = {




/* JSAPI variables. */ /* JSAPI variables. */
JSRuntime *rt; JSRuntime *rt = NULL;
JSContext *cx; JSContext *cx = NULL;
JSObject *global; JSObject *global = NULL;


void c_exit(int code) { void c_exit(int code) {
JS_DestroyContext(cx); if (cx != NULL) {
JS_DestroyRuntime(rt); JS_DestroyContext(cx);
JS_ShutDown(); }

if (rt != NULL) {
JS_DestroyRuntime(rt);
}

if (global != NULL) {
JS_ShutDown();
}

exit(code); exit(code);
} }


Expand Down Expand Up @@ -90,9 +99,7 @@ static JSFunctionSpec module_global_functions[] = {
JS_FS("webgl_rendering_context_blendEquationSeparate", webgl_rendering_context_blendEquationSeparate, 2 /* GLenum modeRGB, GLenum modeAlpha */, 0), JS_FS("webgl_rendering_context_blendEquationSeparate", webgl_rendering_context_blendEquationSeparate, 2 /* GLenum modeRGB, GLenum modeAlpha */, 0),
JS_FS("webgl_rendering_context_blendFunc", webgl_rendering_context_blendFunc, 2 /* GLenum sfactor, GLenum dfactor */, 0), JS_FS("webgl_rendering_context_blendFunc", webgl_rendering_context_blendFunc, 2 /* GLenum sfactor, GLenum dfactor */, 0),
JS_FS("webgl_rendering_context_blendFuncSeparate", webgl_rendering_context_blendFuncSeparate, 4 /* GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha */, 0), JS_FS("webgl_rendering_context_blendFuncSeparate", webgl_rendering_context_blendFuncSeparate, 4 /* GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha */, 0),
JS_FS("webgl_rendering_context_bufferData", webgl_rendering_context_bufferData, 3 /* GLenum target, GLsizeiptr size, GLenum usage */, 0), JS_FS("webgl_rendering_context_bufferData", webgl_rendering_context_bufferData, 3, 0),
JS_FS("webgl_rendering_context_bufferData", webgl_rendering_context_bufferData, 3 /* GLenum target, ArrayBufferView data, GLenum usage */, 0),
JS_FS("webgl_rendering_context_bufferData", webgl_rendering_context_bufferData, 3 /* GLenum target, ArrayBuffer data, GLenum usage */, 0),
JS_FS("webgl_rendering_context_bufferSubData", webgl_rendering_context_bufferSubData, 3 /* GLenum target, GLintptr offset, ArrayBufferView data */, 0), JS_FS("webgl_rendering_context_bufferSubData", webgl_rendering_context_bufferSubData, 3 /* GLenum target, GLintptr offset, ArrayBufferView data */, 0),
JS_FS("webgl_rendering_context_bufferSubData", webgl_rendering_context_bufferSubData, 3 /* GLenum target, GLintptr offset, ArrayBuffer data */, 0), JS_FS("webgl_rendering_context_bufferSubData", webgl_rendering_context_bufferSubData, 3 /* GLenum target, GLintptr offset, ArrayBuffer data */, 0),
JS_FS("webgl_rendering_context_checkFramebufferStatus", webgl_rendering_context_checkFramebufferStatus, 1 /* GLenum target */, 0), JS_FS("webgl_rendering_context_checkFramebufferStatus", webgl_rendering_context_checkFramebufferStatus, 1 /* GLenum target */, 0),
Expand Down Expand Up @@ -256,42 +263,13 @@ void setupGlobals(JSContext *cx, JSObject *global) {
} }
} }






JSBool printer_construct(JSContext *cx, uintN argc, jsval *argv)
{
cout << "constructed!" << endl;
return JS_TRUE;
}

void printer_finalize(JSContext *cx, JSObject *obj)
{
}

static JSClass printer_class = {
"Printer",
JSCLASS_HAS_PRIVATE | JSCLASS_CONSTRUCT_PROTOTYPE,
JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_StrictPropertyStub,
JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, printer_finalize,
JSCLASS_NO_OPTIONAL_MEMBERS
};

void render() {
glFlush();
}


int main(int argc, char **argv) int main(int argc, char **argv)
{ {
if (argc < 2) { if (argc < 2) {
cout << "Usage: webgljs path/to/app.js" << endl; cout << "Usage: webgljs path/to/app.js" << endl;
c_exit(EXIT_FAILURE); c_exit(EXIT_FAILURE);
} }




const char* filename = argv[1]; const char* filename = argv[1];
char *script = getFileContents(filename); char *script = getFileContents(filename);


Expand All @@ -305,10 +283,6 @@ int main(int argc, char **argv)
if (cx == NULL) if (cx == NULL)
c_exit(EXIT_FAILURE); c_exit(EXIT_FAILURE);






JS_SetOptions(cx, JSOPTION_VAROBJFIX | JSOPTION_JIT | JSOPTION_METHODJIT); JS_SetOptions(cx, JSOPTION_VAROBJFIX | JSOPTION_JIT | JSOPTION_METHODJIT);
JS_SetVersion(cx, JSVERSION_LATEST); JS_SetVersion(cx, JSVERSION_LATEST);
JS_SetErrorReporter(cx, reportError); JS_SetErrorReporter(cx, reportError);
Expand All @@ -321,10 +295,6 @@ int main(int argc, char **argv)
if (!JS_InitStandardClasses(cx, global)) if (!JS_InitStandardClasses(cx, global))
c_exit(EXIT_FAILURE); c_exit(EXIT_FAILURE);



// SET UP CUSTOM CLASS
JS_InitClass(cx, global, NULL, &printer_class, printer_construct, 0, NULL, NULL, NULL, NULL);

jsval rval; jsval rval;
JSString *str; JSString *str;
JSBool ok; JSBool ok;
Expand Down
90 changes: 43 additions & 47 deletions example/triangle.js
Original file line number Original file line Diff line number Diff line change
@@ -1,64 +1,60 @@
var WebGLRenderingContext = require('../lib/webgl.js'); var webgl = require('../lib/webgl.js');
var vertices = [
0.75, 0.75, 0.0, 1.0,
0.75, -0.75, 0.0, 1.0,
-0.75, -0.75, 0.0, 1.0,
];

function e(name, result) {
var e = ctx.getError()
if (e) {
console.log(name, 'failed!', e);
fail();
} else {
console.log(name, 'passed!');
}
return result;
}


var ctx = new WebGLRenderingContext(); var ctx = new webgl.WebGLRenderingContext();
var program = ctx.createProgram(); var program = e('create program', ctx.createProgram());
var shaders = { var shaders = {
vertex : "attribute vec3 pos;\nvoid main() {\n gl_Position = vec4(pos, 1.0);\n}", vertex : "attribute vec3 pos;\nvoid main() {\n gl_Position = vec4(pos, 1.0);\n}",
frag : "void main() {\n gl_FragColor = vec4(1.0, 0, 1, 1.0);\n}" frag : "void main() {\n gl_FragColor = vec4(1.0, 0, 1, 1.0);\n}"
}; };


var vertexShader = ctx.createShader(ctx.VERTEX_SHADER); var vertexShader = e('create shader', ctx.createShader(ctx.VERTEX_SHADER));
var fragShader = ctx.createShader(ctx.FRAGMENT_SHADER); var fragShader = e('create shader', ctx.createShader(ctx.FRAGMENT_SHADER));


ctx.shaderSource(vertexShader, shaders.vertex); e('shader source', ctx.shaderSource(vertexShader, shaders.vertex));
ctx.shaderSource(fragShader, shaders.frag); e('shader source', ctx.shaderSource(fragShader, shaders.frag));

e('compile shader', ctx.compileShader(vertexShader));
ctx.compileShader(vertexShader); e('compile shader', ctx.compileShader(fragShader));
ctx.compileShader(fragShader); e('attach shader', ctx.attachShader(program, vertexShader));

e('attach shader', ctx.attachShader(program, fragShader));
ctx.attachShader(program, vertexShader); e('link program', ctx.linkProgram(program));
ctx.attachShader(program, fragShader);
ctx.linkProgram(program);


if (!ctx.getProgramParameter(program, ctx.LINK_STATUS)) { if (!ctx.getProgramParameter(program, ctx.LINK_STATUS)) {
console.log("Could not link program"); console.log("Could not link program.\n Error:", ctx.getError());
console.log(ctx.getProgramInfoLog(program));
fail(); fail();
} }


ctx.useProgram(program); e('use program', ctx.useProgram(program));
var attr = ctx.getAttribLocation(program, "pos"); var attr = e('attribute location', ctx.getAttribLocation(program, "pos"));
var vertexBuffer = ctx.createBuffer(); var vertexBuffer = e('create buffer', ctx.createBuffer());

vertexBuffer.itemSize = 3;
vertexBuffer.numItems = 3;


/* e('bind buffer', ctx.bindBuffer(ctx.ARRAY_BUFFER, vertexBuffer));
const float vertexPositions[] = { e('buffer data', ctx.bufferData(ctx.ARRAY_BUFFER, new Float32Array(vertexBuffer)));
0.75f, 0.75f, 0.0f, 1.0f,
0.75f, -0.75f, 0.0f, 1.0f,
-0.75f, -0.75f, 0.0f, 1.0f,
};
*/

var vertices = [
0.0, 1.0, 0.0,
-1.0, -1.0, 0.0,
1.0, -1.0, 0.0
];

ctx.bindBuffer(ctx.ARRAY_BUFFER, vertexBuffer);
ctx.bufferData(ctx.ARRAY_BUFFER, new Float32Array(vertexBuffer));


var a = 10000; var a = 10000;
while(a--) { while(a--) {

e('clear color', ctx.clearColor(0.5, 0.5, 0.5, 1));
ctx.clearColor(0.5, 0.5, 0.5, 1); e('clear', ctx.clear(ctx.COLOR_BUFFER_BIT | ctx.DEPTH_BUFFER_BIT));
ctx.clear(ctx.COLOR_BUFFER_BIT, ctx.DEPTH_BUFFER_BIT); e('bind buffer', ctx.bindBuffer(ctx.ARRAY_BUFFER, vertexBuffer));
ctx.bindBuffer(ctx.ARRAY_BUFFER, vertexBuffer); e('enable vertex attrib array', ctx.enableVertexAttribArray(attr));
ctx.enableVertexAttribArray(attr); e('vertex pointer', ctx.vertexAttribPointer(attr, 3, ctx.FLOAT, false, 0, 0));
ctx.vertexAttribPointer(attr, vertexBuffer.itemSize, ctx.FLOAT, false, 0, 0); e('draw arrays', ctx.drawArrays(ctx.TRIANGLES, 0, 3));
ctx.drawArrays(ctx.TRIANGLES, 0, 3); e('flush', ctx.flush());
ctx.flush();
} }

console.log("DONE");
fail();
Loading

0 comments on commit d573cac

Please sign in to comment.