Commit graph

569 commits

Author SHA1 Message Date
Richard Davey
6435772646 Shaders renamed to match new pipeline names 2020-08-21 15:41:12 +01:00
Richard Davey
14ad202adc Use new Utils function 2020-08-21 09:44:52 +01:00
Richard Davey
8edbbb2e2d Renderer.WebGL.Utils.parseFragmentShaderMaxTextures is a new function that will take fragment shader source and search it for %count% and %forloop% declarations, replacing them with the required GLSL for multi-texture support, returning the modified source. 2020-08-21 09:44:43 +01:00
Richard Davey
84ef02743b The WebGL Renderer will now add the pipelines during the boot method, instead of init. 2020-08-20 10:48:30 +01:00
Richard Davey
e3142f313f WebGLPipeline.hasBooted is a new boolean property that tracks if the pipeline has been booted or not, which is now far more important in 3.5 than in previous versions. This is checked in the WebGLRenderer.addPipeline method, and if not set, the pipeline is booted. Fix #5251 #5255 2020-08-20 10:47:21 +01:00
Richard Davey
75da5b2f22 Reset all textures on rebind, which is what Externs need when finishing 2020-08-06 17:06:26 +01:00
Richard Davey
4baa0522b9 Bumping to 3.50 2020-07-31 13:41:29 +01:00
Richard Davey
bf4c475e85 Floor drawFillRect values 2020-07-30 18:10:23 +01:00
Richard Davey
86f35ef9cf Updated docs 2020-07-23 17:35:47 +01:00
Richard Davey
c31a9ad4e5 WebGLRenderer.unbindTextures is a new method that will activate and then null bind all WebGL textures. 2020-07-23 16:24:44 +01:00
Richard Davey
27426dd0b6 Testing RenderTextures (currently broken, will fix next week) 2020-07-17 18:08:39 +01:00
Richard Davey
8210700124 Enable the pipelines again 2020-07-17 17:04:49 +01:00
Richard Davey
491ca62373 The TextureTintStripPipeline now extends TextureTintPipeline and just changes the topolgy, vastly reducing the filesize. 2020-07-17 17:04:40 +01:00
Richard Davey
8d976d6ed5 WebGLRenderer.textureFlush is a new property that keeps track of the total texture flushes per frame. 2020-07-17 16:36:18 +01:00
Richard Davey
8bb49332a9 Always set rotation 2020-07-17 13:55:50 +01:00
Richard Davey
d11a16deaa Added forceZero and setAttribPointers
`WebGLPipeline.forceZero` is a new property that informs Game Objects if the pipeline requires a zero bound texture unit.
* `WebGLPipeline.setAttribPointers` is a new method that will set the vertex attribute pointers for the pipeline.
2020-07-17 13:55:39 +01:00
Richard Davey
fea1ade5b7 Update WebGLRenderer.js 2020-07-16 16:59:45 +01:00
Richard Davey
12fc51e2e2 If normal map set, advance the current active texture 2020-07-16 16:17:16 +01:00
Richard Davey
3dd6d8a1a4 Remove forceZero and added textureUnit 2020-07-16 16:16:57 +01:00
Richard Davey
5e8c28d468 Removed batchTexture as it's no longer needed 2020-07-16 16:16:42 +01:00
Richard Davey
76de5c246a Update ForwardDiffuseLightPipeline.js 2020-07-16 15:51:12 +01:00
Richard Davey
e7957b9380 Added getNormalMap and setGameObject 2020-07-16 15:18:02 +01:00
Richard Davey
f7e6847027 Added setGameObject method and currentUnit property 2020-07-16 15:16:17 +01:00
Richard Davey
5986f8f080 Tidying 2020-07-16 15:16:01 +01:00
Richard Davey
0c411e9e7e Removed currentUnit and batchSprite forceZero 2020-07-16 15:13:47 +01:00
Richard Davey
85f63c4a19 WebGLRenderer.isNewNormalMap is a new method that returns a boolean if the given parameters are not currently used. 2020-07-16 15:11:43 +01:00
Richard Davey
38e7495b61 Fixed default normal map so all Game Objects will now render
* The pipeline now works with Game Objects that do not have a normal map. They will be rendered using the new default normal map, which allows for a flat light effect to pass over them and merge with their diffuse map colors.
2020-07-16 11:04:10 +01:00
Richard Davey
93d0378143 Added missing jsdocs 2020-07-16 11:03:49 +01:00
Richard Davey
84968f502f Update ForwardDiffuseLightPipeline.js
* The pipeline will no longer look-up and set all of the light uniforms unless the `Light` is dirty.
* The pipeline will no longer reset all of the lights unless the quantity of lights has changed.
2020-07-16 03:24:19 +01:00
Richard Davey
3b9d115d0c Reset just units 0 and 1 2020-07-16 03:13:47 +01:00
Richard Davey
d7cf9da819 Added location cache 2020-07-16 03:13:10 +01:00
Richard Davey
5059045c76 Cache attribute location
* `WebGLPipeline.boot` will now check all of the attributes and store the pointer location within the attribute entry.
* `WebGLPipeline.bind` no longer looks-up and enables every attribute, every frame. Instead it uses the cached pointer location stored in the attribute entry, cutting down on redundant WebGL operations.
2020-07-16 03:12:53 +01:00
Richard Davey
4ab9604102 Lots of updates to this pipeline
* The `ForwardDiffuseLightPipeline.defaultNormalMap` property has been removed as it's no longer required.
* The `ForwardDiffuseLightPipeline.boot` method has been removed as it's no longer required.
* The `ForwardDiffuseLightPipeline.onBind` method has been removed as it's no longer required.
* The `ForwardDiffuseLightPipeline.setNormalMap` method has been removed as it's no longer required.
* The `ForwardDiffuseLightPipeline.bind` is a new method that handles setting-up the shader uniforms.
* The `ForwardDiffuseLightPipeline.batchTexture` method has been rewritten to use the Texture Tint Pipeline function instead.
* The `ForwardDiffuseLightPipeline.batchSprite` method has been rewritten to use the Texture Tint Pipeline function instead.
2020-07-16 02:15:53 +01:00
Richard Davey
1f3b79cf11 Normal map additions
* `WebGLRenderer.normalTexture` is a new property that holds the currently bound normal map (texture unit one).
* `WebGLRenderer.setNormalMap` is a new method that sets the current normal map texture.
* `WebGLRenderer.clearNormalMap` is a new method that clears the current normal map texture.
* `WebGLRenderer.resetTextures` is a new method that flushes the pipeline, resets all textures back to the temporary ones and resets the active texture counter.
2020-07-16 02:15:01 +01:00
Richard Davey
c6ffa0620e TextureTintPipeline.batchSprite and batchTexture has new parameters forceZero which forces use of texture unit zero. 2020-07-16 02:13:08 +01:00
Richard Davey
0b3f125ee0 Removed the Deferred Diffuse fragment and vertex shaders from the project, as they're not used. 2020-07-16 00:21:44 +01:00
Richard Davey
94d333ee1e Use new texture unit 2020-07-16 00:00:49 +01:00
Richard Davey
9e9e45261f Added setTextureZero and clearTextureZero
* `WebGLRenderer.setTextureZero` is a new method that activates texture zero and binds the given texture to it. Useful for fbo backed game objects.
* `WebGLRenderer.clearTextureZero` is a new method that clears the texture tha was bound to unit zero.
* `WebGLRenderer.textureZero` is a new property that holds the currently bound unit zero texture.
2020-07-15 18:03:03 +01:00
Richard Davey
216d7cb1fa Updated WebGLRenderer to support new texture assignment
* The property `WebGLRenderer.currentActiveTextureUnit` has been renamed to `currentActiveTexture`.
* `WebGLRenderer.startActiveTexture` is a new read-only property contains the current starting active texture unit.
* `WebGLRenderer.maxTextures` is a new read-only property that contains the maximum number of texture units WebGL can use.
* `WebGLRenderer.textureIndexes` is a new read-only array that contains all of the available WebGL texture units.
* `WebGLRenderer.tempTextures` is a new read-only array that contains temporary WebGL textures.
* The `WebGLRenderer.currentTextures` property has been removed, as it's no longer used.
* `WebGLRenderer.currentTextures` has been removed, as it's no longer used internally.
* `WebGLRenderer.setBlankTexture` no longer has a `force` parameter, as it's set by default.
* `WebGLRenderer.setTextureSource` is a new method, used by pipelines and Game Objects, that will assign a texture unit to the given Texture Source.
* The `WebGLRenderer.setTexture2D` method has been updated to use the new texture unit assignment. It no longer takes the `textureUnit` or `flush` parameters and these have been removed from its method signature.
2020-07-15 17:11:01 +01:00
Richard Davey
9c76ec0389 Large TextureTintPipeline refactor
* The Texture Tint vertex and fragment shaders have been updated to support the `inTexId` float attribute and dynamic generation.
* The Texture Tint Pipeline has a new attribute, `inTexId` which is a `gl.FLOAT`.
* `TextureTintPipeline.bind` is a new method that sets the `uMainSampler` uniform.
* The `TextureTintPipeline.requireTextureBatch` method has been removed, as it's no longer required.
* The `TextureTintPipeline.pushBatch` method has been removed, as it's no longer required.
* The `TextureTintPipeline.maxQuads` property has been removed, as it's no longer required.
* The `TextureTintPipeline.batches` property has been removed, as it's no longer required.
* `TextureTintPipeline.flush` has been rewritten to support multi-textures.
* `TextureTintPipeline.flush` no longer creates a sub-array if the batch is full, but instead uses `bufferData` for speed.
* `TextureTintPipeline.currentUnit` is a new property that holds the most recently assigned texture unit. Treat as read-only.
2020-07-15 17:05:55 +01:00
Richard Davey
3ede28230b Update WebGLPipeline.js 2020-07-15 16:54:18 +01:00
Richard Davey
c0504e4fc1 WebGL.Utils.checkShaderMax is a new function, used internally by the renderer, to determine the maximum number of texture units the GPU + browser supports. 2020-07-15 16:52:26 +01:00
Richard Davey
7c742f95d2 Generate multi-texture shader source 2020-07-14 17:44:26 +01:00
Richard Davey
9a45517efd Pass max textures to pipeline (disable other pipelines for now) 2020-07-14 17:44:17 +01:00
Richard Davey
587c23ec3c Added maxGPUTextures property 2020-07-14 17:43:56 +01:00
Richard Davey
76689942c0 Add texture ID to shaders 2020-07-14 17:43:29 +01:00
Richard Davey
43beca7bab Create CheckShaderMax.js 2020-07-14 17:43:05 +01:00
Richard Davey
0003d278fd Updated to use new external MVP functions 2020-07-14 16:49:30 +01:00
Richard Davey
06c1336f41 Removed all functions from MVP except init and update and made them all external 2020-07-14 16:49:16 +01:00
Richard Davey
a8faef6692 Created new Model View Projection functions 2020-07-14 16:48:01 +01:00
Volodymyr Linyvyi
8d217d53fa Set TextureTintPipeline on each 'postRenderCamera' call 2020-04-19 18:44:03 +03:00
Richard Davey
03ee36f9ba Finished JSDocs 2020-02-04 17:30:27 +00:00
Richard Davey
0eaf0c47b5 Respect Camera.renderToGame property 2020-01-27 23:35:52 +00:00
Richard Davey
18120cb0d5 New Strip pipeline 2020-01-17 17:58:41 +00:00
Richard Davey
0af1303ba2 Added TextureTintStrip pipeline 2020-01-17 17:38:24 +00:00
Richard Davey
ff65e69cd1 Changed copyright date to 2020 2020-01-15 12:07:09 +00:00
Richard Davey
7d53dc3447 Added support for mipmap texture generation and filter levels 2019-11-19 13:00:54 +00:00
Josh Soref
94e96b3fd2 spelling: renderered 2019-10-29 02:33:23 -04:00
Kolja Kutschera
c893ca6186 fix light2d using tileset from dynamictilemaplayer (#4167,#4079) 2019-10-26 00:56:43 +02:00
Richard Davey
585a8a93ee
Merge pull request #4787 from firefalcom/fix/normalMapRotation
Fix incorrect lighting when batching several sprites
2019-10-11 13:21:39 +01:00
Richard Davey
61f5fadddf Split up canvas and video texture creation and updating. 2019-10-10 12:26:39 +01:00
Gauthier Billot
7ffeb4785e Added currentNormalMapRotation and updated setNormalMapRotation 2019-10-06 20:31:29 +02:00
Richard Davey
5de4641e49 Added jsdocs 2019-10-04 11:13:05 +01:00
Richard Davey
49012d6237 Added createTexture2D.forceSize parameter, videoToTexture method and strengthened empty texture creation 2019-10-03 17:49:58 +01:00
Nicolas Ferrero
a76e3c7cb6 update vertexComponentCount in WebGLPipeline 2019-09-10 18:55:30 +03:00
Richard Davey
e3039ffb64 Added antialiasGL option 2019-08-29 11:46:58 +01:00
Richard Davey
f4002471d7 Updated context lost / restored handlers 2019-07-17 16:38:00 +01:00
Richard Davey
630382e88d Added Game Object type look ahead and state for custom batching. 2019-07-16 17:41:08 +01:00
Richard Davey
58865f2c34 The WebGL Lost and Restored Context callbacks were never removed, which could cause them to hold onto stale references. Fix #3610 2019-07-15 15:28:46 +01:00
Richard Davey
15d7b9c6ef Fixed jsdoc typos and added single pixel support 2019-07-14 13:56:44 +01:00
Richard Davey
285babaf8c Added the new snapshotFramebuffer method 2019-07-13 15:20:57 +01:00
Richard Davey
5106b2c935 Animations with custom pivots, like those created in Texture Packer with the pivot option enabled, would be mis-aligned if flipped. They now render in the correct position, regardless of scale or flip on either axis. Fix #4155 2019-07-03 14:01:48 +01:00
Richard Davey
47b1d755a7 Fixed a bug in the WebGL and Canvas Renderers where a Sprite with a flipX or flipY value set would render the offset frames slightly out of place, causing the animation to appear jittery. Also, the sprite would be out of place by its origin. Fix #4636 #3813 2019-07-03 11:11:25 +01:00
Richard Davey
79b2048ae0 Fixed addBlendMode type. Fix #4625 2019-06-28 14:53:12 +01:00
Richard Davey
c0d58ee69e Better flip handling 2019-06-26 00:35:22 +01:00
Richard Davey
3bf3057da0 WebGLRenderer.setScissor will default the drawingBufferHeight if no argument is provided, stopping NaN scissor heights. 2019-06-25 23:03:57 +01:00
Richard Davey
f323097714 Sprites need to flip the UV if the source is a GLTexture 2019-06-23 22:12:14 +01:00
Richard Davey
254eef9787 Use the event constant instead of a string 2019-06-06 15:56:45 +01:00
Richard Davey
12bcda98a6 Added support for a desynchronized context and alpha support in 2D 2019-06-04 19:13:49 +01:00
Richard Davey
c91ed91ce3 License link update 2019-05-10 16:15:04 +01:00
Richard Davey
a6341a97a8 Fixed Types references 2019-05-09 15:32:53 +01:00
Richard Davey
11d6f2e802 Renderer Types 2019-05-09 12:36:36 +01:00
Richard Davey
3d40a95a00 Added glFuncMap 2019-05-01 12:29:45 +01:00
Richard Davey
2f48d68735 A shader can now be used as a bitmap mask 2019-05-01 11:12:31 +01:00
Richard Davey
08f4a0ccf4 Tidying up 2019-05-01 02:10:38 +01:00
Richard Davey
84e898fd90 Fixed nested bitmap mask issue 2019-04-29 14:45:54 +01:00
Richard Davey
80a0bf3f1a Re-apply stencil after a bitmap mask 2019-04-29 14:29:13 +01:00
Richard Davey
3efcd1ca49 New cam mask object 2019-04-29 14:28:58 +01:00
Richard Davey
70b5b01db2 Restore previous framebuffer 2019-04-26 19:13:32 +01:00
Richard Davey
cf878ca553 Better stencil mask checking 2019-04-26 19:13:24 +01:00
Richard Davey
183ce1b96c BMP fix 2019-04-26 02:30:24 +01:00
Richard Davey
6e70f0e19c Shaders now work with camera masks and can have their own geometry masks 2019-04-26 01:53:34 +01:00
Richard Davey
9356744399 argument caps 2019-04-25 12:14:04 +01:00
Richard Davey
2ff76eb4b5 Removed un-needed Quad Pipeline and shaders 2019-04-25 12:13:09 +01:00
Richard Davey
72af4a21d1 Default shader 2019-04-25 03:16:46 +01:00
Richard Davey
9b4309b38c Added QuadShader Pipeline to the renderer 2019-04-25 03:16:39 +01:00
Richard Davey
2727408e7c Don't disable the vertex attribute if the location is invalid 2019-04-25 03:16:25 +01:00
Richard Davey
e0c22c5534 Added QuadShader Pipeline 2019-04-25 03:16:03 +01:00
Richard Davey
f64d0a935b Geometry Masks are now batched. Previously, using the same mask on multiple Game Objects would create brand new stencil operations for every single Game Object, causing performance to tank. Now, the mask is only set if it's different from the previously masked object in the display list, allowing you to mask thousands of Game Objects and retain batching through-out. 2019-04-24 16:45:31 +01:00
Richard Davey
12b6041d20 inverseAlpha support added back in and tidied up renderer 2019-04-24 14:51:39 +01:00