How Shaders Work in OpenGL

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

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

  • @ewanholmes4559
    @ewanholmes4559 5 лет назад +867

    This better be the most beautiful triangle ive ever seen...

    • @carrapaz3645
      @carrapaz3645 4 года назад +44

      it will be, every dumpling it's beautifull for his mum

    • @dualperception4296
      @dualperception4296 4 года назад +39

      You havent tried vulkan yet have you?

    • @marcovalentinoalvarado3290
      @marcovalentinoalvarado3290 4 года назад +24

      I drawn a rectangle cause im badass

    • @ijojoi7226
      @ijojoi7226 3 года назад

      @@dualperception4296 No, he hasn't

    • @058w.
      @058w. 3 года назад +6

      @Drake Lionel yea it works 100% guys. just give your social security bank account and credit card/paypal password.
      remember to sell your house and car or whatever else you have and deposit money to your bank account. it works better this way.
      only con is that you go bankrupt or homeless but hey you gotta compromise something too , right

  • @machine0man
    @machine0man 4 года назад +243

    Other RUclipsrs : Uses Drawings to Explain
    The Cherno : Just talk and Draws on Viewer's Mind

  • @arondejong6515
    @arondejong6515 7 лет назад +534

    Best C++ and OpenGL tutorials EVER!

  • @DridriLaBastos
    @DridriLaBastos 7 лет назад +258

    OH YEAH TRIANGLE, THE NEXT TIME I WILL SEE YOU !!!

  • @spencerfreebairn9346
    @spencerfreebairn9346 6 лет назад +130

    "... on the fly shader generation..." As if my mind weren't blown enough already.
    I'm loving these videos! You are an amazing teacher! You go in depth but always remain within the scope of the discussion. Excellent.

  • @denic6861
    @denic6861 4 года назад +7

    Beautifully explained. As somebody who has worked with shaders for the past 7 years, I am glad more light and accessible information is being tread on this amazing world of technology. I will be recommending this video to people for sure!

  • @eloquentlyemma
    @eloquentlyemma 7 лет назад +45

    Thank you for this video. It has helped me clarify a few things in my mind. I'm going to go back and look at my own shader code now that you pointed out how many times the fragment shader is run in comparison to the vertex shader (I have a nasty feeling that my code will need a rewrite). It just those simple obvious pieces of information that can make such a difference. Also, I can't wait for when you show us more complex shaders.

  • @goncalosoares8483
    @goncalosoares8483 7 лет назад +150

    I'm having a college class on computer graphics and these videos are helping a lot! Please keep up the great work

  • @Rasenganist
    @Rasenganist 4 года назад +4

    @6:24 ;) The beautifull thing for me is to see people making great tutorials and videos, helping other to improve their own skills. Thank you for that man! It is a pleasure to listen to your videos.

  • @nm5paczek
    @nm5paczek 5 лет назад +16

    Insane teaching skills, thank you

  • @mitcaro7310
    @mitcaro7310 2 года назад +3

    I spent a semester on a GPU programming course at my university and didn't get a word of what our "experienced" professor said! Even until the end of the semester, I didn't know what shader or even OpenGL is. I hated that course. But now with only 6 short videos, BANG, everything makes sense and is easy to understand. Come to Switzerland and become a university professor Cherno. You're just fantastic.

  • @apfelstrudlOfOA
    @apfelstrudlOfOA 2 года назад +2

    I just stumbled upon this video by chanse, and I love your teaching style. You're extremely pedagogic in the way you teach. You repeat yourself with different wording and examples so we get different types of understandings for the same issue you're trying to teach, and it works tremendously! Great video!

  • @TinoBurset
    @TinoBurset 5 лет назад +69

    I'm 10 minutes in and just realized that there were no cuts in the video, with an spectacular and well paced explanation. Simply amazing content man!

    • @bumpsy
      @bumpsy 4 года назад +16

      there are SO many cuts in Cherno videos xD he very often only says one sentence per cut but he cuts cleverly to not disturb the audio too much so it seems like he's talking in one stream

    • @TinoBurset
      @TinoBurset 4 года назад +6

      @@bumpsy You are absolutely right! 😆 I guess that it _felt_ that way at the time.

    • @maugre316
      @maugre316 3 года назад +2

      @@TinoBurset Just noticed one at 2:36, but there are more. I guess one way round it is to use multiple cameras and switch between them but the actual content is the important thing.

    • @dot32
      @dot32 3 года назад +1

      there is one two seconds later at 10:02 lmao

  • @AmeshaSpentaArmaiti
    @AmeshaSpentaArmaiti 7 лет назад +140

    I didn't know shaders were generated on the fly. That's pretty cool.

    • @deletevil
      @deletevil 4 года назад +1

      what do you think happens when you go forward holding a flashlight/torch and the intensity of the light on the wall before you increases lol?

    • @AmeshaSpentaArmaiti
      @AmeshaSpentaArmaiti 4 года назад +41

      @@deletevil That's not generating an entire System-specific shader during runtime. that's just a shader.

    • @deletevil
      @deletevil 4 года назад +1

      @@AmeshaSpentaArmaiti , aah okay, thanks. I am a noob learning.

    • @generichuman_
      @generichuman_ 3 года назад +42

      @@deletevil then why would you say that with such confidence if you're just learning? A little humility goes a long way

    • @deletevil
      @deletevil 3 года назад

      @@generichuman_ and what are 'you' gaining from by replaying to a noob like that?

  • @yinhao4085
    @yinhao4085 6 лет назад +8

    This is the most detailed explaination! Helps so much on visualising the shader pipeline!

  • @JayAnAm
    @JayAnAm 6 лет назад +5

    Very good explanation, just subscribed!

  • @timothyvandyke9511
    @timothyvandyke9511 4 года назад +5

    "When it comes time to optimize and think about performance, which is really all the time" Thank you for making me feel less crazy.

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

    Great explanation. I think its a great idea to give examples with modern game engines as well, in Unity or Unreal (in Unity->Shadergraph, in Unreal->Material Editor) you are actually making fragment shaders. There is also a part where you can also specify vertex positions as well, thats the vertex shader. In Unreal thats World Offset in the Material Editor.
    In Unity, if you are writing a shader completely in HLSL, you can also access the vertex shader, and you can see that all it does is get the world positions and then multiply them by the MVP matrix (model view projection matrix) to get the position it needs to have on the screen.
    For me it clicked when I saw these things in the programs I use everyday. I hope it helps someone trying to understand them as well.

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

    So in summary.
    - Vertex shader is called for each vertex. (used just for position)
    - Fragment shader (pixel shader) runs for each pixel that has to be rasterised.

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

      What is rasterisation?

    • @RudolfCickoMusic
      @RudolfCickoMusic 6 месяцев назад +1

      @@shashanktambe6341 Basically a vector function like you have in math. For example y = 2x where x = {1..10} all the pixels from (1,2) to (10, 20) will be rasterized.

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

      @@RudolfCickoMusic thanks for coming back to comment

  • @beterax
    @beterax 3 года назад +1

    I really love that this does not feels like someone reading a Wikipedia page to me. I really love how you explain the fundamentals and why we use them as well to make sense. Thanks a lot for these videos man!

  • @specialgorilla
    @specialgorilla 3 года назад +1

    I have never found such a clear and thorough explanation of this anywhere else. Thank you for making this.

  • @B4RN154N
    @B4RN154N 6 лет назад +2

    Man, the quality of your videos is just amazing. Keep up the good work!

  • @spookier444
    @spookier444 4 года назад +3

    he got Electronic Arts team perform every intro

  • @kevingergely2462
    @kevingergely2462 4 года назад +1

    I will soon start working with openGl and your videos are really good to refresh my memory with it. Thank you for the awesome tutorials.

  • @siddharthgpta
    @siddharthgpta 6 лет назад +21

    In the beginning you were explaining that glDrawArrays draws the currently bound VertexBuffer, but just above the while loop you've bound it to 0. How is it still drawing the triangle in this case?

    • @olfmombach260
      @olfmombach260 5 лет назад +1

      That's also what I didn't get

    • @rialseebran2072
      @rialseebran2072 5 лет назад +1

      the glBindBuffer(0) unbinds the buffer. After this we can write to the buffer

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

      This got me thinking. I found this in the docs:
      Buffer object names are unsigned integers. The value zero is reserved, but there is no default buffer object for each buffer object target. Instead, buffer set to zero effectively unbinds any buffer object previously bound, and restores client memory usage for that buffer object target (if supported for that target). Buffer object names and the corresponding buffer object contents are local to the shared object space of the current GL rendering context; two rendering contexts share buffer object names only if they explicitly enable sharing between contexts through the appropriate GL windows interfaces functions.
      But don't exactly know what it means in the last part

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

    not even drawing or using animations and this still is one of the best explanations

  • @zaspanyflegmatyk2446
    @zaspanyflegmatyk2446 5 лет назад +146

    when i hear "shaders" all that comes to my mind are Minecraft shaders

    • @xtdycxtfuv9353
      @xtdycxtfuv9353 4 года назад +7

      kek same

    • @miles7267
      @miles7267 4 года назад +5

      and they have to be written in code too

    • @andresvallelisboa5511
      @andresvallelisboa5511 4 года назад +6

      That is because Minecraft uses them, they allow you to do amazing stuff.

  • @eliaspr8124
    @eliaspr8124 7 лет назад +102

    I'd say you forgot a cut at 3:10

  • @MaruskaStarshaya
    @MaruskaStarshaya 5 лет назад +5

    The best explanation in the internet

  • @panaah30
    @panaah30 3 года назад +6

    You explain so clearly ❤️
    Keep doing this ❤️🙂

  • @Damoygames
    @Damoygames 7 лет назад +39

    Sunday: (TheCherno && ThinMatrix ) == Kreygasm

    • @KennyTutorials
      @KennyTutorials 5 лет назад +2

      ​@@lufenmartofilia5804 Two best on my option teachers EVER! And also awesome guys! (TheChernoMatrix)

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

    I had a subject named computer graphics in my post graduate. My teacher didnt teach, but was strict in class, telling to write notes record note so on. Literally saying, you are teaching so good.

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

    Your explanations are so clear and easy to understand! Thank you so much for this series, it's really awesome. :)

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

    Can't wait to create my first Shader. Thanks!

  • @kenan2386
    @kenan2386 3 года назад

    My man making an OpenGL Tutorial Series
    i would have gave up if you didn't make a series
    *keep up*

  • @darkphoenix68
    @darkphoenix68 2 года назад

    I'm trying to get up to speed in OpenGL, and was looking for something on shaders. Found this video, and was so impressed I'm now working through the entire playlist. I'd originally avoided it because I'm actually working in Go -- but I figured, what the heck, apart from a few language-specific differences, it all works basically the same; sure, I can translate from C++ (which I've not used for literally decades) to Go (which I've only just begun tinkering with...) :-) Wrapping my head around three-four languages at once is about par for the course! ;-)

  • @SaravanaKumar-nl4sz
    @SaravanaKumar-nl4sz 7 лет назад

    clean and clear intro for shader. Keep doing

  • @ironichoneybadger5066
    @ironichoneybadger5066 3 месяца назад

    I'm coming to this series in 2024, and the comments all being in agreement that this tutorial is what we all needed to learn this skill is so entertaining to me

  • @mukeshpareek5414
    @mukeshpareek5414 6 лет назад +5

    Hi
    I have question here from opengl series video number 5
    glGenBuffers(1, &buffer);
    glBindBuffer(GL_ARRAY_BUFFER, buffer);
    glBufferData(GL_ARRAY_BUFFER, 6*sizeof(float),position,GL_STATIC_DRAW);
    glEnableVertexAttribArray(0);
    glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 2, 0);
    glBindBuffer(GL_ARRAY_BUFFER, 0); // Why still we see Triangle rendered even we are unbinding the buffer here? can anyone please help me to understand?

  • @tahseensaad7860
    @tahseensaad7860 7 лет назад +1

    You made me think now! And visualize without coding or learning anything!

  • @fraenkfurt
    @fraenkfurt 5 лет назад

    your hands are freaking me out but by purely listining to you it's excellent! thanks so much!

  • @daniilvinnik4450
    @daniilvinnik4450 3 года назад

    I don't really think i can ever find such easy-understandable tutorial about OpenGL and Graphics Programming, which is really complicated by itself.
    Aah, and of course: drawing the best triangle in my life is priceless :)

  • @iHouqLF
    @iHouqLF 2 года назад

    My possibilities are exploding right now. Thanks for the awesome tutorials! :D

  • @miteshsharma3106
    @miteshsharma3106 7 лет назад +12

    Can you please make a video about unions in your c++ series

    • @Ahmed-wj5sd
      @Ahmed-wj5sd 7 лет назад +1

      Mitesh Sharma he already did in the sparky engine series 5.5

  • @Youngduck93
    @Youngduck93 3 года назад

    Thank you so much for the quality content!

  • @JimmyTheZombie115
    @JimmyTheZombie115 7 лет назад +20

    When I was thinking of OpenGL... THIS came out! Nice!

    • @navegct8457
      @navegct8457 7 лет назад +1

      yep. same dude!

    • @fenilli
      @fenilli 7 лет назад +2

      sadly is not everyday

  • @wacko1jacko699
    @wacko1jacko699 2 года назад

    This is fantastic! love this explanation!

  • @hyla4254
    @hyla4254 4 года назад

    Thank you! Your explanation is very easy to understand.

  • @navegct8457
    @navegct8457 7 лет назад +31

    #Notifacation Squad!!!!

  • @satomi8500
    @satomi8500 5 лет назад

    Thanks man, you are really good teacher.

  • @justchris846
    @justchris846 6 лет назад +1

    These videos, excellent quality.

  • @agustinlawtaro
    @agustinlawtaro 5 лет назад +1

    Sos crack, colorado. Gracias!

  • @jellykisses9641
    @jellykisses9641 7 лет назад +14

    Would it be practical to save compiled shaders (programs are saved as .exe) instead of compiling each time the program runs?

    • @ChrisHorner_WCC
      @ChrisHorner_WCC 7 лет назад +9

      I don't think that's possible, as the result of the compilation may be driver-dependant. Plus I don't think OpenGL provides any way to actually copy those compiled shaders to the GPU memory.

    • @platin2148
      @platin2148 7 лет назад +4

      You could do that but this will bind the shader to your graphics card as it uses the compiler in the graphics driver to compile your code to the graphics card. And no the program gets only compiled once only if you add glCompileShader to the loop it would do that else you could use the program handle. Also there is a platform independent way to compile you shader the output is then called SpirV shader assembly.

  • @ycombinator765
    @ycombinator765 2 года назад

    I love his hoodie

  • @RedstoneHair
    @RedstoneHair 2 года назад

    ah yes, an entire video (without coding) just explaining shaders. I love your explanations!!

  • @bfkmnemonic
    @bfkmnemonic 2 года назад

    I have a difficult time expressing how much I enjoy these videos. That said it is meant in a strictly non-stocker way... Obviously...

  • @Lordp00m
    @Lordp00m 5 лет назад

    Question: Do you only have one vertexshader and one fragment shader for all your mesh? Let say you have a 3D mesh shader. Do you need to make a new one for a 2D mesh? What about if you have a shader which handles lighting. Do you use the same shader to handle objects which you don't want to be lighted or do you create new shaders for all the different cases?

  • @aaronh248
    @aaronh248 4 года назад

    One thing I wonder about current GPUs is why they are still reliant on the CPU performing draw calls. Wouldn't it be more efficient to be able to tell the GPU directly via some sort of programmable function when to draw stuff? With how busy the CPU already is it seems like alot of work added to the CPU to constantly have to perform draw calls to make the GPU do its job.
    Maybe I'm just too much of a newb but it just sounds like alot of work for the CPU that could just be done by a processor within the GPU itself

  • @Chris-cs7nv
    @Chris-cs7nv Год назад

    How come that's happening:
    Yes, but now shouldn't this fail because the buffer is unbound? Did I really hallucinate that in a previous video it was said that if we unbind the buffer then opengl will not draw anything?

  • @cptray-steam
    @cptray-steam 3 года назад

    I feel like I'm learning so much!

  • @gimmemoreborisbrejcha9794
    @gimmemoreborisbrejcha9794 5 лет назад

    You are doing something "good" for the society. Appreciate it.

  • @NikhilKumar-ry7eg
    @NikhilKumar-ry7eg 4 года назад

    where is your say thanks link?

  • @sleep3017
    @sleep3017 4 года назад +1

    I always watch through all the ads so he can get his money

  • @phanisrikar7191
    @phanisrikar7191 4 года назад

    So I was reading this on learnopenLG and did try it that I cannot render the vertex budder object unless I have it binded to an vertex array object, idk if this is specific to a Mac or not. I'd really like to know if it is necessary to use a VAO before using any VBO to render anything at all??? Ahhh.... save me from this confusion.

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

    In the plain old architecture we used to provide even the coordinates of vertex in the draw call, now it has been replaced by buffer and shaders. Why???

  • @shatakshimishra4842
    @shatakshimishra4842 4 года назад

    Hii Cherno.. I need to render camera captured images using fragment shaders, the camera inputs and parameters come from a structure in another file, I need to pass them to my shader class and render them. There are 4 cameras. How do I do it please help me. I have seen many tutorials where they are using some functions to load the image, where we specify file path, but that is only for 1 file. I have 4 camera data's. I'm finding it difficult. Can you please help me?

  • @ianmoseley9910
    @ianmoseley9910 4 года назад

    So, at the simplest level, the vertex buffer details where vertices are in relation to each other, the vertex shaders determine where they are in relation to the screen?

    • @generichuman_
      @generichuman_ 3 года назад

      If position is the only data in the buffer, then yes, you could think of them as coordinates in local space. The shader then has transformations to change that to world space, screen space, etc.

  • @tuxmusicman
    @tuxmusicman 6 лет назад +1

    Sooooooooo much information!

  • @remak6342
    @remak6342 4 года назад

    great video again

  • @lllll69
    @lllll69 4 года назад

    i love cherno video thanks

  • @BlackJar72
    @BlackJar72 7 лет назад

    Other tutorials just assume this will work -- so that I took it that the default shader was a universal hold-over from the pre-shader era.

  • @AkshayAradhya
    @AkshayAradhya 6 лет назад

    Love your videos

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

    on NV works too

  • @Meddten
    @Meddten 4 года назад

    Why is the Triangle Rendering? The buffer ist not bound because of the glBindBuffer(GL_ARRAY_BUFFER, 0);

  • @gordonlim2322
    @gordonlim2322 4 года назад +1

    program that runs on GPU

  • @0xfrijolito
    @0xfrijolito 3 года назад

    Whats shaders i need to mine with my gpu?

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

    yo i am eating a cadbury egg while watchin this. this is awesome

  • @jakubhorak636
    @jakubhorak636 5 лет назад

    How is it possible that it worked in the beginning although we have bound buffer 0 before start of the while loop? I thought (and I think he has even said it in the end of the episode before the previous episode) that it will not work like this because we have to bind the right buffer in order... I am confused, could you please explain it to me?

    • @TheKingoftheriff
      @TheKingoftheriff 5 лет назад

      think of binding the buffer as a rotating bridge. Once the data has been sent to GL_ARRAY_BUFFER(&buffername), the bridge to the &buffername is no longer needed and can be reset or set to another buffer. Setting it to 0 is one way to prevent accidental data transfer to the wrong place.

    • @jakubhorak636
      @jakubhorak636 5 лет назад

      @@TheKingoftheriff thanks for answer, but how does then opengl know which buffer to use if I uploaded more vertex buffers. I thought it always uses the bound vertex buffer.

    • @TheKingoftheriff
      @TheKingoftheriff 5 лет назад

      @@jakubhorak636 AFAIK, the draw function that outputs all the poly work, will put all the saved buffers on the screen. You only need &buffername while sending data. Currently all of it is stored in GL_ARRAY_BUFFER, which is like an area for all the buffers that belong to that type.

  • @johnrussell6971
    @johnrussell6971 4 года назад

    What's the language of a shader?

  • @clodgozon3968
    @clodgozon3968 5 лет назад

    I drew a quad on a screen without help... It means I understood your lessons well.

    • @vnaqr
      @vnaqr 5 лет назад

      ARE YOU SURE??? IT'S ACTUALLY NOT A TRIANGLE?

  • @aqua123670
    @aqua123670 6 лет назад

    Greatt, thanks. You should write the opengl documentation

  • @hasbroboy87
    @hasbroboy87 7 лет назад

    Is the fragment shader run for each pixel of the display, or for each pixel of a triangle/shape? As in, if I have a drawing area that is 1280x720 and 3 triangles all in the same exact spot that cover, say, 50 pixels worth of the display, will the fragment shader be called 921,600 times (1280 times 720), 150 times (because 3 triangles cover 50 pixels each), or just 50 times (because all 3 affect the same pixels)?

    • @creature_of_fur
      @creature_of_fur 7 лет назад +3

      150 times.
      EXCEPT if you have depth buffer enabled. In which case GPU may consider not to call fragment shader for the pixels which have their z-value less than in a buffer.
      What is z-buffer? Its a thing that OpenGL uses to prevent things behind other things to get drawn. (great explanation)

  • @creature_of_fur
    @creature_of_fur 7 лет назад

    I had a problem with OpenGL ES1.1 on my tablet. My app wouldn't draw anything.
    Which lets me to believe that compiling shaders is mandatory.
    But the shader functions arent in the opengles1.1 header!
    And my question is, how do I deal with this situation?
    I was trying to solve this program for around 2 yeras now
    (not really trying all that time, because I switched to developing the PC game)
    Any help?

    • @scewps
      @scewps 7 лет назад +1

      OpenGL 1.1 and OpenGL ES 1.1 don't support shaders. You need to use at least GL ES 2.0 I think

  • @micro479
    @micro479 7 лет назад

    what's intro music name?

  • @czirjakmarton
    @czirjakmarton 5 лет назад

    Is this projekt avaible on github?

  • @eliasf.fyksen5838
    @eliasf.fyksen5838 3 года назад

    Watching that "glBindBuffer(GL_ARRAY_BUFFER, 0);" line is just killing me

    • @larko2933
      @larko2933 3 года назад

      Consider that line as a function to unbind the buffer. You are just telling OpenGL that your bound buffer is 0, so nothing

  • @milo20060
    @milo20060 2 года назад +1

    Ahaa.
    So basically vertex shader = the outline
    fragment shader = what comes in.

  • @blackswordsman6094
    @blackswordsman6094 4 года назад

    Mine doesn't have a default shader then......

  • @billy.n2813
    @billy.n2813 4 года назад

    Thank you.

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

    everytime i hear the word "shader" i instantly think of minecraft

  • @Jkauppa
    @Jkauppa 2 года назад

    write the vertical camera plane-ray intersection raster shader

    • @Jkauppa
      @Jkauppa 2 года назад

      yes per primitive, triangle (strip)

    • @Jkauppa
      @Jkauppa 2 года назад

      you can easily limit which plane-rays hit the triangle, left-right bounds

    • @Jkauppa
      @Jkauppa 2 года назад

      keep the z-buffer

    • @Jkauppa
      @Jkauppa 2 года назад

      why you are kidding

    • @Jkauppa
      @Jkauppa 2 года назад

      make the plane ray-limiting in the vertex shader, it can be zero intersections (primitive skip)

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

    Yea the naming of shading is bit confusing

  • @tameryldrgan552
    @tameryldrgan552 4 года назад

    I wrote exactly same code but it crashed.

  • @gamereplayhq
    @gamereplayhq 6 лет назад +1

    The quality is at par with the course I'm taking at edx (Computer Graphics), in fact way better as compared to that course. B-)

  • @mysticfakir2029
    @mysticfakir2029 4 года назад

    The fragment shader only does one thing, decide what colour each pixel will be. That's all it does... That one simple task........

  • @koenderbb5191
    @koenderbb5191 4 года назад

    3:09 you forgot to cut there, man

  • @RT-.
    @RT-. 4 года назад

    Is Vulkan faster than OpenGL?

  • @alexdomenici8503
    @alexdomenici8503 6 лет назад

    You have a gift for explaining things. Keep up the excellent work, we're tuned in :D

  • @saranh1687
    @saranh1687 3 года назад

    cherno reminds me of that city,chernobil

  • @sbn0671
    @sbn0671 6 лет назад

    Your'e the best!