Render manager
The rendermanager is some kind of batching mechanism to optimize the opengl calls. This mainly means to reduce the amount of texture and shader switches for now.
Everything that should be rendered is submitted to the render manager. It orders the jobs and finally draws them in the optimized, but correct order.
The remaining features are tracked in the TODO-list below.
I have started working on this here: https://github.com/jamesmintram/openage/tree/graphics_renderer
dis is free software: https://github.com/google/ion, README transcription follows:
Ion is a portable suite of libraries and tools for building client applications, especially graphical ones. It is small, fast, and robust, and is cross-platform across many platforms and devices, including desktops, mobile devices, browsers, and other embedded platforms. Why Use Ion?
- Small: < 500k binary size on mobile platforms, often much smaller
- Powerful: Tools for faster productivity when developing applications
- Robust, portable application infrastructure aids in:
- Object lifetime management
- Memory allocation
- Application start-up and static instances
- Threading
- Run-time setting editing
- Automatic performance instrumentation
- More!
- Tools for graphics:
- Analyze graphics scenes to find performance bottleneck
- Trace all OpenGL calls and examine their arguments
- Use scene resources in multiple contexts, automatically
- Run-time graphics state introspection
- Run-time shader editing: change your shaders and immediately see the results
- Fast graphics: Minimal overhead between your application and OpenGL / ES
- Tested: Well-tested and facilitates testing your application
- ~100% test coverage
- Black- and white-box tested, unit tests and integration tests
- Mock implementation of OpenGL API allows direct renderer unit tests and validation
- Integrated Remote: extensible API allows changing arbitrary application settings on-the-fly for faster development, testing, and debugging
- Cross-platform:
- Desktop: Linux, Mac OSX, Windows (OpenGL)
- Handheld: Android (ARM, x86 MIPS), iOS (ARM and x86), and their 64-bit variants
- Browser: Emscripten/asm.js, NaCl / pNaCl
- Cross-functional
- Used by many teams across Google, running on billions of devices through multiple Google products
NOTE: This is not an official Google product.
https://github.com/google/ion/tree/master/third_party hrrg
My attempt (will continue someday) is #287, but I'm currently working on nyan. You can continue my branch and submit pulls there if anyone likes.
See #850
Here is a list of things to be done for the new renderer implementation:
- [x] Abstraction of render backend
- [x] OpenGL 3.3 or higher
- [x] Use 4.x when available (optional)
- [ ] Support ancient 2.x legacy (optional)
- [ ] Vulkan (optional, #242)
- [x] OpenGL 3.3 or higher
- [ ] Render pipeline abstraction
- [x] Textures
- [x] Shaders
- [x] Uniforms
- [ ] Uniform buffers
- [x] Vertex attributes
- [x] Geometries
- [x] Quad primitives
- [ ] Circles
- [ ] Smooth paths
- [ ] Mesh importing (optional)
- [x] Render targets
- [x] Framebuffers
- [ ] Renderbuffers (optional)
- [ ] Functionality
- [x] Screenshot support
- [ ] PBO optimization for texture downloading (optional)
- [x] Pixel-perfect unit hitbox for unit selection and damage areas (#368, #671 )
- [ ] Outline rendering
- [ ] Investigate why tree textures render incorrectly (#359, maybe this?)
- [ ] Fix #374
- [x] Screenshot support
- [ ] Terrain rendering
- [x] Merge terrain texture into a single bitmap
- [ ] Cache blending results (#154, #158)
- [ ] Do as much as possible in shaders (#149)
- [x] Clip tiles properly (#141)
- [ ] Optimizations
- [ ] Occlusion queries
- [ ] Minimize OpenGL state changes (batch by shader, then by buffer)
- [x] Texture binpacking into atlas
- [x] Smooth zooming
- [x] Integration
- [x] Rewrite all of drawing functionality to be expressed in terms of
Renderer- [x] Get rid of GL code everywhere except the rendering backend and the GUI
- [x] Write a
GameRendererthat takes evaluations of curves at the current instant as input
- [x] GUI integration
- [x] TBD (#624)
- [x] Rewrite all of drawing functionality to be expressed in terms of
we have added various components of a render manager meanwhile :)