Correct VertexEffectQueue in the Mesh. There's no need to have a separate Queue in every component.
Only show the OpenGL Error dialog when the underlying hardwarre does not support OpenGL ES 3.0.
Preparation for saving/reading Meshes to/from a file.
Progress making it possible to apply Vertex Effects only to some Components of a Mesh.
Report a Crashlytics non-fatal if we fail to compile some shaders.
1) Cube: convert it to the latest library. Main difference: objects are rendered better, individual cubits have rounded corners.2) Examples: some adjustments to MeshJoin & Predeform3) Library: fix a bug in main_vertex_shader's 'degree' function, which didn't work proprely in case of a vertex which was exactly at the center (i.e. vector PS was zero)
In library: allow a mixture of a deep and shallow copy of a Mesh ( mVertAttribs1 might be copied deeply or shallowly, mVertAttribs2 are always copied deeeply).Port RubikCube to the new library.
Fix VertexEffectRotate.'MeshJoin' app now back it its functionality from 'master'
Some progress with 'MeshJoin' app.
Change 'tag' to a more appropriate name - 'association'.
Introduce 'tags' (soon to be renamed to 'associations') to Mesh and VertexEffect.A 'tag' is a way to associate a Vertex Effect only to a subgroup of a given Mesh's vertices (more precisely, only to an arbitrary subset of its Components)
Fix licenses :)
Have VERTEX_QUATERNION, VERTEX_ROTATE and VERTEX_SHEAR modify inflate vectors.Split Vertex attribute array into two (the one modified by preapply effects and the one not)
Change abortAll to removeAll in effectQueues (for consistency)Remove all pre-effects from the component queues when they are not used anymore.
Speedup for preapply
1 more fix for MeshBase.apply(VertexEffect). This still does not (fully) work though.
3 fixes for MeshBase.apply(VertexEffect).This still does not work though.
Progress with the Predeform app; deepCopy for the Meshes; various fixes.
Progress (?) with Predeform: give up trying to render the Mesh in Activity1.
First attempt at the MeshBase.apply(VertexEffect) API.
Remove the MeshBase.{set/get}Stretch API altogether.
Fix for a crash when exiting an app:
Activity.onPause() -> MessageSender.stopSending sets mThis to null, then a last message gets sent and a crash in newMessage().
Fix this by
1) making the Message inner class static (so that we can create a new one without a reference to mThis)...
Change the Postprocessing effects: separate the radius and the halo.Reason: we needed a way to specify the size of the halo around a postprocessed object; before it was automatically (and not very correctly) computed from the radius - before we knew the size of the object's bounding box, so this automatic computation was possible. Now we're removing the MashBase.getBounding(0 API, so the size of the halo has to be explicitly given by the user. This way is more correct anyway and gives the user more control (as the Multiblur app proves!)...
Simplify a bit the place where we got a crash once.
A lot of changes.
1) main vertex shader: remove support for degree_object. This functionality will hopefully come back when we introduce other than circular regions.2) MeshBase: remove the need to set a Bounding box (this is the point of the whole thing - we wanted to get rid of this so that the advances in MeshJoined will be easier)...
new VertexEffectShear
new VertexEffectScale
bugfix for VertexEffectRotate
new VertexEffectRotate
Add the first two VERTEX 'pseudo-matrix' effects: VERTEX_MOVE & VERTEX_QUATERNION i.e. implementations of those two MATRIX effects in VERTEX queue.
The point(s):
1) preparation for the upcoming MeshBase.preApply(VertexEffect effect) API that's going to supersede the current much more limited MeshBase.apply(MatrixEffect effect)...
Do not crash if we failed to compile some programs.
Do not allow more than 15 characters in the NAME.
Move to AndroidX, target API level 29.
Lower requirements - now only OpenGL ES 3.0 is required; if running on such platform, OIT part of the API ( which is the only one which actually requires 3.1) is switched off.
Progress implementing RubikCube.retObjectString()
Bugfixes in MeshBase:
1) improper buffer was being invalidated after apply and setTextureMap (TFO rather than VBO!)2) setTextureMap would only work if all components were being set
More support for the 3x3x3 Solver: more of the actual 3x3x3 solver mechanism.
Speedup: only allocate one postprocessing buffer set of the quality we need, not all in one go.
1. library: new API DistortedNode.setProjection()2. cube: adjustments for Pyraminx.
Fix the memory test - we need to run one thing on the Graphics thread!
Fixes for the Projection matrix, FOV.
There was a confusion between the Projection of the Node onto the Screen, and the Projection of the Cubits on the Node.
Progress with of Pyraminx.Bugfix for joining a single Mesh!
Improve setTextureMap.
Make MeshBase.setTextureMap() work.
Minor.Looks like MeshBase.join() actually works.
Fix MeshBase.join()Only upload Mesh Buffers to GPU when we actually use them.
New MeshJoined.Test app says it's not working - bug in MeshBase.join().
Further corrections.
Port Listener to the new setStretch-less API.
Convert Projection to not use the depreciated MeshBase.setStretch() API.
Correct the Rubik app for the recent changes to the library's Node.
Size of the FBO internal to Nodes is now NO MORE taken from the Mesh's stretch values.Instead, the size is copied from child's FBO size (if there is one) or if the child is a leaf with texture in it (which is sizeless) then we get the default 100x100 ( which means we probably have to explicitly call Node.resizeFBO() )
Minor.
Remove width & height from InternalSurface and move it to InternalOutputSurface.
Hide the InternalSurface class inside its package.
Convert RubikCube to the new V&F center schema!
Moving the Vertex and Fragment centers of effect to the center of the Mesh.
Fixes for the merge.
Merge branch 'empty-matrix-effects-in-the-center' into modern-empty-matrix-effects-in-the-center
Fix for MeshBase.apply()
New API: MeshBase.join() and a skeleton of an App to test it.
New Mesh 'Triangles' and updated Inflate & Generic apps to test it.
Move the Effects.setStretch to Meshbase.setStretch
Move the 'pre-multiply mesh before applying any effects' thing from [(Xsize of texture, Ysize of texture) x Mesh's zFactor] to Effects.setStretch(sx,sy,sz)
New API MeshBase.apply(MatrixEffect[])
Rename MeshFlat MeshRectangles.
Making the Dialogs more consistent.
Adjustment to Static's API.
remove an unused, redundant API.
RubikCube: make finishingRotation more flexible (can now finish any rotation which did finish interpolating (nearly) to the end - and not only the single-static 'manual' rotation)
Dynamics App: fix moving Quat PointsLibrary: remove negating the Quat Points in the DynamicQuat in order to always go the shortest route.
library: Fix DynamicQuatcube app: progress with ScrambleEffects
fix a bug: in certain places when we use reflection, it needs to be getDeclaredMethod and not getMethod because the methods are not public!
Yes! new commit, a fix to a comment :)
Modify the 'convexity' param in Dynamics.
This finally satisfies the requirements of the 'Spin' effect in MagicCube: achieving constant speed ( by setting a 1D Dynamic's convexity to 0)
Add the 'convexity' param to Dynamics and the Dynamic app.
Improvements to comments and function names in Dynamics
Improve the Dynamic app.
Minor improvements in the Dynamics.
1. Change the API of Dynamic: split makeNowRunFor into two separate 'setDuration' and 'resetToBeginning'2. Major changes to the 'Dynamic' app so that we can check more about the Dynamics.
Invert the order of Matrix Effects. Now, just as in the other queues, the first matrix effect is actually the first to act on the object - not the other way around!
Simplify the way applications can get notifications when an effect finishes.
Now, instead of the 'DistortedEffects.(de)registerForNotifications()' 2 APIs, we call a single 'Effect.notifyWhenFinished()'.
Progress with DistortedCube.
Correct the EffectMessageSender.
Correct the Legal notice.
Rename all the classes that are not exported to application to 'Internal'
Finally move the EffectQueues to their own package.
Cut another interdependency between the Queues and the rest: it is no longer necessary to add DNodes to PostprocessQueue to rearrange the Nodes by buckets. The rearranging is now done on next render instead.
Move all Program-related stuff to Distorted. Now the DistortedEffects class is very simple.
Make DistortedEffects oblivious of the effect types.
Cut one interdependency between the EffectQueuePreprocess and DistortedNode
Cut one interdependency between the EffectQueuePreprocess and DistortedEffects
Carve the 'children list' from DOutputSurface and DNode into a separate class of its own, DistortedChildrenList.
Split the DistortedNode class into two - DistortedNode and DistortedNodeData
Some simplifications to the Node.
Fixes for memory leak problems uncovered by the 'Rubik' app. (mainly: new method DistortedNode.markForDeletion)
We don't have to mark Textures for creation until we fill them up with data.