Hi, team guys. Working with foreign code I have a lot of painful. Not only because of the lack of documentation, for me it was never a problem if your code was written intelligently. Fuse is great framework in the ideological sense and I believe you put your heart and soul into this project, but unfortunately the implementations in some cases lame.
-
You have a lot of redundant and not understandable parts especially in Graphics. To cite one example.
You have got a lot of structures for matrix operations such as:
float4x4
,Matrix
andFastMatrix
…FastMatrix
? Is it affine matrix (4x3) or what? I have a lot of experience in computer graphics and image processing but never heard about “fast matrices”, I know affine matrix but it hasn’t sense because it have very little overhead on cpu and gpu and nothing overhead on vector processors at the same time has a terrible implementation and overhead conversionmat4 <-> mat4x3
, by the way GL ES 2.0/WebGL 2.0 don’t support it at all, onlymat2
,mat3
andmat4
. So, some methods in your graphic elements can returnfloat4x4
some of themFastMatrix
. It’s just a dump of some sort!
float4x4
has “operator +”, “operator -”, mul and div by scalar, but operators rotation akaMatrix * Vector
and concatenationMatrix * Matrix
are missing. Why? It looks like just as container. So we need use static methods from Vector.Transform and Matrix.Mul. It’s looks terrible and understandable! Look at Matrix in Unity for example. The same problem with vectors. -
For user drawing stuff especially for drawing elements with texture I need actual width and height corrected for any type of StretchMode. You haven’t any public methods or classes for that. Besides, I needed cropped UV-coordinates for that. You have internally private
float2 _origin, _scale, _drawOrigin, _drawSize, _uvClip
for that, but user don’t access to them, so I need reimplement of this. In forum I found SizingContainer class in bolav’s thread, but it contains bugs in some cases it works incorrectly! -
You havn’t got in Uno very basic build-in type/class in many languages, I mean RegExp. Why you create you own Runtime instead using Runtime from Mono? Your language Uno is superset of C#/Mono right?
- You draw strokes inset instead of perimeter centre for geometry. This produce artifacts in rotated or skewed geometry, so trick to masking aliased edges by draw antialised stroke over it not working in default case! I resolve this by tuning
Stroke.Offset
but if I decide animate stroke’s width I should animate offset as well!
-
If I transform
Image
I expect that it will be applied to the texture coordinates and not to the geometry as a whole. In other words, I can’t compensate for distortion of the image after parent’s transformation at all. I’m working on reimplement this behaviour in custom element but it’s really hard. -
Import from Sketch not working since 0.23.
-
Textures look creepy without mip-maps
-
When I use
Element.CaptureRegion
for rendering toframebuffer
It seems you use multisampling by default on. It’s not good idea. I would like control this, because multisampling is very expensive. And another issue with framebuffer is premultiply alpha, because elements drawing by self in screen and rendering to framebuffer look quite different and have darker edges.
This is not all of problems, unfortunately I don’t have time to describe everything. Maybe I’ll do it later. Fuse is a great product, but in my opinion it now needs stabilization and doc’s improvements instead of growing functionality. Since you have a small team and if you want to attract community to help to make your product better, it may be a good idea to open part of the code dealing with the basic abstractions in Fuse namespace.
Thank you for reading this text till the end)