Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Jan 15 22:15

    kobalicek on master

    [ABI] BLGlyphBuffer has now two… (compare)

  • Jan 15 20:50

    kobalicek on wip

    [ABI] BLGlyphBuffer has now two… (compare)

  • Jan 12 12:22

    kobalicek on master

    Fixed to adapt to blend2d chang… (compare)

  • Jan 12 10:40

    kobalicek on master

    Improved modulate operator, cop… (compare)

  • Jan 12 00:27
    kobalicek commented #57
  • Jan 12 00:27
    kobalicek commented #57
  • Jan 11 17:20

    kobalicek on master

    Added modulate operator and fix… (compare)

  • Jan 11 17:19

    kobalicek on master

    Improved natvis support - now e… (compare)

  • Jan 10 05:47
    yurivict opened #57
  • Jan 09 09:10
    kobalicek closed #31
  • Jan 09 09:10
    kobalicek commented #31
  • Jan 09 09:10

    kobalicek on conical-gradient-fix

    (compare)

  • Jan 09 09:09

    kobalicek on master

    [Bug] Fixed conical gradient tr… (compare)

  • Jan 08 23:49
    fjpietr commented #31
  • Jan 08 19:21

    kobalicek on conical-gradient-fix

    [Bug] Fixed conical gradient tr… (compare)

  • Jan 08 15:40
    fjpietr commented #31
  • Jan 08 07:37
    kobalicek unpinned #8
  • Jan 08 07:35
    kobalicek closed #47
  • Jan 08 07:34
    kobalicek closed #52
  • Jan 07 22:55
    kobalicek commented #47
John Lagerquist
@RallyTronics
that's what's so perplexing
Petr Kobalicek
@kobalicek
just asking as this has never occurred to me
John Lagerquist
@RallyTronics
it uses debug or x64/debug depending on 32 or 64
and i do see the obj file in both directories
William Adams
@Wiladams
I used to build 32-bit, and 64-bit on completely different machines, as with 64-bit I configured to use c-lang. I'd do what Petr suggests at the moment, unless you're really into solving the build problem.
Petr Kobalicek
@kobalicek
so it's part of a single solution?
John Lagerquist
@RallyTronics
All I need is 64 bit so it's not an issue, yes it's the same solution
i just went into the configuration manager and had it create the 64 bit build configuration
Petr Kobalicek
@kobalicek
I didn't know cmake supports this
John Lagerquist
@RallyTronics
well it generates a VS solution, from there you can configure the build
Petr Kobalicek
@kobalicek
I would also recommend not doing this as you basically interfere with what the build script setup
John Lagerquist
@RallyTronics
how do I get a 64 bit build solution? cmake is generating a 32-bit solution
sorry, i am not a cmake pro
Petr Kobalicek
@kobalicek
check out the configure script:
there are options to customize this
and these scripts are provided so you can easily get the project configured
but most probably you would then use your own
John Lagerquist
@RallyTronics
will give it a go, thanks
voodoomotion
@voodoomotion
@fjpietr @yzrmn Thanks for testing the variable stroke and sorry if it's caused a drift. I thought the existing stroke engine swept a normal along the path and you had an algorithm to fix tight corners? As a possible work-around, can you blend from a variable width stroke engine to the existing constant width engine as it approaches tight curves? You could define problem curves as any path point having 2 segments that form a very acute angle with short in/out tangents. As you iterate along the first segment and approach the problematic path point, interpolate between the variable width normal to a constant width normal (whatever the width should be at the problematic path point) by the time you reach 90% along the first segment. Continue using a constant width normal until you reach 10% along the next segment, then interpolate back to the variable width. Hopefully the tight corners would hide the interpolation. Sorry if my level of knowledge underestimates the problem :) just thought it might be a solution to try in the future, so don't worry about it for now :) thanks again
Federico Pietrobono
@fjpietr
If I understand it correctly: to get rid of the loop/the "unfolded" loop, in the interval around the critical point adjust temporarily the width to satisfy the constraint imposed by the curvature. But I think there's a problem...while this can work and pass unnoticed in many cases, now the stroke width is governed by the curvature, not the user anymore: the user wants a quasi constant-width stroke along a very sharp tight point (in/out tangents very close), but the stroke width has to become very small to avoid self intersections or concavities in the offset curve.
Federico Pietrobono
@fjpietr
Anyway if you just want to draw the path the loop is not a problem, the fill rule takes care of it. The problem is there only if you want to build an outline of it, that is, a clean non self intersecting offset curve. The "unfolded" loop (the concavity) on the other hand is a problem in both cases, because it's ugly :D
Fabian Yzerman
@yzrmn
Yeah, stroking is hard. :D
Federico Pietrobono
@fjpietr
In my experiments (only concerned with drawing, not making clean offset curves) making an envelope of circles (like: ---ooOOO--- but overlapping so that each pair of circles has two intersection points) along the path and building inner and outer offset curves by constructing segments between successive intersection points seems more well behaved
var_width_circles.png
even when the width envelope has cusps or fast variations
@yzrmn yes, and in fact we're all here losing sleep :D
voodoomotion
@voodoomotion
@fjpietr That looks absolutely amazing! I like how your UI allows you to shape the thickness! Are you guys are aiming for a level of unexpected perfection? In motion graphics we don't convert animated stroked lines to outlines because of the performance hit. In Adobe Illustrator, I regularly experience imperfections upon converting stroked paths to outlines, so I simply patch them up - you simply accept it :) Provided the fill rule hides all imperfections, I think that's all a developer would expect. It would be awesome if what you've achieved was included in Blend2D. Can you also vary the width by setting a width at each path point, so basically each BLPoint has an additional stroke width parameter? Must sleep now ...but this is very exciting! thanks again
Oldes Huhuman
@Oldes
Instead of an additional stroke width parameter per BLPoint I would prefer an additional stroke width modifier so one could globally change width of the path and still have it variable. By default the parameter would be just 1.0
voodoomotion
@voodoomotion
@Oldes If we had something like a 'BLStrokeType' with options BL_STROKE_TYPE_CONSTANT, BL_STROKE_TYPE_VARIABLE_SCULPTED, BL_STROKE_TYPE_VARIABLE_PERPOINT, it would allow us to choose how the stroke is rendered. Then your suggestion of a global width modifier would be scalar (1.0 = 100%) that globally effects the stroke regardless of the type, which is excellent because it saves the user iterating through all BLPoints or Sculpt Path points to globally adjust them :)
Skinning-cubic-bezier-splines-and-catmull-clark-subdivision-surfaces-siggraph-asia-2014-liu-et-al.pdf
voodoomotion
@voodoomotion
Slightly off topic, here's something from a few years back that you might find interesting in the future. It details a method that allows tidier deformation of cubic bezier splines. I doubt it applies to the perspective deformation (listed on roadmap), but if you consider adding a deformation method similar to AE 'puppet-pin', the info in this paper would definitely yield better results than standard linear fall off. AE rasterizes the artwork when 'puppet-pin' is enabled which sucks because you can't zoom unless your artwork is very high resolution, which in turns slows down performance. Have a quick read when you get chance, perhaps the algorithms are useful for something else :)
William Adams
@Wiladams
did you mean to put a link in there?
different topic: Has anyone done any work with wasm/wasi and blend2d?
I'm thinking there's a viable runtime environment lurking in a nanos/wasm/blend2d combination
Robert M. Münch
@Robert-M-Muench
I’m only following the discussion in the D community to port the d-runtime to WASM and what low-level stuff they are looking into.
I’m not sure what B2D could offer here? I mean you have a web-browser with ton of stuff you can access, it has all the drawing primitives IIRC. Of course not so cool as B2D but well… browser apps are not cool anyway :-)
Or do you mean WASM without a browser?
John Lagerquist
@RallyTronics
I just about have blend working with SFML but have run into an issue where the flush command does not seem to be working like I would expect. I basically do my blend drawing then call ctx.flush(BL_CONTEXT_FLUSH_SYNC); before updating the texture and blitting. The scene is not draw correctly. My reference example is bl-getting-started-8.cpp, It basically only shows the last line of text. If I call ctx.end() before updating the texture instead of flush() everything works as expected. What is flush() supposed to do?
Petr Kobalicek
@kobalicek
Guys I hope you realize that variable stroke width is not planned unless somebody actually does the implementation. We are basically busy doing all the other stuff :)
@RallyTronics ctx.flush(BL_CONTEXT_FLUSH_SYNC); does nothing at the moment. The function will only make sense when the asynchronous (read multithreaded) rendering is implemented - then there will be flush (aka flush command buffer) with either SYNC or ASYNC option - ASYNC would mean to make a notification after the last rendering command has completed, SYNC would mean to wait (aka BLOCK) until the last rendering command has completed
At the moment Blend2D does synchronous rendering, which means that every render command completes and then returns, so you can basically see the result immediately
William Adams
@Wiladams
@Robert-M-Muench i mean in a browserless context, like small embedded where all you have is nanos, wasm, blend2d.
Robert M. Münch
@Robert-M-Muench
Ok, I see… why not compile directly for the platform in such a case?
Fabian Yzerman
@yzrmn
Because being cross-platform is a strength of wasm.
Think like Java but browsers may execute them as well :)
voodoomotion
@voodoomotion
@kobalicek that's fine, the other stuff is more important :) have a great weekend!
John Lagerquist
@RallyTronics
Why, in example 8 after calling getTextMetrics, does the bounding box have y0, and y1 values of -0.000.... ?
Robert M. Münch
@Robert-M-Muench
IIRC this is a known bug.