Hey Cherno. I'm a bit late to the party, but I just wanted to express my undying gratitude for the tremendous amount of love and effort you put into your work. I've always been fascinated by the idea of creating a game engine, but it never seemed like a realistic goal for me. You alone have turned dreams into realities, for me and many others. Cheers, Cherno! And thank you for all that you do. Looking forward to progressing further in this series and plan to become a Patreon partner soon.
From my experience when you need multiple/crossplatform implementation for some classes like renderer it is better to use pImpl idiom instead of virtual classes to nullify all overheads on function calls every frame. Also if you need virtualization always set final keyword on implementation class to allow compiler to optimize some things.
@@giancedrick507 in case of different platform versions you don't need virtualization at all, just different cpp files for each platform with same methods, we just need one level of "virtualization" and don't need to re-override those methods
Why do we define RendererAPI::s_API inside RendererAPI class instead of OpenGLRendererAPI? Or we can add Create method like in other renderer classes to set it to different api?
At first, I thought that RenderCommand is a redundant wrapper of RendererAPI. It took me a long time to understand why RenderCommand exists. It's another way to judge which underlying graphics API(OpenGL or D3D) should be used, a little different from the abstraction of classes like VertexBuffer. It avoids the switch statement in every specific rendering function, like DrawIndexed.
That link to another class so crazy that my gcc couldn't compiled it ._. Look like api that worked for me gonna be looked so different ...so that I mix all into Renderer only and it's look very clean
After this series is done can you please do a series on Data Structures and Algorithms using C++?? There is no good series for that as of now. Would be appreciated!
First time commenter, long time follower here! Thanks for this awesome series. When it comes time for textures, would you be able to have a tutorial of video playback on poly surface? I can barely find any information on this topic. If not in this series, then at some point? Thanks!
Hey Cherno, for some reason my mouse button input code for Imgui in our current build is not working properly. It keeps giving me an unhandled exception every time I try and click the ImGui UI. I was wondering if this was due to an update in your ImGui repo or something I did wrong?
Hello, Yan! I watched almost all your videos and you helped me to became a C++ developer at the first place. But in 29:53 you keep saying "Its a pointer to a class with no members, so its a 1 byte memory leak". I'm pretty sure you aware, then you create a vtable ( declaring at least one virtual function ), it need to be stored somewhere. Inside a class. So, sizeof an interface with bunch of virtual functions equals size of a pointer to that vtable, 8 bytes.
yeah the pointer is 8 bytes, but the memory leak isnt the size of the pointer. the memory leak is how much memory is allocated but not freed on the heap, which for a class with no members is 1 byte. The variable itself (the 8 byte pointer) isn't a memory leak
@@pooria_garrett3020 I know, but I have a multithreading hype now and there is no point to me to buy a repo that has not got it. That is why I am asking.
ChatGPT3.5 Generated content: - The transcript is part of a game engine series tutorial by China. - The video focuses on the critical part of the rendering architecture, the draw call, which is the command to actually draw something on the screen. - To render a 3D world, there are a few components needed, including a vertex array, a shader, information about the environment, and the material of the object to be rendered. - The tutorial covers how to submit geometry, meshes, and materials to render a scene and how to optimize it. - The video also covers API and clear color concepts in game development.
I want that extra video. The documentation and understanding is really important
Extra video? Yes please!
Yes please
Agreed. To understand these concepts fully and to be able to apply them in our own innovative ways an explanation/diagram video would be very useful!
Has he ever made that video?
An extra video on the renderer architecture would be great!
Would love to see that extra video. Understanding the concept and design is just as important as seeing the code itself.
Nice video! Of course, we are interested in extra one
Hey Cherno. I'm a bit late to the party, but I just wanted to express my undying gratitude for the tremendous amount of love and effort you put into your work. I've always been fascinated by the idea of creating a game engine, but it never seemed like a realistic goal for me. You alone have turned dreams into realities, for me and many others.
Cheers, Cherno! And thank you for all that you do. Looking forward to progressing further in this series and plan to become a Patreon partner soon.
Hey Cherno, I believe any function defined inside the class body is inlined by default so there's no need to mark it as such.
did you say heavy optimizations? oooh that excites me
I would love to see the extra video about the renderer architecture!
From my experience when you need multiple/crossplatform implementation for some classes like renderer it is better to use pImpl idiom instead of virtual classes to nullify all overheads on function calls every frame. Also if you need virtualization always set final keyword on implementation class to allow compiler to optimize some things.
how do you implement virtualization with the pimpl idiom?
@@giancedrick507 in case of different platform versions you don't need virtualization at all, just different cpp files for each platform with same methods, we just need one level of "virtualization" and don't need to re-override those methods
@@xxdeadmonkxx Thanks! thought of the exact same thing, I just haven't come around in verifying yet.
That might be a code idea. I think most of the people saw the code and can now see the reason behind your architecture. This will clear a lot =D
Your a good teacher
Why do we define RendererAPI::s_API inside RendererAPI class instead of OpenGLRendererAPI? Or we can add Create method like in other renderer classes to set it to different api?
At first, I thought that RenderCommand is a redundant wrapper of RendererAPI. It took me a long time to understand why RenderCommand exists. It's another way to judge which underlying graphics API(OpenGL or D3D) should be used, a little different from the abstraction of classes like VertexBuffer. It avoids the switch statement in every specific rendering function, like DrawIndexed.
thanks
"heavily optimize it"
mhmm yesssss
When you will reach at animation and texture, i hope that you will show us how to make an animation and how to put a texture to a 3D model
Literally no one in the world could count how many times Yan said right in the first 10 minutes
you forgot to put last video in playlist
Please the video about the rendering architecture. THANKS ♥️
That link to another class so crazy that my gcc couldn't compiled it ._.
Look like api that worked for me gonna be looked so different
...so that I mix all into Renderer only and it's look very clean
For some reason the ImGui rendering is messed up now if you drag around the window. Not sure what I did wrong
This seems to be caused by clearing the depth buffer. If you only clear the color buffer it work works fine
After this series is done can you please do a series on Data Structures and Algorithms using C++?? There is no good series for that as of now. Would be appreciated!
First time commenter, long time follower here! Thanks for this awesome series. When it comes time for textures, would you be able to have a tutorial of video playback on poly surface? I can barely find any information on this topic. If not in this series, then at some point? Thanks!
I get why you use the m_ prefix for member vars, but why s_
s is for static
@@1Infinitive1 ooh
Midweek supplement pleeaase =)))
Hey Cherno, for some reason my mouse button input code for Imgui in our current build is not working properly. It keeps giving me an unhandled exception every time I try and click the ImGui UI. I was wondering if this was due to an update in your ImGui repo or something I did wrong?
I have a very similar issue which happens mostly when I use the mouse scroll. Have you found the problem?
Hello, Yan! I watched almost all your videos and you helped me to became a C++ developer at the first place. But in 29:53 you keep saying "Its a pointer to a class with no members, so its a 1 byte memory leak". I'm pretty sure you aware, then you create a vtable ( declaring at least one virtual function ), it need to be stored somewhere. Inside a class. So, sizeof an interface with bunch of virtual functions equals size of a pointer to that vtable, 8 bytes.
yeah the pointer is 8 bytes, but the memory leak isnt the size of the pointer. the memory leak is how much memory is allocated but not freed on the heap, which for a class with no members is 1 byte. The variable itself (the 8 byte pointer) isn't a memory leak
Is multithreading done in the paid version of the engine? I hugely consider buying it.
there's no paid version
@@pooria_garrett3020 Being a patreon is not for free :V
@@sc5shout As far as I know It's the same series, it's just that the videos are released one week earlier for the patreons
@@sc5shout It's not like there'll be some code remaining behind a paywall forever!
@@pooria_garrett3020 I know, but I have a multithreading hype now and there is no point to me to buy a repo that has not got it. That is why I am asking.
Is it just me or the RendererCommand class is redundant here? I might need to watch a couple of episodes more for it to make sense.
vulkan
pls. Make a new vdo about linked list c++
Problem is that none of this applies to nextgen rendering when using API like vulkan, directx 12 or metal
We need assembly language tutorial please 😭💔
whut
ChatGPT3.5 Generated content:
- The transcript is part of a game engine series tutorial by China.
- The video focuses on the critical part of the rendering architecture, the draw call, which is the command to actually draw something on the screen.
- To render a 3D world, there are a few components needed, including a vertex array, a shader, information about the environment, and the material of the object to be rendered.
- The tutorial covers how to submit geometry, meshes, and materials to render a scene and how to optimize it.
- The video also covers API and clear color concepts in game development.
An extra video on the renderer architecture would be great!