Comments (5)
- 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.
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!
-
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.
-
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 oflevelsUpdated
. (Also by render/upload time the textures should be unlocked anyway meaning_lockedLevel
should always be -1). -
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.
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.
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.
related ticket: #4290
from engine.
Related Issues (20)
- Light cookies broke some time between 1.69.2 and 1.70.0 HOT 1
- USDZ export - error when exporting a model with compressed textures HOT 1
- Light breaks on build HOT 3
- Array util function is buggy HOT 3
- [Feature Request] 3D Gaussian Splatting MCMC support HOT 11
- Remove `<audio>` tag sound subsystem
- Remove shFromCubemap function
- Vulnerability / Security issue on playcanvas stable min js file HOT 1
- Remove BasicMaterial and allow better ways to create custom shaders using ShaderMaterial
- Possible issue with dynamic refraction
- Null exception when lightmap baking is used while the clustered shadows are disabled HOT 1
- Gizmo translate/scale plane orientation
- AnimComponentLayer.getAnimationAsset does not return expected Asset type HOT 3
- AnimComponentLayer.getAnimationAsset always returns `{"asset": null}` on template instances created at runtime
- Examples hosting port on Windows changes HOT 1
- Build system no longer generates thumbnails for HIDDEN examples
- Shadow map bug HOT 1
- Asset.ready() event is called incorrectly when loading assets that are inside a container HOT 2
- Quaternion conjugate is missing from docs HOT 3
- Missing attributes after upgrade engine version to 2.0.0-alpha and use registerScript HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from engine.