我认为我问的是不可能的,但我正在使用 Coffeescript 创建一个简单的 WebGL 库。我在看纹理和着色器,我有以下设置。在我的示例文件中,我有这个:
cgl = new CoffeeGL.App('webgl-canvas')
shader = new CoffeeGL.Shader.Basic(cgl).bind()
cgl.drawLoop = () ->
@gl.clearColor(0.15, 0.15, 0.15, 1.0)
@gl.clear(@gl.COLOR_BUFFER_BIT | @gl.DEPTH_BUFFER_BIT)
@updateCamera(c)
@draw(n0) if n0?
看一下着色器。它通过了一个应用程序。这个 App 类基本上是一个处理上下文的对象。GL 上下文、画布和所有这些都很好地封装在一个类中。由于着色器在其整个生命周期中都需要上下文(与已发送到图形卡的纹理和几何图形相同),因此在创建它时会给出上下文。
这让我觉得不那么优雅。是否可以创建类似的东西
cgl = new CoffeeGL.App('webgl-canvas')
cgl.init = () ->
shader = new CoffeeGL.Shader.Basic().bind()
cgl.drawLoop = () ->
@gl.clearColor(0.15, 0.15, 0.15, 1.0)
@gl.clear(@gl.COLOR_BUFFER_BIT | @gl.DEPTH_BUFFER_BIT)
@updateCamera(c)
@draw(n0) if n0?
上下文实际上是从调用构造函数(或编译或绑定 - 本身不必是构造函数)的事实中收集到的
我想,因为 Coffeescript(特别是如果你使用 node.js 来组合你的脚本)将所有东西都包装在一个闭包中,这是不可能的。