This repo aims to serve as a tutorial for Minecraft 1.12.2 rendering, but you can also expect general OpenGL, LWJGL, engine design ideas to be explained.
Note: You are free to copy any examples from this repo, but follow MIT license still.
You are now expected to be pretty experienced with HUD/UI rendering after "Intro To GL States", "Rotation", "Alpha & Blending", "Stencil".
Time to test/experiment with some HUD/UI rendering thingy!
Continue reading when you are confident with UI drawing and even fancy animations.
From now on, you can expect deeper and more "serious" GL contents.
The major issue with the fixed-func pipeline is not only how it's "fixed-func'd" but also how the pipeline is
non-scalable and fragile. A better alternative is the modern programmable pipeline (generally considered as GL30+),
where streamlining data and rendering is made possible by VAO, Shader, etc.
A programmable pipeline is not essentially needed because it's faster. Don't be lured by micro-optimizations. We all care more about the structural wise modularity and scalability.
- Drawing Tris Using Vertices and Indices Via The Modern Pipeline
- Shader Loading & Shader Program
- VAO & Vertex Format
- Common Buffer Objects
- Typical Shader Setup
Here are some major Concerns
Key point: Now you've understood that OpenGL isn't merely about the correct command combinations; "Nothing" is necessarily guaranteed by CPU side method calls, and things work not necessarily because you've done the correct thing.
They are read-after-write and write-after-read hazards
You are now expected to be OK with shaders, draw calls, execution model, etc. It's recommended to design and implement your own pipeline that streamlines something with the techniques you learned.
It's recommended to set up an OpenGL test environment first so you'll be able to verify
any kinds of ideas, edge cases, etc.
JUnit OpenGL Extension
Minecraft 1.12.2 runs on the compat profile and Nsight works with the compat profile. You'll be able to
use RenderDoc only if an emulation (emulate fixed-func pipeline with modern programmable pipeline) layer is done,
but still... emulation emulates.