0

我认为我问的是不可能的,但我正在使用 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 来组合你的脚本)将所有东西都包装在一个闭包中,这是不可能的。

4

0 回答 0