This adds wrapper classes that make it easier to use GPU objects in C++.
Motivations:
- Easier handling of GPU objects.
- EEVEE rewrite already makes use of similar wrappers.
- There is the ongoing effort to use more C++ in the codebase and lans to port more engines to it.
- The shader code refactor will make use of many UBOs with shared struct declaration. This helps managing them.
- Safer handling of TextureFromPool which can't be bound as normal texture (only texture ref) and can be better tracked in the future.
Considerations:
- I chose the blender::draw namespace because blender::gpu already has private classes (i.e: gpu::Texture).
- Theses are wrappers that manage a GPU object internally. They might be confused with actual Texture. However, the name TextureWrapper is a bit too much verbose in my opinion. I'm open to suggestion about better name.