New Graphics Library in C (Olive.c Ep.01)

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

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

  • @bandaloo7776
    @bandaloo7776 Год назад +112

    i just wanted to say you are just an amazing communicator. funny, smart, humble. like the opposite of those “get a job at google in 2 weeks with my training program” tech bros. i’ve been watching your vids for a while now and i think we kind of work a similar way, lol. anyways, thanks for all the entertainment

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

      I can't stand those kind of douches. I call them the "silicon valley bros". They're like what gym bros is to fitness. Joma tech is a prime example of such a douche.

  • @cozerian
    @cozerian Год назад +299

    i love watching tsoding slowly descending into insanity

    • @NoobaLV
      @NoobaLV Год назад +7

      I KNOW RIGHT

    • @breakprismatshell6270
      @breakprismatshell6270 Год назад +14

      templeOS when?

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

      @@breakprismatshell6270 He already did that, year ago.

    • @breakprismatshell6270
      @breakprismatshell6270 Год назад +10

      @@Salantor It's not about programming on templeOS, but programming something like templeOS

    • @Salantor
      @Salantor Год назад +8

      @@breakprismatshell6270 So just an operating system. TempleOS is one and only.

  • @maxheim3802
    @maxheim3802 Год назад +47

    Damn im Hyped, its like there is such an overwhelming amount of possibilities when it comes to graphics and gui, when there is a c library that is featured by tsoding, you gonna know its worth learning. Thanks Tsoding!

  • @DFPercush
    @DFPercush Год назад +50

    One way to improve the performance of drawing circles is, for each horizontal line, compute the X offset of the start and end of the circle on that horizontal slice.
    x_ofs = sqrt(r^2 - y_ofs^2) ;
    Then fill pixels between (center - x_ofs) and (center + x_ofs) those two points. Or call memset(). One sqrt per line, rather than per pixel.

    • @michaeljones1686
      @michaeljones1686 Год назад +8

      🤓

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

      A common trick in FORTH to create a repeated string is to initialize the first substring and then copy forward... thereby copying the bytes you just copied.

  • @hanqnero
    @hanqnero Год назад +64

    Hope this won't be abandoned, actually poggers.

  • @10e999
    @10e999 Год назад +73

    Always a pleasure to follow your C project.

  • @DaviSimDoP
    @DaviSimDoP Год назад +7

    I'm so happy YT suggested your channel to me! Your content is super instructive and enjoyable. Keep up with the good work!

  • @Mushele
    @Mushele Год назад +19

    I am not a programmer, was just writing some little projects in c++ from time to time, this video kinda makes me want to try C this time, looks fun

    • @ZephyrCubic
      @ZephyrCubic 9 месяцев назад +1

      I think that makes you a programmer! Just not a professional ;-)

  • @peezieforestem5078
    @peezieforestem5078 Год назад +27

    Lol, I speak Ukrainian and I wouldn't've guessed the secret meaning until you explained it. I guess my brain just switches to a different mode when things are in a different language.

  • @lolix7002
    @lolix7002 Год назад +8

    This is very high level programing skill, it's funking impressive. As a c++ programmer who is don't feel to learn fast enought, this video it very interesting !! thx

  • @7KeHek
    @7KeHek Год назад +30

    There is Bresenham's line algorithm to draw lines without using float numbers

  • @luandkg
    @luandkg Год назад +5

    Amazing Tsoding 👏🏻👏🏻👏🏻👏🏻 one Idea for futures vídeos - implement your own image file format !

  • @olivec9108
    @olivec9108 Год назад +30

    Uhh… NO ONE LOOK AT MY NAME

    • @ru2979
      @ru2979 5 месяцев назад +1

      😮is it u who discovered it ??😮😮

    • @olivec9108
      @olivec9108 5 месяцев назад

      @@ru2979lol discovered what?

  • @jeezusjr
    @jeezusjr Год назад +9

    Thank you for sharing. This is one of the things on my programming bucket list. Definitely going to try doing it in Ada. Please provide donation link in description so I can show my appreciation as I can't join live stream.

  • @evlogiy
    @evlogiy Год назад +20

    I love that you programming red rectangle for 40 minutes and then you say: "It's cool. It's pretty cool." and I'm like: "Not bad. Not bad actually."
    How is simple red rectangle written in C can be so... mesmerizing for us, programmers, is the question for me. It's a miracle beyond common sense.

  • @خالد_الشيباني
    @خالد_الشيباني Год назад +6

    I knew this was coming giving all the recent graphics related Tsoding sessions

  • @darkodj
    @darkodj Год назад +10

    As someone who knows all the ex-yu languages, pencil is Olovka, there is no c character, that google translate is completly wrong. Olivec does not have a meaning in any of them, but clever name, none the less. Fun fact, Olive the fruit is called Maslina.

    • @TsodingDaily
      @TsodingDaily  Год назад +8

      Oh yeah, I double checked and realized that Google Translate was wrong on that already after the stream! :D Thank you for bringing that up!

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

      This might not be the case in ex-yu, indeed, but I speak Ukrainian and he's absolutely right, "олівець", which would be transliterated to "olivec", is a word that means pencil.

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

      @@peezieforestem5078 i was commenting because he mentioned bosnian, never doubted ukraninan translation, only the serbia-croatia-bosnia-monetenegro part :)

    • @VojtěchJavora
      @VojtěchJavora Год назад

      Hmm. Does that have any relation to the word for lead (metal)? The same way as in English with pencil lead (graphite)?

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

      @@VojtěchJavora So, lead is Olovo, but it does not have any direkt relation with word for pen or pencil which is Olovka :) they are just have very similar order of letters :)

  • @thecodingfoundation
    @thecodingfoundation Год назад +7

    minifb together with olive.c is like a match made in heaven.

  • @10Dima01
    @10Dima01 Месяц назад

    it's a cool project due to portability.
    I already see how it's easy to port this to any MCU (and even test fully same code on PC before shipping to MCU)
    amazing.

  • @bhavyakukkar
    @bhavyakukkar 8 месяцев назад +1

    i think this went on to becoming his most popular project

  • @johangamb
    @johangamb Год назад +9

    are all these CELL_WIDTH/2 etc calculations inside the nested row/column loop optimised out by the compiler ?

    • @TsodingDaily
      @TsodingDaily  Год назад +11

      Yeah, probably via something like constant folding en.wikipedia.org/wiki/Constant_folding

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

    Really good video, but I cannot agree with statement that custom structures which encapsulate data specific to canvas and shapes makes the library less generic. In fact when you expose functions to user of the library you already enforce the user to lead the contract defined by functions declarations. You already predefine the types and variables which the user should prepare before using your functions and if the user have own structures as it was mentioned in your example, the user should translate them to be compatible with the interface of your library (which is absolutely normal). This is the reason why adding of custom structures do not have any influence on the level of "genericity" of your library. But such custom structs have some valuable advantage - it makes client code more explicit and readable. With such structures you firstly prepare them in explicit and obvious for anyone way and after that you pass this prepared data to the functions, which is cleaner than passing 7 arguments to the function and simultaneously making some additional math on part of them. The second advantage is that you can reuse canvas or shapes in convenient way. In my opinion from this point of view the design which you chose is unfinished, you define the interface, but do not encapsulate it parts to entities, where each entity is responsible for some abstraction necessary to use your library.

  • @4115steve
    @4115steve Год назад +1

    the old days before google were miserable. It sure is great having the ability to look up anything at anytime

  •  Год назад +13

    Look up Bresenham's line rasterising algorithm. Very elegant, very simple, better than this y=kx+c stuff.

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

    man this is arab for me, and i feel kinda descuraged to learn more coding, because i tried to learn how to code in c++ and i stopped (even tho i want to restart but idk i feel to stupid for now) months ago and i didn't succeed very well, not because of the difficolty of the language di per se but because of a lack of motivation, and watching you do this made something move inside of me, i'd very much want to know the way i should follow, but the more i search the more i am confused.

  • @addowhite6331
    @addowhite6331 Год назад +8

    A few years ago I implemented defer with a macro and it's been a game changer, I've used it ever since.
    It defines a nested function with a user-defined body and automatically calls it using __attribute__((cleanup)).
    It uses __COUNTER__ so that each defer nested function has a unique name.
    Only works in GCC and CLang, not MSVC.
    So the following would be valid:
    __auto_type buf = malloc(1024);
    if (!buf) return false;
    defer { free(buf); }
    __auto_type fd = open("test.txt", O_RDONLY);
    if (fd == -1) return false;
    defer { close(fd); }
    return true;

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

      There's a simpler way of doing that which would work in every compiler and even be compliant with older standards.

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

      @@anon_y_mousse I don't think so, but would love you to prove me wrong.
      Whenever I've needed to use MSVC I've simply used C++, because it's not possible to implement defer in portable C.

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

      @@addowhite6331 It is if you use macros to define the function. I can't post a direct link, but do you know of pastebin?

    • @Anon.G
      @Anon.G Год назад

      @@anon_y_mousse I do

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

      @@anon_y_mousse 2 months on, still waiting for the pastebin

  • @ChrisBNisbet
    @ChrisBNisbet Год назад +10

    I've been using that return_defer technique for some time now, but I have been subjected to backlash for _not_ having loads of cleanup/return strewn throughout my functions. People take one look at the 'goto' and tell me I'm doing it wrong.

    • @Bobbias
      @Bobbias Год назад +7

      I mean, goto considered harmful has been around a long time. Personally I think this might be one of the few legitimately good uses of it, but I can certainly see people preferring nasty code rather than using goto.

    • @ChrisBNisbet
      @ChrisBNisbet Год назад +8

      @@Bobbias - I absolutely understand why using goto to leap around code isn't a good idea, but as you say, this usage is a bit different - the single cleanup/exit point seems less bug prone and puts less load on my wee brain.

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

      there are times when using goto is not a bad thing, see the linux sources

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

      Agreed, cleanup code in C is one of the few valid usage of goto

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

      Putting goto into a MACRO is dangerous eg what if you forgot to define the label or put it in a wrong place, this dependence could cause many bugs IMHO

  • @anon_y_mousse
    @anon_y_mousse Год назад +7

    Personally, I default to using .bmp files because I've just about memorized the simple format for them and they work on every platform. Generally I'll have my own programs generate them then use ImageMagick to convert them to .png's after the fact. I really should learn libpng, but I keep putting it off.
    As for handling cleanup, I usually just do it manually by incorporating layers of jump points, and instead of setting the return value then jumping I regularly decrement the return value at each failure point so the quick exit can just goto its associated return. If I know I'm going to be doing a bunch of memory allocations I just add the labels right when I start writing and number them in reverse. And at the end, above the first label, I'll set the return value to 0.

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

      Why do you need to know the format of a bmp at all? Just use a library to open the images lol

    • @anon_y_mousse
      @anon_y_mousse Год назад +5

      @@firexgodx980 Because I write most of my code from scratch. Often implementing such libraries for others.

    • @tissuepaper9962
      @tissuepaper9962 Год назад +8

      @@firexgodx980 because it's a lot easier to just write the simple code than to learn a new library that somebody else wrote. Yes in the long run we would save time but we don't care, we're going to keep writing programs that output PPM and BMP images until the day we die.

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

      @@tissuepaper9962 weird flex but ok

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

      @@tissuepaper9962 Dude, using stb_image_write.h is not gonna give you instant cancer, tf are you on about

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

    Thank you. This exception management with the terrible "goto" is amazing.

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

    The simplest video format I can think of would be something like subtitles. At this keyframe of audio make sure we are displaying this keyframe image, then just interpolate between keyframes for what image to display. but in practice, that's probably impractical or else someone would have already done it.

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

    He writes everything using C.
    This guy is such a chad.

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

    Okay im actually so excited about this

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

    That return defer, I never saw a use for GOTO until today, and I don't hate it.
    Gonna pocket that.

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

    This is out of topic, but I had to step in. Pencil is not "olivec" in Bosnian. Google translate had a fluke I guess. In Serbian, Bosnia, Croatian and other Balkan Slavic languages pencil is translated as "olovka"

  • @alexw5093
    @alexw5093 8 месяцев назад +1

    I noticed that you keep a list of references at the beginning of your videos. Are those references what you found during the research of your project? I am curious because I think that is pretty neat and organized. I'm thinking I should do something like that as well, because I tend to lose the information that I found during the research phase of my project once I finish it...

    • @bhavyakukkar
      @bhavyakukkar 8 месяцев назад

      its the references he talks about to chat, and he writes them down into the file for yt viewers so he can put it in the description when he uploads the vod corresponding to that stream to yt

  • @koktszfung
    @koktszfung Год назад +5

    Is the defer_return thing a standard way of handling files?

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

    Really Nice video - Man!!!
    Hello from Kyiv by the way ... Really nice to see a smart man from Russia.
    How about to rust-ify this project?

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

    What Linux distro and desktop environment do you use, if you don't mind my asking?

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

      Debian and i think he is using dwm, check the FAQ in his twitch channel

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

    31:42 I typically make structs for everything and then provide two functions for each thing. One for just the parameters (width, height, x, y, etc.) and one where it takes just a pointer to a rectangle struct. So then the user can chose what they like best. Maybe even make an ifdef or something to enable/disable the structs

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

    If i wouldn't work in automotive i would do videos on implementing and debugging stuff. I'm sure many people would feel better about their day afterwards :D
    Thanks for the great video, and for sharing your knowledge!

  • @magnum21th.c
    @magnum21th.c 10 месяцев назад

    enjoyed every second of it 🇯🇵😁isnt that freaking cool man getting what they taught in schools and make japan flag out of it😂

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

    Like so much your videos tsoding! Keep it up

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

    It's fun association but pencil in some slavic languages refers to lead which first pencils were made of.

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

    you can use "atexit" to close files like modern languages. I don't have much experience with C, at least that's how I know it.

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

      atexit takes a function pointer and no args, so you'd have to save your file handle somewhere.
      It also executes only at program exit, so you wouldn't release the file when the function returns. Calling the function again would open the file a second time, which might not succeed.

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

    My last name is "Oliveira" means olive tree, Descend from Portugal.

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

    olive.c is such a clever name, also whats that status bar haha

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

      I think that's the default emacs thing

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

    прикольна назва для бібліотеки :)

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

    How does it compare with Cairo when it comes to its feature set, stability and performance? Do we have any benchmarks?

  • @Lukas-qy2on
    @Lukas-qy2on Год назад

    love the stream so far. but MY GOD that keyboard clanks. maybe get a directional mic xd

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

    Hmm...does it come with unlimited bread sticks? I'll consider...

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

    wonderful olive.c interesting

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

    Is it normal to mix the curly brace styles. Having functions be a different style than loops and if statements is wierd

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

      It's actually pretty common, using K&R style for internal constructs while using Allman style just for function enclosures.

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

      Obligatory "Allman style bad. K&R good."

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

      Actually, this is the K&R style: en.wikipedia.org/wiki/Indentation_style#K&R_style

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

      @@tissuepaper9962 Allman style is the best.

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

    Sounds like a great project

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

    Very close to Polish "ołówek", where the word root is "ołów" = lead. guess why :)

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

    The pencil is too unstable and is currently under development.

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

    Mind blowing that this is seen as good stuff. Why would anyone want to memorize a video encoding algorithm? 2023. Also, C style needs to be evaluated.
    Like, take this as input, for sure, but not gospel :)

  • @ВладиславГришин-ш7ш

    есть ли библиотека для работы с видеокартами в текстовом моде? curses?

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

    wait is he the one writing the library?

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

    Does anyone know what is with the do while loop at 20:40 in return_defer? why have the loop instead of just the code since it's never going to loop anyway.

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

      It forces the user of macro written in such way to append semicolon after macro call, which makes it similar to call of normal C function. It creates nested scope in place where it is called and if you will write the macro without do/while(0) parts (just braces) you can omit semicolon in the end of line. But with do/while(0) the compiler return error if you try to build the program without semicolon after the call of such macro. The same can be applied to the situation where you do not create internal scope by calling macro (something like that #define MY_MACRO foo(); bar(); ), in such case you can omit semicolon which looks strange in C and can lead to non-obvious side effects in some situations.

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

      The explanation above is good. The only thing I would add is that in C, the only way we used to be able to have a block of statements joined together, but not followed by semicolon (so we can add our own after the macro) was with the do-while construct, which demands a semicolon at the end. If you tried another way, you couldn't add the extra semicolon and it would look weird, so this technique became popular. But I think they fixed it. In the latest standards/compilers, extra semicolons don't matter.

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

    Finally uploaded it to RUclips, ;)

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

    In fact, a division is not more error-prone than adding or multiplying. Only subtraction can be really painful.

  • @13thk
    @13thk Год назад +5

    Can I make bindings for it?

    • @TsodingDaily
      @TsodingDaily  Год назад +5

      Sure, it's under MIT. But keep in mind that it's unstable and things may change.

    • @13thk
      @13thk Год назад +2

      @@TsodingDaily Thanks

    • @13thk
      @13thk Год назад +1

      With this I can begin writing a more idiomatic wrapper around it

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

    I have just watched 15 minutes so far. But my initial thought: why don't you make a struct olivec_image with uint32_t * pixels, size_t width, size_t height, and make all the functions needing the array to take a struct olivec_image pointer?

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

      You mention it at 32:00. So, now I know why you chose not to do it. However, I disagree with your design choice. You should force the user to use your struct. :)

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

    1:24:49 why not just change the direction it iterates instead of swapping the ints?

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

    Do we have a simple format for writing a PDF and font? something like LATEX?

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

    .tga is about as simple as ppm and should be quite widely supported?

  • @학생1-r5o
    @학생1-r5o 18 дней назад

    Could anyone explain me why bits are stored in BGR order instead of RGB order?

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

    One way to get rid of the staircase: you now have a case for vertical lines and a case for everything else. If you change that to the case |k| < 1 (or maybe

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

    Maybe "godot-4 GDScript" next? I enjoy when something "feels" wrong

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

    Hwy, what editor are you using?

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

    Does tsoding still have a discord? I can't find if so. I am new to everything C, git, Linux.... Would be nice if I could ask question/advice if such is allowed? I watch his videos even though most of it is over my head... He gives me ideas of programs to use to code... Or ideas for coding....

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

    This is brilliant. Thanks

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

    will you make more porth videos?

  • @tusharagarwal5306
    @tusharagarwal5306 8 месяцев назад

    What font are you using?

  • @сергейсемёнов-о7ю

    AoC будете в этом году?

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

    what about Rayib?, is very similar concept, single file, graphics library

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

      Although it can be used with only #include "raylib.h" , it's not a single file library. See raylib/src folder.

  • @yadukrishnan.d6888
    @yadukrishnan.d6888 3 месяца назад

    damm the name is genius. the coincidence😮

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

    hdhdhsh amazing naming very interested in this

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

    @16:44 you said you doubled the amount of circles. Actually you quadrupled the amount because you multiplied both COLS and ROWS by 2. It would have doubled if you had only multiplied one direction only, like COLS*2 by ROWS. So, you messed up on your school maths there after saying you are making school maths fun earlier! 😉

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

    Olives are stonefruits

  • @4otko999
    @4otko999 Год назад

    Good stuff, love it

  • @сергейсемёнов-о7ю
    @сергейсемёнов-о7ю Год назад +1

    I like this sheet!

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

    Do we realy need do-while loop in macro retrun_defer?

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

      Yes, it's necessary for some edge cases which can mess up parsing

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

    "Isn't that cool?"

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

    “Too smol Pepehands”?

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

    It's funny how you pronounce "olive.c" which sounds exactly as plular "олівець" in Ukrainian haha.
    And singular form has emphasis on E. So it's "olivEc".

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

    What theme is he using?

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

    Did this man really just say he sees no reason for V and W to be separate letters? LMAO.

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

    What about antialiasing?

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

    Cant you make a 3D library :P

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

    can you please do something about blazor Webassembly like building an application from scratch tuto or something like that ; thank you anyways for your efforts

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

      I doubt tsoding will touch blazor. He generally avoids dealing with large libraries/frameworks which are often used in corporate programming. He left his programming job because he hated that overcomplicated stuff.

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

    Very nice lib name. 👍

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

    Discurd server?))

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

    Why was this on my recommended videos?

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

    Awesome

  • @miguelfernandocruzsantiago5380

    Which is his theme?

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

      Gruber darker. It's on MELPA.
      Edit: Font is Iosevka. Very popular in Emacs circles. Use it myself with Zenburn theme.

  • @coffee-is-power
    @coffee-is-power Год назад +1

    Make a 3d graphics API in olive

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

    can it beat GDI+

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

    thank you ❤👍

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

    is there a discord link?

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

      Link on twitch, but discord only for subs (but if you want just get notifications, you can join)