Coder Social home page Coder Social logo

Support instancing about twgl.js HOT 3 CLOSED

greggman avatar greggman commented on May 22, 2024
Support instancing

from twgl.js.

Comments (3)

greggman avatar greggman commented on May 22, 2024

A big issue is how opinionated twgl should be here. I feel like it might be best if instancing only worked with vertex array objects. Why? Because if you don't use vertex array objects then twgl would have to reset the divisor on all attributes. Given vertex array objects are supported almost everywhere (pretty much only IE11) it would be best not to over complicate twgl to handle the case when not using vertex array objects?

OR? Maybe it doesn't matter. TWGL should just call vertexAttribDivisor if you specify a divisor on the attribute and it's up to you to deal with the consequences if you don't use a vertex array object. In other words you'd need to put divisor: 0 if you want twgl to reset the divisor for other draw calls when not using vertex array objects.

The other issue which I don't have a good solution for is how to handle the extension in WebGL1. You need to somehow tell twgl about the extension. Currently twgl is almost completely stateless. Except for a few defaults. But, to use the ANGLE_instanced_arrays extension requires either

  1. twgl look it up every time on use

    that would seem like it would be too slow

  2. have twgl require you to register the extension with twgl

    problem then is you can't support 2 contexts unless you manually register
    the correct context before expecting twgl to use it

  3. have twgl add it to the WebGLRenderingContext.

    maybe something like

      twgl.setDefault({ addExtensionsOnContext: true })
    

    In which case TWGL would just copy as many extensions as it can/supports
    directly to the WebGLRenderingContext under their WebGL2 names. For example
    if you'd be able to use gl.createVertexArray instead of extension.createVertexArrayOES

    twgl would then use those features if enabled or maybe that should just be the default
    and if you don't want that you use

      twgl.setDefault({ addExtensionsOnContext: false })
    

I guess I'm leaning toward #3. It would mean any compatible WebGL2 code would just work

from twgl.js.

greggman avatar greggman commented on May 22, 2024

I ended up doing # 3 above and added the function twgl.addExtensionsToContext which you can call to manually enable and add all the extensions. I then added support for instancing. I'll try to whip up an example before I push it

from twgl.js.

greggman avatar greggman commented on May 22, 2024

okay I checked in 3.6.0 that supports instancing

https://github.com/greggman/twgl.js/releases/tag/v3.6.0

And also an instancing sample

http://twgljs.org/examples/instancing.html

from twgl.js.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.