Create a gist now

Instantly share code, notes, and snippets.

Browser APIs and their weird dissimilitudes
var worker = new Worker('task.js');
worker.onmessage = function (e) {
// where's addEventListener? A Worker shoud be an EventEmitter
worker.addEventListener('message', function (e) {
// And you know, on() as an alias of addEventListener makes a lot of sense too
// In WebGL, you need to insert a shader in a script tag. Ok, makes sense, it even uses a type different to "text/javascript".
var vSource = document.getElementById("vertex").firstChild.nodeValue;
// Then you need to create a shader object by calling createShader
var vShader = gl.createShader(gl.VERTEX_SHADER);
// Now wait, I have an instance and I need to set the source afterwards?
// Worse, it's an instance but I have to set the source from a method of the context?
gl.shaderSource(vShader, vSource);
// How it should be:
var vShader = gl.createShader(gl.VERTEX_SHADER, vSource);
// Of course, a shader without a source? Maybe I'm missing something and it makes sense, but it still can be an optional parameter
// At any rate, if I was going to set the source of a shader, I'd expect it to do it from the shader itself:
shader.source = vSource; //do'h
// Next we need to compile the shader.
// Wait, something we learned is that compiling is expensive and by the way this is written, it is a synchronous call
// It should be async! For many reasons, like avoiding using try...catch, but also to avoid locking the UI thread compiling shaders
// Then again, it's the shader that's compiling. Have it say that!
shader.compile(function (err) {
if (!err) {
// NodeJS de facto standard. Work here
var program = gl.createProgram();
gl.attachShader(program, vShader);
// Again, why aren't we doing actual OOP?
var program = gl.createProgram();
// I don't expect method chaining from a browser API, but I do expect it to be similar to other APIs
// mostly the DOM, preferrably the good parts of the DOM
// The DOM still has remnants of these APIs when it asks you to call the parent to insert a node:
sibling.parentNode.insertBefore(node, sibling);
// I mean, why do I need the parent?
// That makes sense, right?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment