TODO.txt 11 KB

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