Summer of Code 2007: Emulating Lesser Hardware Capabilities
Student: Juozas Gaigalas (juozasg)
Mentor: Daniel Wickert (haffax)
Location: CVS HEAD - formerly CVS 'soc07-emulation' branch
Status: Merged into Shoggoth
Objective
Add an easy to use way for developers to test what their OGRE applications would look like on a machine with a less advanced GPU.
Roughly, this can be split into two main tasks:
- Loading and applying GPU capabilities definitions
- Building a database of GPUs
The Plan
See http://www.ogre3d.org/phpBB2/viewtopic.php?t=30130
Stage 0: Getting Familiar with OGRE
- Build, run and understand the current unit and PlayPen tests.
- Write a toy script loader.
- Precisely how are D3D RenderSystem and OpenGL RenderSystem are different in their init methods (initCapabilities vs. initGL)? Write a short report on this.
- Research runtime reloading of materials. How hard is it? How hard would it be to move all knowledge about GPU capabilities into the RenderSystem?
- Make a list of classes to modify, add and delete. (note: his will not include the anything that's a part of rcapsdump tool)
- Describe every test to be written. (note: this will not include the rcapsdump tool)
Stage 1: RenderSystemCapabilities Changes
- Add a shader profile list to RenderSystemCapabilities
- Add isShaderSupported and addShaderProfile methods
- Update DirectX and OpenGL init methods to use these methods
- Update all shader managers to use these methods
Deliverables
- DONE No shader syntax information in any high level and low level shader manager
- DONE A unit test for addShaderProfile and isShaderSupported methods
Stage 2: RenderSystem refactoring
- Refactor the initGL method into createCapabilities and intializeWithCapabilities
- Refactor DirecX initCapabilities into createCapabilities and initializeWithCapabilities
- Generally cleanup of both init sequences.
- Add a useCustomCapabilities method to Ogre::Root
Deliverables
- [DONE] initGL removed from GLRenderSystem
- [DONE] initCapabilities refactored in DirectX RenderSystem
- [DONE] Two unit tests for initializeWithCapabilities methods in each render system
Stage 3: Serializing RenderSystemCapabilities
- Create a RenderSystemCapabilitiesSerializer that can read (and write) RenderSystemCapabilities
- Create the RenderSystemCapabilitiesManager class
- Generally cleanup of both init sequences.
- Add a useCustomCapabilities method to Ogre::Root
Deliverables
- [DONE] RenderSystemCapabilitiesSerializer reading .rendercaps files
- [DONE] RenderSystemCapabilitiesSerializer writing .rendercaps files
- [DONE] Tests for reading RSC from file
- [DONE] A test that initializes Ogre from the loaded RSC
- [DONE] A test for writing RSCs to file and reading them back
Stage 4: Building a database of RenderSystemCapabilities
- Add versioning information to RSC class
- Create a tool for dumping RSCs to file - rcapsdump
- Create a web page with a form for uploading .rendercaps files
Deliverables
- [DONE] DriverVersion fields for D3D9 and GL included in the RenderSystemCapabilities class
- rcapsdump tool completed for both linux and windows