Canvas.drawVertices - Incredibly fast, incredibly low-level, incredibly fun

Поделиться
HTML-код
  • Опубликовано: 22 окт 2024

Комментарии • 90

  • @mahmood466
    @mahmood466 Год назад +1

    This is some excellent quality content in Flutter! Please continue!!

  • @HezOmanjo
    @HezOmanjo Год назад +4

    Too nerdy for me ... But I'll say this - Filip has always challenged me to push beyond my boundaries of thinking in Flutter. Right from day 1. Amazing man 👍🏽

  • @CodeWithImem
    @CodeWithImem 6 месяцев назад

    the depth of the informations you provide it's amazing .

  • @lemomar
    @lemomar Год назад +3

    This was great!
    I’ve recently begun to work on the canvas after years of being scared of it and I’m enjoying it a lot

  • @imaNNeO
    @imaNNeO Год назад +4

    That was really great. I learned a lot. Thank you Filip

  • @mksln
    @mksln Год назад +2

    Wonderful video Filip! Thanks for the great intro to drawVertices, I didn't even know it was there, it looks like a great way to squeeze out lots more drawing performance when have need of it in Flutter apps.

  • @mivoligo
    @mivoligo 11 месяцев назад

    Just wanted to say Thank You! ❤

  • @thanhdatvo0
    @thanhdatvo0 Год назад +1

    We missed you! Welcome back!

  • @jjny916
    @jjny916 11 месяцев назад

    This is excellent and incredibly valuable content. Thank you.

  • @yf4453
    @yf4453 Год назад

    Amazing talk. Thakn you!

  • @SmashHighlights
    @SmashHighlights Год назад +1

    Really interesting, thanks for sharing! I always enjoy your focus on performance and low level stuff in Flutter.

  • @SecondFlight
    @SecondFlight Год назад

    Thanks so much for this talk! I didn't realize this was hidden in the painter API and I'm excited to try it out.

  • @giiyms4408
    @giiyms4408 Год назад

    Thanks Filip. Keep it up. Learning a lot!

  • @Andreasonline3
    @Andreasonline3 Год назад

    absolutley dope keen to see more

  • @Hamiiidev
    @Hamiiidev Год назад +1

    Great. waiting for Flutter Forward analysis.

  • @reacct1002
    @reacct1002 Год назад

    Thanks Filip!

  • @mohanedy
    @mohanedy Год назад +4

    I have enjoyed every second of this video. Really helpful and interesting.
    But I think you have drawn the Kotlin logo at 30:50 accidentally, maybe this is how the Kotlin team came up with the logo idea 😂

  • @dhruvinvainsh743
    @dhruvinvainsh743 Год назад +1

    This is superb

  • @pankajkoirala6563
    @pankajkoirala6563 Год назад

    Really happy to watch such content :)

  • @Dotafreak
    @Dotafreak Год назад +2

    Fear of canvas is slowly reducing. Thanks for sharing this.

  • @Apenschi
    @Apenschi Год назад

    VERY good! Thanks!

  • @CarlosHenrique-er7zq
    @CarlosHenrique-er7zq Год назад

    Amazingggg video! Thanks for it

  • @TheDescrout
    @TheDescrout Год назад +2

    While looking at the drawVertices docs I saw that flutter also has drawAtlas(and drawRawAtlas) methods. Would these be better for drawing a lot of images ? Also in your example the image in the polygon is not rotating. I assume it could be rotated via some sort of UV coordinates binding. I see that drawAtlas method supports all sort of transformations like scale and rotation that could make our life easier but maybe at the cost of a little performance ?

  • @saqibshafin
    @saqibshafin Год назад

    I love your work. So much.
    Keep it up!
    Also, please finish the Self Improving Developer book!

  • @محمدمهدی-س2ط
    @محمدمهدی-س2ط Год назад

    great. love your way.

  • @mkc11267
    @mkc11267 Год назад

    Awesome!!

  • @MohamedSalah-pi7fn
    @MohamedSalah-pi7fn Год назад

    This is awesome ❤️

  • @R4IVI
    @R4IVI Год назад +1

    My first thought when you asked for the "bug" was : "that comes from the 16bits limits !"
    I'm not a low level engineer but I learned that when trying to position planets accurately in space in Blender3D, which use a 32-bits number precision, which is ok for entertainment but weak for technical viz' ! 🤓

  • @SimonNielsen-zm7mq
    @SimonNielsen-zm7mq Год назад

    Nice! Will it be possible for you to share the comparison app?

  • @iy908
    @iy908 Год назад

    Please do more videos about high performance flutter/dart! Like how to use SIMD operations in flutter or own implementation of spatial interpolation algo and so on

  • @TadejKanizar
    @TadejKanizar Год назад

    Very cool. I'm going to start drawing all widgets using drawVertices from now on ;)

    • @filiphracek
      @filiphracek  Год назад +4

      Lol. Yes. It also helps to render all text via Vertices.raw, inputting each vertex by hand while juggling a chainsaw.

  • @alexandergorny
    @alexandergorny Год назад +1

    Yes nerdy, but love it! feels like first days of creating assembler triangles on vc20 ;) So curious about your SciFi UIs, please share !!!

  • @JessicaPereira-wy6ru
    @JessicaPereira-wy6ru Год назад

    Thanks for this amazing talk Filip, you inspire me... Do you have the code source?

    • @filiphracek
      @filiphracek  Год назад +1

      Not the one I show in the talk, but have a look at github.com/zesage/flutter_cube, for example.

  • @rlrl5879
    @rlrl5879 Год назад +2

    Have you tried running this demo on an ios device with impeller enabled? I have an app with some very complex scenes like this that runs fine in skia, but locks up on impeller. I still need to dig into what is goin on, but Im curious if you would see the same with this demo.

  • @mojtabana6322
    @mojtabana6322 Год назад

    thanks for sharing

  •  Год назад +1

    I think I have a gold rush because this is gold! This is exactly what I needed. So now what I understood is that it's the Float32List is what makes things fast not drawVertices() as much?

    • @filiphracek
      @filiphracek  Год назад +3

      Pretty much, yes. TypedData, if you keep it around, makes things go fast. (On the other hand, if you create (and then throw away) a big chunk of typed data every frame, then it might easily be slower.)

    • @SecondFlight
      @SecondFlight Год назад

      It also seems that drawVertices() is a lot closer to the equivalent graphics API call than something like drawLine(). This means Flutter basically doesn't need to transform the data you send it before handing it to the GPU, which I imagine helps quite a bit as well.

  • @AntonioBrandao
    @AntonioBrandao Год назад +1

    29:44 can these drawn shapes be tapped / made interactive with a GestureDetector or so? How would the hit area work there?

  • @tluanga-ruatpuii-pa
    @tluanga-ruatpuii-pa Год назад

    Can you please release a video about your desk setup

  • @aytunch
    @aytunch 10 месяцев назад

    Hi Filip, will you make the source code of the snowflake benchmark available? On part you did not mention int he talk was how you are changing the positions of all the vertices. SO it would be very helpful to see the code. Thanks

  • @erlangparasu6339
    @erlangparasu6339 Год назад

    Great! Thanks 👍

  • @mrverdant13
    @mrverdant13 Год назад

    I really love this video
    I wonder how could we add interactivity tho

  • @ttv_tej
    @ttv_tej Год назад +1

    Gonna start Flutter again I did first start in 2017

  • @RioM8z
    @RioM8z Год назад

    You seem to prefer Android Studio as your editor ?! Isn't the little program that is an example available ?

  • @theforestapp
    @theforestapp Год назад

    can you recommend any reading material on using the raw vertices/float lists?

    • @filiphracek
      @filiphracek  Год назад

      I was going from the docs, tbh. They're terse, but they have everything you'll need.

  • @dokinds
    @dokinds Год назад

    nice work @Flip :)

  • @_AnikSaha
    @_AnikSaha 20 дней назад

    Gem💎

  • @nonnulls
    @nonnulls Год назад

    Please, can you add a link to repo with source code to the description?

  • @kausikmr
    @kausikmr Год назад

    Canvas.drawVertices is not Anti Aliased even after adding the antiAliased = true in the Paint(). Is there a solution for this @Filip Hráček ?

  • @babydoll-li9ng
    @babydoll-li9ng Год назад

    What should we do to fastest the widget build ?

  • @gaosdatastory8884
    @gaosdatastory8884 Год назад

    Hi filip, Question for you. Can I use Flame in Flutter Casual Games Toolkit? I am a newbie to Flutter Casual Games Toolkit. Not sure if I can use flame in Flutter Casual Games Toolkit or not.

  • @zainroyan1556
    @zainroyan1556 Год назад

    Love your content, but iam interested as to how can u make ur vs code transparent

  • @DominikRoszkowski
    @DominikRoszkowski Год назад +1

    I find it funny that it's indices that overflow, not positions or the list length. The fact that it takes 5 indices for 1 snow-flake made me a little bit puzzled at first ;)

    • @filiphracek
      @filiphracek  Год назад

      Yeah, I started the experimentation with polygons (any n-gon), so it was easiest to have a vertex in the middle and draw triangles from there. It also made it easier to draw the kind of gradients I wanted. Ideally, I should have rewritten the code for the special case of a rectangle, where you need 1 less vertex and _half_ the triangles... Welp. Next time! :)

  • @odewoleabdul-jemeel8859
    @odewoleabdul-jemeel8859 Год назад

    This is awesome. Where can we get the source code?

  • @SirJohn2024
    @SirJohn2024 Год назад +16

    Nerdy... But interesting... Basically you can build a 3D engine on top of that, Flutreal Engine maybe? 😏

    • @hyungtaecf
      @hyungtaecf Год назад +3

      Or Flame 3D

    • @KennyFully
      @KennyFully Год назад

      I’m tired of flame. I’m going to do it myself.

  • @musoftware
    @musoftware Год назад

    I felt the felling of OpenGL 2 era. Ah... That nostalgic glVertex3f function...

  • @atmega3212
    @atmega3212 Год назад

    It's kinda like OpenGl, I love it

  • @becbelk
    @becbelk Год назад

    Good idea that the vertex eat from the buffer of the next data

  • @chiefolk
    @chiefolk Год назад

    51:00 because indices is a typed data of Uint16List which can only hold values from 0 to 65,535. so when we are trying to index from positions maybe greater than that it's breaking it??

    • @chiefolk
      @chiefolk Год назад

      so when there are more than 65,536 positions in the positions list and indices array is trying address them but it cannot be fit in 16 bits?

    • @chiefolk
      @chiefolk Год назад

      55:00 yeah i was close ✨

  • @danielduvana
    @danielduvana Год назад

    Is it not possible to draw circles with drawVertices? What's the most performant way to draw circles? Just Canvas.drawCircle?

    • @filiphracek
      @filiphracek  Год назад +2

      Yes, drawCircle is really fast. You could use vertices to draw a circle-like polygon but I'm almost sure it would not give you any performance boost (possibly the opposite).

  • @yf4453
    @yf4453 Год назад +1

    What theme is he using?

    • @filiphracek
      @filiphracek  Год назад +2

      The theme is called "high contrast" or something like that.

  • @shubhamyeole2881
    @shubhamyeole2881 Год назад +1

    First comment before watching... 😀

  • @Pewdew
    @Pewdew Год назад

    Is it possible to prepaint custom painters? I can't figure it out how to fix bad performance. I have 15 custom painter widgets and 10 fps😢

    • @filiphracek
      @filiphracek  11 месяцев назад

      Interesting. I admit I've never seen an issue like that. Are you updating them all every frame? Because if not, CustomPainter shouldRepaint() is your friend.

    • @Pewdew
      @Pewdew 11 месяцев назад

      @@filiphracek i turn phone, tilt changes and blocbuilder rebuild CustomPainters with new state. Also these custom painters are similar. Is there any way to paint it once and share to all my widget? Because each paint spent time.

  • @cycomkid
    @cycomkid Год назад

    Hoping shaders deepdive

  • @Kiriyaki65548
    @Kiriyaki65548 Год назад

    🚀 🚀 🚀 🚀 🚀

  • @coldwolf5050
    @coldwolf5050 Год назад

    Will you put this on github?

  • @LuisFernandez-cz7gb
    @LuisFernandez-cz7gb 2 месяца назад

    code example please 😊😊

  • @henryriehl2058
    @henryriehl2058 Год назад

    One very small thing, but you could probably improve the performance a bit for the widget side of things by using valueNotifier with a listenable builder :) Currently the Stack, ColouredBox and SizedBox widgets are being rebuilt unnecessarily.

  • @AmazingGrace0412
    @AmazingGrace0412 Год назад

    Please bring Native integration with cockroachdb and interfaces like algolia 💪

  • @ankitverma3932
    @ankitverma3932 Год назад

    how do i get this code?

  • @himmelkami3308
    @himmelkami3308 Год назад

    for one day , real game engine built by flutter.

  • @babydoll-li9ng
    @babydoll-li9ng Год назад

    can you please share me the code ?

  • @DmitriiGordeev
    @DmitriiGordeev Год назад

    This is not black magic )

  • @RaphaëlRail
    @RaphaëlRail Год назад

    How does it work by providing "this" as TickerProvider ?

  • @ghost_7701
    @ghost_7701 Год назад

    Me watching this is like monkey watching surgery 😂😂
    But I really enjoyed it and I hope one day that I become on that level of understanding 🫡

    • @filiphracek
      @filiphracek  Год назад +1

      Trust me, if I was watching this a year ago, I would feel the same. It's low-level and confusing. But once I tried (and failed) to wield this API a couple of times, it clicked.

    • @ghost_7701
      @ghost_7701 Год назад

      ​@@filiphracek I will give it a try I love these challenges.
      Thanks for the inspiration.