TODO.txt 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. ----------------------- CAMELOT 2D / GUI -----------------------------------------------------------
  2. Editor localization should be different from in-game one.
  3. - Because what happens when user decides to set "File" localized string to something else? It will also modify the editor string.
  4. - HString probably needs to accept an optional parameter of which StringTable to use
  5. Optimization notes:
  6. - submitToCoreThread calls are EXTREMELY slow. In 10-50ms range.
  7. A lot of stuff is still using GSyncedMainCA but it should be using gMainCA - Find and replace
  8. TODO: Viewport can be modified from the sim thread, but is used on the core thread without any syncronization mechanisms. Maybe add a method that returns VIEWPORT_DATA, and have that used on the core thread.
  9. I still re-create GUIWidget mesh every frame instead of just updating it.
  10. I call waitUntilLoaded too many times. Sometimes 5-6 times in a single function. Each of those calls will be extremely slow.
  11. GUIWidget::updateMeshes leaks. If I leave the game running I can see memory continously going up
  12. - BansheeApplication should probably derive from Camlelot application. Right now user needs to know the difference between
  13. gApplication and gBansheeApp, which is non-intuitive (e.g. retrieving a window can be done on gApplication, but running main loop can happen on both
  14. IMMEDIATE:
  15. - Update debug camera so it uses callbacks
  16. - I have disabled linear filtering because it doesn't look good on scale9grid textures. (Add another material so it works with stretched textures?)
  17. - Enable alpha test so I don't render completely transparent pixels.
  18. - What happens when I don't set a texture for a state of a GUI element. Use a dummy white texture probably?
  19. - Make sure GUI system uses a dummy texture if one isn't available
  20. - SpriteTexture keeps a static reference to DUmmyTexture which I need to release before shutdown
  21. - Hover colors of the scroll bar are wrong
  22. TextBox needed elements:
  23. - Get DebugCamera to ignore input if GUI has already processed it
  24. - LATER
  25. - TAB between input elements
  26. - Remove updateText calls from updateRenderElementsInternal and instead call it whenever offsets change
  27. - I might consider not rendering caret from within input sprite to avoid redrawing it while, and draw it directly from GUIManager
  28. -----------
  29. - My test model is rendering back faces. I need to flip them.
  30. - Although more than likely I am loading the model incorrectly since it works in Unity?
  31. - I probably want to determine front faces based on normals
  32. Immediate TODO:
  33. - A way to update mesh buffers without recreating vertex/index buffers (Setting data currently does exactly that)
  34. ----------------------------------------------------------------------------------------------
  35. Other:
  36. - Move Debug to CamelotCore and add SetFillMode
  37. -----------------------BACKLOG TODO---------------------------------------------------------------
  38. ----------------------------------------------------------------------------------------------
  39. Medium priority:
  40. - Mesh loading:
  41. - Example Freefall mesh has one index per vertex, and there are 17k+ vertices. I think I need a post-process step that optimizes them.
  42. - Imported FBX meshes are too big
  43. - Ogre performed special DDS loading. I removed that. I'm not sure if I'll need to re-add it?
  44. - My log is not thread safe yet it is being called from multiple threads.
  45. - RTTI:
  46. When defining RTTIType like so:
  47. RTTIType<D3D9HLSLProgram, HighLevelGpuProgram, D3D9HLSLProgramRTTI>
  48. I need to make sure that HighLevelGpuProgram class has valid RTTI type as well. Otherwise the inheritance hierarchy will not be correct. Right now this isn't checked anywhere.
  49. - Make sure that I am able to blit contents from render textures on all render systems
  50. - Command buffer:
  51. - Make CommandQueue not use mutexes and use atomics instead??
  52. - When importing a resource, and registering it with Resources I don't think it properly gets added to the loaded resources array? For some reason shaders get created twice.
  53. - GUIManager draw call merging:
  54. I merge two GUI elements if they don't overlap each other, however I don't consider if there is some world geometry between them. Another reason to move batching out of GUIManager.
  55. - Update Mesh DX11 buffers so they get initialized with data immediately upon construction as an optimization and see if OpenGL has something similar
  56. ----------------------------------------------------------------------------------------------
  57. Low priority TODO
  58. - Mesh loading:
  59. - Sub-meshes aren't being transformed by world matrices of their nodes
  60. - Remove template from RTTIType and move it to IReflectable? This way i can hopefully move GetRTTITypeStatic and GetRTTIType to IReflectable so I don't
  61. need to manually implement those for every method.
  62. - Viewport needs to be updated when I call RenderTarget::setFullscreen/finishSwitchingFullscreen/updateWindowRect/windowMovedOrResized. Currently it's not
  63. - D3D9Texture::createTextureResources is commented out at the moment. It gets called on device reset, and at that point I should reload texture resources.
  64. - I should probably keep all resources by DX managed. OpenGL apparently keeps a mirror of all its resources anyway.
  65. - Device reset and resource re-loading in general
  66. - Fix up WorkQueue as it doesn't lock when initializing, to make sure threads are actually started before returning
  67. - CPU reading or writing to a render texture in OpenGL is not supported. (CmGLHardwarePixelBuffer::upload/download).
  68. - When saving a resource, make sure resource is properly loaded before saving
  69. - Add doc to Resources::save that says it will block until render thread updates the resource
  70. - Add documentation that tells the user that reading a resource non-async will block the thread and execute all queued render commands first
  71. - Remove Response handlers from Resources
  72. - Cg doesn't work. Either remove it or get it to work
  73. - System is not yet ready for multiple rendering contexts
  74. - When serializing/deserializing derived classes, deserialization is done from most derived to base, while it should probably be done the other way around.
  75. - Because GLSL introspection API is built around basic types I don't support structs or arrays of objects:
  76. - I can't determine the size of struct or object arrays, as GL compiler will optimize out unused elements
  77. - Can't determine size of individual struct either, for the same reason (some struct members might get optimized out)
  78. - Arrays of objects aren't supported in HLSL or GLSL because of limited GLSL introspection
  79. - I might need to add an exception thrown if user tries to use them
  80. - Structs aren't supported in GLSL for introspection reasons
  81. - Go through pixel formats and removed unused ones: L8, L16, A4L4, and many others
  82. - Having shared_ptrs used in RenderSystem and CommandQueue can cause potential performance problems. Dozends of thousands of shared
  83. pointers may be getting queued in command queue per frame, in a slightly more complex scene, which will most certainly cause performance problems
  84. due to thread safety and atomics used by shared_ptr. However I still need some guarantee that objects queued in RenderSystem won't be destroyed
  85. by the sim. thread.
  86. - A way to bind buffers to a Pass, while specifying buffer range
  87. - Better creation of PrimaryWindow
  88. - RENDERWINDOWDESC accepts a "externalWindow" flag and an "externalHandle" so when creating the primary window with RenderSystem::initialize we don't always need to create a new window
  89. - Actually new OpenGL seems to support creating context without a window with the help of wglCreateContextAttribsARB and wglMakeCurrent:
  90. - OpenGL render window no longer looks for a monitor index
  91. - Material RTTI should also serialize shared buffers (they need to be made into a resource)
  92. - BE CAREFUL on how this will be implemented. Likely it will have much of the same interface as a material and/or GpuParams
  93. - queueGpuCommand is handled weird. shared_ptr isn't used for setting (this) parameter, and could be optimized out by the compiler
  94. - test if everything is okay in release mode
  95. - Resources::unload will deadlock if the resource isn't being loaded!
  96. - Maybe re-think how I handle ResourceHandle.isCreated?
  97. - Check D3D9/D3D11/GL resource usages. DX11 reports many unreleased objects. I'm guessing DX9 will as well. Not sure how to check OpenGL.
  98. - onMovedOrResized is still used by Viewport while that same callback is offered by RenderWindowManager. There is no need to have them in both places.
  99. - Texture "ScaleToFit" will cause the texture to repeat instead of clipping the image. e.g. a 50x20 texture placed on an 50x100 area will repeat 5x
  100. - When writing to mesh vertex buffer in Mesh::writeSubresource that requires a color flip I need to create a temporary copy of the
  101. entire buffer. It would be better to handle this differently. Same thing happens in MeshHeap
  102. - OpenGL also supports texture views using glTextureView but so far I only use them in DX11
  103. - I don't have a way to set Texture filtering or wrap modes, default ones are always set on initialization
  104. - Module does need to be fixed for multi-threading. If it is created on one thread and used on another, a race condition could occurr. But do I use modules on two different threads?
  105. - I will with Debug, and probably others
  106. - Making the shutdown/destroy variables atomic should be enough
  107. ----------------------------------------------------------------------------------------------
  108. Optional:
  109. - Need better handling for shader techniques. Some Materials are able to run on all renderers yet I can only specify one. This is problematic
  110. for Materials for things like text and sprites, which should run on all renderers, even if user adds a new one
  111. - Add precompiled headers to all projects
  112. - Serializable callbacks can't be null otherwise compiler complains
  113. - FBX importer can be greatly sped up by implementing a better allocator
  114. - Extend texture copy so it accepts different subregions & subresources (currently only entire resource can be copied)
  115. - Need a way to convert MSAA render texture into a normal render texture
  116. - Vertex buffer start offset is not supported when calling Draw methods
  117. - When rendering Scale9Grid GUI elements the stretched center will cause linear interpolation to kick in and blend the edges with the border parts of the texture.
  118. - I should use point filtering for scale9grid, but that doesn't work in general case for stretched textures as they would look bad
  119. - Win32DropTarget: I need to be able to set drop DROPEFFECT when various IDropTarget methods are called. Otherwise the drag cursor always remains the same, whether the drag will be accepted or not.
  120. - Eventually make all math classes templates that work on both doubles and floats. (Very low priority)