Calibration of the previous workaround.
Workaround for the fact that one some devices (for example the LG K30's V@415 driver on the Adreno 308) the Glow halo wasn't visible.
Properly solve the issue with Qualcomm driver V@331 having buggy UBO size.
Another attempt at fixing tthings on early Qualcomm OpenGL ES 3.0 drivers.
The previous version does not work on Adreno 405 driver V@100, present for example in a Asus ZenPad 8.Revert the packed 'ivec2' UBO in the vertex shader back to a 'std140' ivec4. This comes at a price if bumping into the bug on Qualcomm driver version 331 on Adreno 308 - i.e. Samsung Galaxy J4+ again....
Make the 'Component Associations' UBO (on most devices) twice smaller -use the 'packed' layout and 'ivec2' in place of 'ivec4'.
This forces us to dynamically probe the 'Stride' - number of 4-byte entities that the UBO's 'ivec4' takes - and correct the already-constructed UniformBlockAssociation objects in case this turns out to be different than the expected 2, i.e. tightly-packed....
Make per-component centers optional, controlled by API MeshBase.setUseCenters()
Remove UBO from the fragment shader and come back to the default of only 5 concurrent fragment effects. All because UBOs in fragment shader crash on Adreno 510 and Adreno 506.
Introduce another Uniform Block Object. Now we can have much more vertex and fragment effects - up their default number to 100.
Convert the Integer part (i.e. effect names and the two associations) of vertex and fragment shaders to Uniform Buffer Objects.Next: convert the last part, i.e. the float effect parameters.
Remove the 'binding' parameter from the UBO in the vertex shader - this is not part of OpenGL ES 3.0, only introduced in 3.1, and we want to be compatible with 3.0.Now we need to dynamically detect the UBO index and form a BlockBinding ourselves.
Update all the dmeshes to versions 2. Add the Dino dmesh.
Remove the 'inflate' vertex attributs from the Mesh and file format, and replace that with a per-component 'inflate centers' (which are as of yet untested)
Turn the vName, vEffAnd and vEffEqu integer array uniforms into a one ivec4.The point: ivec4s are always packed tightly in UBOs (which is going to be the next step)
Simplify AssociationUniformBlock
Bugfix.
Introducing UBO to Effect Queues: step 1.
Introduce an UBO to the vertex shader holding info about mesh effect associations.
Fix normals in case of MatrixEffectScale / Shear.Fix displaying the normal vector.
Update Myanmar flag.
Progress making it possible to apply Vertex Effects only to some Components of a Mesh.
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)
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)
Speedup for preapply
First attempt at the MeshBase.apply(VertexEffect) API.
Remove the MeshBase.{set/get}Stretch API altogether.
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)...
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)...
Minor.Looks like MeshBase.join() actually works.
Further corrections.
Rename all the classes that are not exported to application to 'Internal'
Correct Distort.
Make Distort truly 3D.
Make the Fragment effects truly 3D: change their 4D 'region' into a 3D 'center' (a point in 3D) and 3D 'region' (which is now a set of 3 radii defining an ellipsoid around the center)
Also corresponding changes to the applications.
Redefine the Vertex Region from (x,y,r,unused) to (x,y,z,r). This takes into account the 'Z', which makes it possible to warp only one side of a 3D Mesh like Sphere.
Also corresponding changes in applications.
Improve computation of the thickness of the postprocessing halo - should be independent of the size of underlying object now.Still it is not completely ok, it appears to depend on the ModelView matrix (use the Effects3D app to rotate the object around Z-axis to see this)
Make the Effects3D app a bit more user-friendly.
Progress with Inflate (building block of postprocessing effects: the proper way of marking a halo around a Mesh)'Inflate' app testing the machanism. MeshFlat appears to be working, now we only need to fill up the per-vertex Inflate vector in the MeshCubes.
Added a new attribute to vertices of a MeshBase object: the vec3 'inflate' vector.This vector describes the direction where the vertex needs to be moved when we 'inflate' the whole mesh.If the mesh is locally smooth, this is simply the normal vector; otherwise (for example in the corners of the MeshCubes) - not....
Fix the preprocess shader. This makes the 'Postprocess Tree' app look good again.
Progress with thr Glow effect - moving glow app looks ok now.
Progress with a more generic 'preprocess' stage of Postprocessing Effects.
Hide the FBO_QUEUE thing inside the library. The queue is running internally now, without public setAsOutputFBO() thing (simplifies writing postprocess effects)
Simplify Main OIT shader.
Fix the fact that back-facing surfaces were invisible.
Largely fix the non-postprocessed OIT. Still, one problem remains: back-facing surfaces seem to disappear (visible in 'Cubes')
Progress with non-postprocessed OIT.
Status: compiles, but fails to work on both Adreno and Mali. Crashes the app (Adreno) or the whole system (Mali)
Update the 'main' shaders for OIT.
Start merging master and OIT.
OIT: fixes for Mali: fix a broken loop in the oitRender fragment shader that resulted in flashing.
OIT: fix for 'out of memory' crash on Mali GPUs.
~The thing still does not fully work there - there are still strange flashes in apps that innvolve OIT, for example in 'Triblur'.
OIT: fixes. Everything looks correct now except for the curious return of the 'dancing lower-left corner' small glitch in the 'Transparency' app.
OIT: correction for blending in Pass4
OIT: move towards 4 passes ( clear - build - collapse - render )
OIT: correct depth
OIT: more bugfixes
OIT: lots of progress on all fronts. Still a few bugs to solve though!
Properly recreate the Atomic and LinkedList buffers onPause.We have to discard all alpha==0.0 pixels during OIT Pass1.
small correction for blending OIT colors.
OIT: something starts working ('Blur' and 'Multiblur' work, 'Triblur' and 'Transparency' do not)
Fix the 'OIT' artefacts.
still debugging the OIT
- remove counting of transparent pixels from main fragment shader- remove debugs and tidy up- some fixes for the Mali GPU
Order Independent Transparency: debugging
Order Independent Transparency: some progress
Order Independent Transparency. Does not work yet.
Postprocessing buffers mBuffer[] are now shared among all postprocessing operations. This saves a lot of memory, but also means that when doing each particular postprocessing, the textures backing up the mBuffer might be too large. We need to fix two things here: when outputting to those too large textures, we need to adjust the Viewport, and when binding those too large textures as input - we need to adjust the TexCoords to compensate....
SSBO: now we have a more-or-less correct running average of the count of transparent fragments over the last few frames.
SSBO: correct various things.
SSBO: handle the fact that we might run out of space in our SSBO if we keep creating new Surfaces.
SSBO: counting of transparent fragments more or less works now. Still the counters are zeroed out in the wrong place - every time we start rendering something to a given Surface, rather than once per frame.
SSBO: more and more works...
SSBO: something is working already, although we still get the 4 bytes back from the shader in reverse order ( so '17'=0x00000011 written by the shader becomes '285212672 = 0x11000000' )
First try at the SSBO (doesn't work - reads in the application don't pick up changes in the shader; crashes.
Simplification in PostprocessEffects
Move all the knowledge about Vertex and Fragment effects to their respective classes.
Progress with support for Effect classes.
Beginnings of the GLOW unit test.
Move on to Stencil on both stages of the BLUR + separate 'blit with depth'.
This works wonders on Nexus 5X ( r=50 quality=HIGHIEST 1,4,8 cubes: 59.3,43.6,41.0 FPS! ) but it somehow fails to clear the DEPTH and STENCIL buffers on Nexus 4....
Move to a new way to detecting depth of postprocessing halos.This switches off stenciling (hopefully temporarily!)
Use Transform Feedback to (optionally) display the Normal vectors.
Dynamic display of bounding rectangles (with coords computed by Vertex Shader and gotten with Transform Feedback) works now.
Major problem: the glMapBufferRange() slows doewn rendering in a major way. Multiblur's FPS:
Nexus5X : 35.4 before -> 12.6 after...
Make the Feedback APP work again.
Revert "Progress with TransferFeedback app - introduce two modes: USEPOINTS 'true' or 'false'."
This reverts commit 21304c55380460c5882b789ea13eb00ffd9a686c.
Revert "This commit (and reading the OpenGL ES 3.0 spec) pretty conclusively proves that, sadly, Nexus 4's Transform Feedback implementation is incomplete (doesn't work with GL_TRIANGLES primitiveMode)"
This reverts commit 5ba19814852de1762e452662a13c4944792014a9.
Revert "Some progress with Transform Feedback. Still many bugs all over."
This reverts commit 79921db22e4ff5a3b2e6e3466a39445f5607a695.
Some progress with Transform Feedback. Still many bugs all over.
This commit (and reading the OpenGL ES 3.0 spec) pretty conclusively proves that, sadly, Nexus 4's Transform Feedback implementation is incomplete (doesn't work with GL_TRIANGLES primitiveMode)
Progress with TransferFeedback app - introduce two modes: USEPOINTS 'true' or 'false'.
On Nexus5X, it works with 'true' and 'false'. On Nexus 4, it works with 'true', but returns GL_INVALID_OPERATION with 'false'.
Progress with moving the Transform Feedback functionality from the APP to the library.
Simplifications.
1) bugfix computing Gaussian BLUR kernel (for odd radii, the last offset was incorrectly computed)2) introduce more advanced method of detecting BLUR halo (compute depths in a new way)
Roll back the recent MIPMAP work.
Preliminary support for MIPMAP levels of the postprocessing buffers. (doesn't work yet)
Merging blurred surfaces mostly ok now (blurred image still appears a bit shifted down for some reason)
Simplify shaders.