I'm still on the first videos but I wanted to say thank you. There's almost nothing about OpenGL in my language, it's difficult to learn in another one but you speak clearly and slowly so I can understand you. Keep it up!
damn, the way you explained kernels made me understand more clearly. I've been working on object outlining techniques in the past week and I'm trying different techniques.
Hey Victor when I load the normal map with post processing FBO on, it just draws the normal texture on screen instead of applying it to the model, when I disable the post FBO it works just fine. The code is identical to yours. Do you know why is that happening?
Hey Victor, thanks so much for this informative video. I was wondering if rendering to a framebuffer maintains anti-aliasing? If not, is there a more straightforward way to enable anti-aliasing than having to render to a multi-sampled texture?
It really depends on what kind of anti-aliasing you want to do. I have a tutorial on AA you can watch in which I think I show MSAA if I remember correctly. Rendering to a framebuffer does not maintain AA afaik. But it opens the possibility for post-processing cheap AA such as FXAA (NVIDIA published a paper on it, u can take a look at that). I hope that sort of answers your question! :)
Hi, hope you still have time to answer questions! I was just wondering when we create our quadVAO and quadFBOs we are doing EnableVertexAttribArray(0) and EnableVertexAttribArray(1), which means that in the vertex buffer for our framebuffer shaders the position of the first triangle is stored in position 0 and then the position of the second triangle is stored in position 1 of the vertex buffer (is that a correct interpretation?) I was just a bit confused since in the frambuffer.vert we then pick the positions from layout location 0 and then the texture coordinates from layout location 1, isn't that the positioning of the two different triangles covering the screen and not the texture coordinate? I am having some trouble with my code so trying to debug it and I thought this could have to do with it! :)
I suggest rewatching tutorial 2 "triangle" since you seem to misunderstand how VAOs and VBOs work ;) Basically position 0 and 1 in this cade refer to the position of an attribute of a vertex within itself. A vertex can have multiple attributes such as a position, a texture coordinate, a color, etc. Position 0 refers to the position of the vertex in this case, and position 1 to the texture coordinate (if I remember correctly) Hope that helps :d
Hello Victor! Hope you are well. I want to render my framebuffer onto an imgui window but I can't get it to work. I'm trying to pass texture reference to the ImTexId but I get a black image... What could be wrong? Also are you planning on an imgui tutorial in future?
I do have a tutorial on the basics ot ImGUI! ;) I never tried displaying a framebuffer in an ImGUI window so not sure what is going wrong :/ good luck tho!
I'm jumping into this series on this video as I was hoping to add post-processing effects to my game. Butafter going through it, I'm having an issue with the GL_DEPTH_TEST. For some reason, reactivating it in my render loop does not work properly. Once I deactivate, it does not reactivate. Anyone got any suggestions on what this might be? Either way, this seems like a great tutorial series, and I'm looking forward to diving in further!
Really wish you had this same tutorial using DSA. I'm trying to write a DSA openGL application right now and it's like pulling teeth - every tutorial, even ones made in the last year or two are using pre-DSA patterns. DSA patterns are so much closer to how all the other mainstream graphics APIs work, I'd much rather be using DSA :/
-When resizing the window, should I recreate the framebuffer?- -Since I've noticed that if I change the window size, it looks weird.- For anyone else who doesn't want a static size, you can do for example GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgb, ClientSize.X, ClientSize.Y, 0, PixelFormat.Rgb, PixelType.UnsignedByte, IntPtr.Zero); GL.BindRenderbuffer(RenderbufferTarget.Renderbuffer, _postprocessRenderbuffer); GL.RenderbufferStorage(RenderbufferTarget.Renderbuffer, RenderbufferStorage.Depth24Stencil8, ClientSize.X, ClientSize.Y); If you encounter Framebuffer Incomplete when in fullscreen and alt + tabbing, skip rendering all together since that could mean that the screen size is 0.
Not sure if you still reply on this, I'm having an issue where one of the base color images from a model is shown as a image on the screen and I can still apply the effects to it so it's working, but why is it showing a flat image now? I have also copied and paste most of the code.
I still reply haha Not sure I understand your question. What you were seeing before was also a flat image... it's just that now we make a framebuffer ourselves and slap it on a rectangle that covers the whole screen (make sure to not apply matrices to it tho, unlike all the other geometry in your scene). I hope that answers your question...
@@VictorGordan Ok sorry for being unclear. I started to comment it out to see what is happening. So when I bind the framebuffer it goes from 3D to a black screen, and when I do glDrawArrays it goes from the black screen to the baseColor of a model in my scene.