Giter Site home page Giter Site logo

Comments (5)

mvaligursky avatar mvaligursky commented on September 23, 2024 1
  • WebGPU is similar, but batch uploads all dirty textures before rendering in WebGPUGraphicsDevice._uploadDirtyTextures. The main reason here is that mimmap generation is done using render passes, and we cannot do those while inside other rendering (render pass).
  • Another difference on WebGPU implementation is that we create the empty texture right away, and then can upload to it at any time. WebGL does those operations both at a later stage.
  • WebGL upload also has some behaviour where if some mip levels are missing, those are automatically generated. Nothing like this is done on WebGPU (at least at the moment, but I wasn't planning on adding it). On WebGPU, if the user manually uploads mipmaps and some are not specified, the simply contain no data.

from engine.

slimbuck avatar slimbuck commented on September 23, 2024

Hi @liamdon ,

Sorry it's taken so long to get back to you. This part of the engine sorely needs love and it's great to have you onboard!

  1. Nope you've not missed anything. We should only re-upload the levels that have changed. I believe re-uploading everything (when only the top level changed) is a bug.

  2. Texture upload doesn't happen immediately (check the implementation of texture.upload() - it's just setting dirty flags), but rather it happens on demand at render time (when the texture is about to be used). So a user can update multiple levels of a texture before the actual update is invoked. So tracking the dirty levels would require the use of levelsUpdated. (Also by render/upload time the textures should be unlocked anyway meaning _lockedLevel should always be -1).

  3. Actually I would suggest not trying to keep the old behaviour at all. Re-uploading mipmap data that hasn't changed is just wasted effort since the texture won't look any different anyway. I'd suggest keeping the code as simple and straightforward as possible - when mip level isn't specified by caller, it defaults to 0 and that's the only level that gets re-uploaded at render time.

cc @mvaligursky, who might have some things to add especially from restrictions on the WebGPU side.

from engine.

slimbuck avatar slimbuck commented on September 23, 2024

Nice, thanks.

Fortunately most of these differences are hidden inside the respective platform implementations (webgl-texture, webgl-device, webgpu-texture etc).

In terms of this public texture API, do you see any potential issues @mvaligursky?

from engine.

mvaligursky avatar mvaligursky commented on September 23, 2024

Nope, the API suggestions sound great. Even though it probably not hurt to refactor the WebglTexture class a bit to make it more flexible, before implementing the changes - to make the code easier to follow.

from engine.

mvaligursky avatar mvaligursky commented on September 23, 2024

related ticket: #4290

from engine.

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.