Skip to main content

History: SoC2007 Emulation

Source of version: 3 (current)

Copy to clipboard
            !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