CS184 2020 Project Overhaul/Improvement Plan

Problems with current code

Reliance on non-portable APIs / Components

  1. UNIX file operations (APIs)
  2. CMake files are not portable

Flaws in CGL vector library

  1. Some operators are not correct, for example vector addition
  2. Not utilizing SIMD apperantly (one of the main performance problems)
  3. Seperated vector types and color types.

Bad user interface

  1. Kind of hard to remember all the keyboard controls
  2. No GUI libraries available in CGL
  3. In project 5, Qt5 is used as a GUI library but it's a bit heavy.

Non-standard file formats

  1. Non-standard *.SVG format
  2. Non-standard *.DAE format

Probable solutions to the problems

Reliance on non-portable APIs / Components:

  1. Switch to C++17 with more complement standard libraries. Replace dirent with std::filesystem.
  2. Rewrite the CMake files / modify the Windows part.

Flaws in CGL vector library

  1. Use open-source, well established libraries like glm
  2. Modifying the CGL vector library may work, but it's not standard and not likely to work better than glm
  3. Color types should be just written as normal vector types.

Bad user interface

  1. Use ImGUI to create graphics user interfaces for the projects.
  2. Design a new interface

Non-standard file formats

  1. The non-standard *.SVG format is needed for textri as texture mapping is an very important course material.
  2. The *.DAE format does not natively support definition of light sources, etc. The loader currently is also not very robust that the output from Blender may not be loaded correctly. Maybe switch to GLTF or support the Blender tags for light source and materials.

Plan for overhauling

Overhauling all the projects is not a trivial task and is not likely to be complete reliably before the projects are released. This could be a multi-semester effort, but still very important and needed work. As the libraries and APIs get deprecated, we will need newer skeleton code.

As these projects are educational, we want them to be consistent between each other and also useful for students. This effort could be carried out in stages. The vector libraries and Unix file libraries can be replaced first for this semester, and a new build system could be brought out for this semester. The majority of the code will not be modified and this is a stepping stone for further, deeper changes in the skeleton code.

Overhauled / rewritten project code can be developed at the same time or after the existing code is ported to new libraries. These code can be thoughrouly tested and can be used in the next iteration of this course. (Spring 2021 maybe?)