Commit graph

1226 commits

Author SHA1 Message Date
Ben Richards
2e8a8f8081 Add default normal map texture __NORMAL.
Remove `LightPipeline.defaultNormalMap`, as this universal texture is
now available to use.
2024-02-09 15:51:53 +13:00
Ben Richards
23a672bc48 Improve resize handling.
Although the `resize` function does make GL calls,
they will have no effect during context loss.
2024-02-09 12:28:20 +13:00
Ben Richards
6d56791568 Fix incorrect type on WebGLAttribLocationWrapper.wegGLAttribLocation.
A uniform uses a `WebGLUniformLocation`, but an attrib uses a `GLint`.
2024-02-09 11:06:47 +13:00
Ben Richards
4353a1e175 Improve safety around context loss.
Clarify notes on drawing dynamic textures during context loss.
Allow `Shader` to initialize and operate during context loss.
Improve resize handling on context loss and recovery.
2024-02-08 18:53:10 +13:00
Ben Richards
7ed40fdf7d Allow WebGL wrapper operations during context loss. 2024-02-05 16:40:16 +13:00
Ben Richards
a4e96855fc Correct documentation of LightPipeline.currentNormalMap. 2024-02-05 14:30:24 +13:00
David Négrier
e5454a1203 Fixing the Postfix pipeline without introducing a skip frame
Due to #6681, we introduced a skip frame to wait for the PostFX pipeline to be correctly booted.
While this fixed the display issue, it introduced a "skip" frame.
The pipeline would only be visible one frame after being introduced.

The root issue is a binding issue on currentRenderTarget.

Here, we fix the root issue and remove the skip frame.
2024-02-02 16:05:08 +01:00
Richard Davey
604c34c13b Stop tsgen from crashing! 2024-02-02 13:56:24 +00:00
Richard Davey
e00d12195d Fixed incorrect jsdocs 2024-02-02 13:03:38 +00:00
Richard Davey
7bac75a2f4 Fixed some jsdoc name references and minor lint errors 2024-02-02 13:01:03 +00:00
Ben Richards
49e9d45435 Emit LOSE_WEBGL event.
Also rearrange RESTORE_WEBGL event code.
2024-02-02 21:57:28 +13:00
Ben Richards
d57b46e690 Tidy up wrappers on WebGLRenderer destroy. 2024-02-02 20:55:09 +13:00
Ben Richards
4fd8fc94c3 Fix WebGLShader recovery from WebGL context loss. 2024-02-02 20:50:39 +13:00
Ben Richards
ade7b57e3d Restore WebGL extensions. 2024-02-02 16:29:24 +13:00
Ben Richards
b66028ec8e Handle more invalidated state on WebGL context restore. 2024-02-02 15:53:03 +13:00
Ben Richards
4c849cb2f7 Tidy up WebGL Wrappers.
Dispose of all references on destroy.
Properly name WebGLProgramWrapper#initialize.
Remove renderer dependence in WebGLFramebufferWrapper.
2024-02-02 15:30:38 +13:00
Ben Richards
24d739ed72 Emit RESTORE_WEBGL event. 2024-02-02 11:33:27 +13:00
Ben Richards
a0f066c543 Restore WebGL context.
All textures and shaders should automatically recover from WebGL
context loss.
Dynamic textures will lose their contents, unfortunately, as the texture
was stored on the GPU.
Frame buffers still have some bugs to work out.
2024-02-01 16:59:00 +13:00
Ben Richards
587b6e7bcd Merge branch 'master' into webgl-wrappers 2024-02-01 11:00:08 +13:00
Richard Davey
51074c4567 The PostFXPipeline.postBatch method will now skip onDraw is the pipeline hasn't booted, introducing an artificial frame skip. This should potentially fix glitch errors on mobile devices where Post FX would appear corrupted for a single frame. Fix #6681 2024-01-31 20:23:43 +00:00
Richard Davey
c6c7fd60a6 The BloomFX and BlurFX and any custom pipeline that relies on using the UtilityPipeline full or half frame targets will now correctly draw even after the renderer size changes. Fix #6677 2024-01-31 19:35:10 +00:00
Richard Davey
92065facf0 You can now specify an autoResize boolean in the RenderTargetConfig which is passed to the Render Targets when they are created by a pipeline. 2024-01-31 19:15:21 +00:00
Ben Richards
8906e22aeb Add PipelineManager#restoreContext method for restoring uniforms.
Also add `WebGLShader#syncUniforms` and other code necessary to retain
and reapply uniform state on the GPU.
2024-01-31 16:46:41 +13:00
Ben Richards
b9deef7e61 Destroy location wrappers when they're unused. 2024-01-31 11:53:50 +13:00
Ben Richards
e920b1a961 Create and use wrappers for WebGLUniformLocation and WebGLAttribLocation. 2024-01-30 22:13:51 +13:00
Ben Richards
0f9fb3177d Fix incorrect WebGL calls. 2024-01-30 11:23:27 +13:00
Ben Richards
2382f7c1eb Create and use WebGLProgramWrapper.
This handles shader programs.
Also tweak the documentation in WebGLBufferWrapper and
WebGLFramebufferWrapper to better reflect purpose.
2024-01-29 17:35:57 +13:00
Ben Richards
377221de35 Create and use WebGLBufferWrapper.
This mostly handles VertexBuffers, but there's an IndexBuffer which
is not internally used that uses the same wrapper.
2024-01-29 16:40:18 +13:00
Ben Richards
842d666ebf Use and document WebGLFramebufferWrapper.
Also tweak WebGLTextureWrapper to have more standard destroyers
in itself and WebGLRenderer.
2024-01-29 14:53:23 +13:00
Ben Richards
68671f0d8a Create WebGLFramebufferWrapper to encapsulate state. 2024-01-29 14:48:28 +13:00
Ben Richards
b591c3674a Document usage of WebGLTextureWrapper in place of WebGLTexture. 2024-01-29 11:47:39 +13:00
Ben Richards
216b7564f6 Update systems to use WebGLTextureWrapper and Uint8Array textures.
This is mostly hooking up gl calls to look inside the wrapper.
A few other things have changed.
Spector metadata is set the new way.
`Frame` changed `glTexture` to a getter, simplifying bookkeeping.
`LightPipeline` and `Plane` use standard methods to create textures.
`WebGLRenderer` maintains a list of wrappers, and automatically
manages it through `createTexture2D` and `deleteTexture`. The update
methods `updateCanvasTexture` and `updateVideoTexture` have been
delegated to the wrapper.
2024-01-29 11:45:12 +13:00
Ben Richards
a8dff1f990 Add Uint8Array texture creation methods. 2024-01-29 11:30:54 +13:00
Ben Richards
3b2aeaf18b Create WebGLTextureWrapper to encapsulate texture state. 2024-01-29 11:08:16 +13:00
Richard Davey
0b32610e56 Updated version to 3.70 2023-11-10 15:04:01 +00:00
Richard Davey
bd67ed38a5 Disable roundPixels when drawing lines 2023-11-09 22:30:53 +00:00
Richard Davey
2c8b70e4f7 Respect the disable fx flags and only create the pipelines and render targets as needed 2023-11-08 12:35:19 +00:00
Richard Davey
ec5a695a5c PostFXPipeline.bootFX is a new method, which is the previous boot method but renamed. This is no longer called from the constructor, but instead when the Post FX Pipeline is activated by the Pipeline Manager. This means that the resources the Post FX requires, such as creating Render Targets and shaders, is delayed until the FX is actually used, saving on memory. 2023-11-07 23:42:04 +00:00
Richard Davey
d3050a05fc The MultiPipeline.batchTexture method has a new optional boolean parameter skipPrePost that will force the call to ignore calling the preBatch and postBatch Pipeline Manager methods for the Game Object. This allows you to skip the overhead of calling them if you know you don't need them. 2023-11-07 22:53:14 +00:00
Richard Davey
52619b26f9 Set missing uniforms to get FX working again :) 2023-11-07 22:51:38 +00:00
Richard Davey
94c810fd39 Remove false param to setQuad 2023-11-07 18:53:51 +00:00
Richard Davey
0431796d94 false is the default now 2023-11-07 18:52:46 +00:00
Richard Davey
f96b557f4c The MultiPipeline.batchSprite method (which is also used by the Single Pipeline and Mobile Pipeline) will no longer use roundPixels when calculating the quad vertex data. It also won't apply it to any of the sprite values. This is all now handled in the shader directly. 2023-11-07 18:37:34 +00:00
Richard Davey
a26f827650 Optimized setTextureFilter 2023-11-07 18:28:27 +00:00
Richard Davey
b0c2dcf463 Remove the gx/gy rounding (un-needed) and pass the roundPixels value to setQuad 2023-11-07 15:26:58 +00:00
Richard Davey
1b12993898 Updated jsdocs 2023-11-07 15:26:07 +00:00
Richard Davey
e36d43533c Updated shaders to use 'round' glsl instead of 'floor' 2023-11-07 15:23:57 +00:00
Richard Davey
5aa409e8f3 RenderTarget.willResize is a new method that will return true if the Render Target will be resized as a result of the new given width and height values. 2023-11-03 19:02:20 +00:00
Richard Davey
b28ad7f3d3 The BitmapMask wouldn't correctly set the gl viewport when binding, which caused the mask to distort in games where the canvas resizes from its default. Fix #6527 2023-10-13 17:53:55 +01:00
Richard Davey
bae26a5205 When a framebuffer is deleted, it now sets its renderTexture property to undefined to ensure the reference is cleared. 2023-10-13 17:15:21 +01:00
Richard Davey
d74e767050 Delete color attachment 2023-10-12 18:49:06 +01:00
Richard Davey
1935119141 Array Remove and unbind before deleting the framebuffer 2023-10-12 15:22:26 +01:00
Richard Davey
758db68d1a Remove event handler first 2023-10-12 15:22:26 +01:00
Richard Davey
0e145756bb Added new uniforms and handle rounding in the shader 2023-10-10 18:50:17 +01:00
Richard Davey
4bb2807627 Added uRoundPixels and uResolution to the core shaders 2023-10-10 18:49:49 +01:00
Richard Davey
cd1854630e Testing round pixels on shader 2023-10-05 14:39:21 +01:00
Richard Davey
fe05501e38 The PostFXPipeline will now set autoResize to true on all of its RenderTarget instances. This fixes an issue where the PostFXPipeline would not resize the render targets when the game size changed, causing them to become out of sync with the game canvas. Fix #6503 #6527 2023-09-07 14:43:36 +01:00
Richard Davey
066bb9be18 Updated jsdocs 2023-09-07 14:07:44 +01:00
Richard Davey
e8e57b6b0c The WebGLRenderer.deleteFramebuffer method has been updated so it now tests for the exitennce of a COLOR and DEPTH_STENCIL attachments, and if found, removes the bindings and deletes the stencil buffer. The code that previously deelted the RENDERERBUFFER_BINDING has also been removed to avoid side-effects. 2023-09-05 13:40:45 +01:00
Richard Davey
8e1809688c The WebGLRenderer will now validate that the mipmapFilter property in the Game Config is a valid mipmap before assigning it. 2023-08-01 13:44:58 +01:00
Richard Davey
002786e411 fx namespace fix 2023-07-21 18:41:30 +01:00
Richard Davey
3f9ce29962 The FXBlurLow fragment shader didn't have the offset uniform. This is now passed in and applued to the resulting blur, preventing it from creating 45 degree artifacts (thanks Wayfinder) 2023-07-21 15:41:42 +01:00
Richard Davey
86f71e876e The BlurFXPipeline didn't bind the quality of shader specified in the controller, meaning it always used the Low Blur shader, regardless of what the FX controller asked for. 2023-07-21 15:40:44 +01:00
Richard Davey
92fcfe02dc Fixed typedef 2023-07-21 14:24:25 +01:00
Richard Davey
fb3c85888b Typo fix 2023-06-11 22:37:06 +01:00
Richard Davey
96ee7679c4 Added Spector method docs 2023-04-12 03:45:19 +01:00
Richard Davey
b676f2613f Update PreFXPipeline.js 2023-04-12 02:43:42 +01:00
Richard Davey
ac060e8355 Set maxDim within the loop 2023-03-31 15:49:23 +01:00
Richard Davey
6d49b94305 Reverted pixel rounding. Should address offset pixelArt issues on HighDPI displays. #6327 2023-03-31 15:12:34 +01:00
Richard Davey
e1e46f4b19 Merge branch 'master' of https://github.com/photonstorm/phaser 2023-03-27 23:16:37 +01:00
Richard Davey
15535914b8 Only destroy controller if set 2023-03-27 23:16:34 +01:00
Richard Davey
3e075bf018 Added forceClamp parameter 2023-03-27 17:48:27 +01:00
Richard Davey
cd58dd5f3a Fix doc types 2023-03-24 15:41:01 +00:00
Richard Davey
376107b25f Finally finished all FX documentation 2023-03-21 18:04:34 +00:00
Richard Davey
ed6287e9a9 More FX documentation finished 2023-03-21 17:57:27 +00:00
Richard Davey
b89a10c99d Lots more documentation finished 2023-03-21 17:21:45 +00:00
Richard Davey
f83cf124aa Added destroy method 2023-03-20 18:28:58 +00:00
Richard Davey
42610c4fa6 Finished documentation and added destroy method 2023-03-20 18:28:42 +00:00
Richard Davey
1750caca18 Update PreFXPipeline.js 2023-03-20 15:20:22 +00:00
Richard Davey
4fbd7eec82 Rename zero method and remove logs 2023-03-16 21:56:55 +00:00
Richard Davey
27553a029b Call clearStencilMask 2023-03-16 21:56:46 +00:00
Richard Davey
b093ece620 Debugging stencil stack 2023-03-16 18:49:43 +00:00
Richard Davey
d316bacedb Update PreFXPipeline.js 2023-03-16 18:23:35 +00:00
Richard Davey
4c19106c63 Debugging fx stacks 2023-03-16 18:23:30 +00:00
Richard Davey
b3b12ae62c Testing pre/post mix 2023-03-14 22:03:38 +00:00
Richard Davey
8b2a701dbd Tidying up and restore stencil 2023-03-14 19:46:55 +00:00
Richard Davey
560dc8a783 Restore the stencil before draw 2023-03-14 19:46:41 +00:00
Richard Davey
38438954b8 Removed logs 2023-03-14 19:45:52 +00:00
Richard Davey
5b12080cef Added methods zeroStencilMask and restoreStencilMask 2023-03-14 19:45:44 +00:00
Richard Davey
d28863c986 Removed the logs and now zero the stencil upon bind 2023-03-14 19:42:09 +00:00
Richard Davey
f3028118d3 Debugging 2023-03-03 18:54:02 +00:00
Richard Davey
684a2ab35a setFramebuffer accepts texture and clear param 2023-03-03 18:53:36 +00:00
Richard Davey
b32286d198 Update PostFXPipeline.js 2023-03-03 18:53:36 +00:00
Richard Davey
4ce142c25b Working through fbo debugging 2023-03-03 13:41:57 +00:00
Richard Davey
fab1acd022 Debug logs 2023-03-02 18:46:23 +00:00
Richard Davey
4877efbe36 Added hasDepthBuffer property 2023-03-02 18:46:16 +00:00
Richard Davey
d1f2fb8dfc Reset current fbo instead of null 2023-03-02 18:46:04 +00:00
Richard Davey
8b493834dc Log can take any parameters 2023-03-02 18:45:42 +00:00
Richard Davey
4ae57fa593 Update jsdocs 2023-03-02 18:17:08 +00:00
Richard Davey
eaf6fa7f45 Added log method, depth buffer and missing parameter default 2023-03-02 18:16:59 +00:00