Skip to content

Commit 3cccad9

Browse files
new README.md
1 parent 2551d93 commit 3cccad9

File tree

1 file changed

+131
-55
lines changed

1 file changed

+131
-55
lines changed

README.md

Lines changed: 131 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ The Forge is a cross-platform rendering framework supporting
1111
- macOS with Metal 2
1212
- iOS with Metal 2
1313
- XBOX One / XBOX One X (only available for accredited developers on request)
14-
- PS4 (in development) (only available for accredited developers on request)
14+
- PS4 (only available for accredited developers on request)
1515

1616
Particularly, the graphics layer of The Forge supports cross-platform
1717
- Descriptor management
@@ -45,6 +45,79 @@ alt="Twitter" width="20" height="20" border="0" /> Join the channel at https://t
4545

4646
# News
4747

48+
## Release 1.28 - May 24th, 2019 - SWB Level Editor | Micro Profiler Re-Write | Log and File System improvements | better macOS/iOS support
49+
We added a new section below the Examples to show screenshots and an explanation of some of the Tools that we integrated. We will fill this up over the next few releases.
50+
* We were helping James Webb with his level editor for 'Star Wars Galaxies' called SWB that now uses The Forge
51+
52+
Here is a screenshot
53+
54+
![SWB Level Editor](Screenshots/SWB.png)
55+
56+
SWB is an editor for the 2003 game 'Star Wars Galaxies' that can edit terrains, scenes, particles and import/export models via FBX. The editor uses an engine called 'atlas' that will be made open source in the future. It focuses on making efficient use of the new graphics APIs (with help from The-Forge!), ease-of-use and terrain rendering.
57+
* Memory tracking:
58+
* Fluid memory tracker cross-platform for Windows, macOS and Linux
59+
* We used MTuner to remove many memory leaks and improve memory usage. MTuner might be integrated in the future.
60+
* [Micro Profiler](https://github.com/zeux/microprofile): our initial implementation of Microprofiler needed to be re-done from scratch. This time we wanted to do the integration right and also implemented the dedicated UI.
61+
62+
![Microprofiler in Visibility Buffer](Screenshots/MicroProfileExampleVisibilityBuffer.png)
63+
64+
![Microprofiler in Visibility Buffer](Screenshots/MicroProfileExampleVisibilityBuffer2.png)
65+
66+
To enable/disable profiling, go to file ProfileEnableMacro.h line 9 and set it
67+
to 0(disabled) or 1(enabled).
68+
It's supported on the following platforms:
69+
- Windows
70+
- Linux
71+
- macOS (GPU profiling is disabled)
72+
- iOS (GPU profiling is disabled)
73+
- Android(WIP will be enabled later on)
74+
75+
We can find MicroProfile integrated in the follwing examples (more will follow):
76+
- Unit Test 02_Compute
77+
- VisibilityBuffer
78+
79+
How to use it:
80+
MicroProfile has different display modes. The most useful one when running inside
81+
the application is Timers. We can change the display mode going to Mode and right
82+
clicking the one we want.
83+
84+
If we are on Timer, we will be able to right click on the labels. This will enable
85+
a graph at the bottom left.
86+
87+
If we wanted to just see some of the groups inside the profile display, go to Groups
88+
and select the ones you want.
89+
90+
The other options are self explanatory.
91+
92+
If the user wants to dump the profile to a file, we just need to go to dump,
93+
and right click on the amount of frames we want. This generates a html file in the
94+
executable folder. Open it with your prefered web browser to have a look.
95+
96+
Dumping is useful, because we will be able to see the profile frame by frame,
97+
without it being updated every frame. This will be useful when displaying in Detailed
98+
mode.
99+
100+
There is also a Help menu item.
101+
* Log system improvements:
102+
* Support for multiple log files
103+
* Easy to use log macros
104+
* Scoped logging
105+
* Multithreaded support
106+
* New log format: date, time, thread, file, line, log level and message
107+
* No need to declare global LogManager, it will be created on demand
108+
* Filesystem improvements: this is fed back from one of our game engine integrations of The Forge
109+
* file time functions now use time_t
110+
* added FileWatcher class for Windows/Linux/macOS
111+
* added CombinePaths function
112+
* macOS / iOS Metal:
113+
* added Barriers with memoryBarrierWithScope for Buffers,Textures and Render targets
114+
* added GPU sync with MTLFence as fallback (for cross encoder synchranization and BlitEncoder where memoryBarrier isn't available). Removed force fence on render targets change because it is no longer necessary. There might be a small performance improvements coming from this
115+
* support of Microprofiler see above
116+
* refactor of windows support code: replaced MTKView for iOS and macOS with a custom NSview and NSWindow implementation. We have more explicit control now over the window.
117+
* Issues fixed:
118+
* #112 - cmdBindDescriptors performance issue (DX12)
119+
* #110 - RenderDoc compatibility with SM6+
120+
48121
## Release 1.27 - April 25th, 2019 - Spring House Cleaning Release :-)
49122
* DirectX
50123
* Improved our support for DXGI_FORMAT_BC6H_SF16, DXGI_FORMAT_BC7_UNORM
@@ -62,57 +135,6 @@ alt="Twitter" width="20" height="20" border="0" /> Join the channel at https://t
62135
* Fixed issue #100 "About FBX resource import?"
63136

64137

65-
## Release 1.26 - April 3rd, 2019 - Vulkan Ray Tracing for Windows & Linux
66-
- Ray Tracing with the Vulkan API (Vulkan SDK 1.1.101.0) is now working on Windows and Ubuntu through our unified Ray Tracing interface in IRay.h:
67-
68-
PC Ubuntu Vulkan RTX, GeForce RTX 2070, Driver Version 418.56 1080p
69-
![Ray Tracing on PC Ubuntu with Vulkan RTX](Screenshots/16_RayTrace_Linux_Vulkan.png)
70-
71-
PC Windows 10 RS5, DirectX12, GeForce RTX 2070, Driver version 418.81 1080p:
72-
![Ray Tracing on PC With DXR](Screenshots/16_RayTrace_Windows_DXR.png)
73-
74-
Mac Mini with Intel Core i5 3GHz cpu with integrated graphics Intel UHD Graphics 630 (Part No. MRTT2RU/A) with resolution 3440x1440:
75-
![Ray Tracing on macOS](Screenshots/RayTracing_macOS.png)
76-
77-
iPad 6th Generation iOS 12.1.3 (16D39) with a resolution of 2048x1536
78-
![Ray Tracing on iOS](Screenshots/RayTracing_iPad.png)
79-
80-
- New Descriptor Memory Management System: we did a second pass over that system and improved performance and memory consumption further. Now we can group individual descriptor bindors into a single one. A lot of bug and memory leak fixes were done as well.
81-
- Async / Sync Resource Loading system: instead of allocating additional memory, it uses now fixed size memory and splits resources for upload
82-
- Unified UniformRingBuffer and MeshRingBuffer into GPURingBuffer
83-
- Vulkan: we implemented now something close to the official recommendation how to convert "Vsync on/off" to Vulkan parameters (in pseudocode) (thanks to Adam Sawicki
84-
@Reg__):
85-
```cpp
86-
if mEnableVsync:
87-
Try to find among available present modes, in this order: FIFO_RELAXED, FIFO
88-
else:
89-
Try to find among available present modes, in this order: IMMEDIATE, MAILBOX, FIFO (we prefer here FIFO_RELAXED instead)
90-
91-
if chosen mode == IMMEDIATE:
92-
imageCount = (Fullscreen ? 2 : 3)
93-
else if chosen mode == MAILBOX:
94-
imageCount = 3
95-
else if chosen mode == FIFO or FIFO_RELAXED:
96-
imageCount = 2
97-
imageCount = max(VkSurfaceCapabilitiesKHR::minImageCount, min(imageCount, VkSurfaceCapabilitiesKHR::maxImageCount))
98-
```
99-
100-
## Release 1.25 - March 15th, 2019 - New Descriptor Memory Management System | Refactored Input System
101-
102-
- The purpose of the DescriptorBinder approach is to allocate all memory descriptor space at load time (streaming is also considered load time), instead of doing it on-demand at runtime, as it is commonly done. This is done in an effort to allow applications to have better control over memory footprint overhead, which is especially important on mobile targets, and to improve performance by avoiding runtime memory allocations.
103-
The system will use shader reflection to determine the appropriate descriptor layouts in combination with descriptor update frequency knowledge. This knowledge will come from the client domain or from content editor tools.
104-
With this information, we are able to allocate all necessary descriptor memory up-front, giving more control to the application about the memory footprint. This is one of the initiatives leading up to the new version of The Forge.
105-
Read more [Descriptor Management](https://github.com/ConfettiFX/The-Forge/wiki/Descriptor-Management)
106-
107-
- The input system was refactored and streamlined. This is mostly a rewrite of the code layer above [gainput](https://github.com/jkuhlmann/gainput).
108-
- IOperatingSystem.h: getMousePosition, getKeyDown, getKeyUp, getJoystickButtonDown, getJoystickButtonUp were removed
109-
- InputSystem.h:
110-
- KeyMappingDescription - changed now every axis should be defined as separate entry
111-
- IsButtonPressed, IsButtonTriggered, IsButtonReleased, MapKey, SetActiveInputMap, GetButtonData, GetDisplayWidth, GetDisplayHeight, were removed
112-
- New functions GetBoolInput, GetFloatInput. KeyMappingDescription for new function require directly specifying intended action(released, pressed, triggered) via DEFINE_DEVICE_ACTION macro
113-
- For InputEventHandler old style definition is used
114-
115-
116138
See the release notes from previous releases in the [Release section](https://github.com/ConfettiFX/The-Forge/releases).
117139

118140

@@ -393,14 +415,63 @@ This unit test shows how to use skinning with Ozz
393415
![Image of the Ozz Skinning unit test](Screenshots/Skinning_PC.gif)
394416

395417

396-
397-
398418
# Examples
399419
There is an example implementation of the Triangle Visibility Buffer as covered in various conference talks. [Here](https://diaryofagraphicsprogrammer.blogspot.com/2018/03/triangle-visibility-buffer.html) is a blog entry that details the implementation in The Forge.
400420

401421
![Image of the Visibility Buffer](Screenshots/Visibility_Buffer.png)
402422

403423

424+
# Tools
425+
Below are screenshots and descriptions of some of the tools we integrated.
426+
427+
## Microprofiler
428+
We integrated the [Micro Profiler](https://github.com/zeux/microprofile) into our code base.
429+
430+
![Microprofiler in Visibility Buffer](Screenshots/MicroProfileExampleVisibilityBuffer.png)
431+
432+
![Microprofiler in Visibility Buffer](Screenshots/MicroProfileExampleVisibilityBuffer2.png)
433+
434+
To enable/disable profiling, go to file ProfileEnableMacro.h line 9 and set it
435+
to 0(disabled) or 1(enabled).
436+
It's supported on the following platforms:
437+
- Windows
438+
- Linux
439+
- macOS (GPU profiling is disabled)
440+
- iOS (GPU profiling is disabled)
441+
- Android(WIP will be enabled later on)
442+
443+
We can find MicroProfile integrated in the follwing examples:
444+
- Unit Test 02_Compute
445+
- VisibilityBuffer
446+
447+
MicroProfile provides us an easy to use UI and visualization our frame.
448+
449+
How to use it:
450+
MicroProfile has different display modes. The most useful one when running inside
451+
the application is Timers. We can change the display mode going to Mode and right
452+
clicking the one we want.
453+
454+
If we are on Timer, we will be able to right click on the labels. This will enable
455+
a graph at the bottom left.
456+
457+
If we wanted to just see some of the groups inside the profile display, go to Groups
458+
and select the ones you want.
459+
460+
The other options are self explanatory.
461+
462+
If the user wants to dump the profile to a file, we just need to go to dump,
463+
and right click on the amount of frames we want. This generates a html file in the
464+
executable folder. Open it with your prefered web browser to have a look.
465+
466+
Dumping is useful, because we will be able to see the profile frame by frame,
467+
without it being updated every frame. This will be useful when displaying in Detailed
468+
mode.
469+
470+
For any doubt on the use of the MicroProfile, hover Help.
471+
472+
473+
474+
404475
# Releases / Maintenance
405476
Confetti will prepare releases when all the platforms are stable and running and push them to this GitHub repository. Up until a release, development will happen on internal servers. This is to sync up the console, mobile, macOS and PC versions of the source code.
406477

@@ -419,6 +490,11 @@ The Forge is used as the rendering framework in Torque 3D:
419490
<a href="http://www.garagegames.com/products/torque-3d" target="_blank"><img src="Screenshots/Torque-Logo_H.png"
420491
alt="Torque 3D" width="417" height="106" border="0" /></a>
421492

493+
## Star Wars Galaxies Level Editor
494+
SWB is an editor for the 2003 game 'Star Wars Galaxies' that can edit terrains, scenes, particles and import/export models via FBX. The editor uses an engine called 'atlas' that will be made open source in the future. It focuses on making efficient use of the new graphics APIs (with help from The-Forge!), ease-of-use and terrain rendering.
495+
496+
![SWB Level Editor](Screenshots/SWB.png)
497+
422498

423499
# Open-Source Libraries
424500
The Forge utilizes the following Open-Source libraries:
@@ -441,7 +517,6 @@ The Forge utilizes the following Open-Source libraries:
441517
* [Fluid Studios Memory Manager](http://www.paulnettle.com/)
442518
* [volk Metaloader for Vulkan](https://github.com/zeux/volk)
443519
* [gainput](https://github.com/jkuhlmann/gainput)
444-
* [Shader Playground](https://github.com/tgjones/shader-playground)
445520
* [hlslparser](https://github.com/Thekla/hlslparser)
446521
* [imGui](https://github.com/ocornut/imgui)
447522
* [DirectX Shader Compiler](https://github.com/Microsoft/DirectXShaderCompiler)
@@ -450,4 +525,5 @@ The Forge utilizes the following Open-Source libraries:
450525
* [Lua Scripting System](https://www.lua.org/)
451526
* [TressFX](https://github.com/GPUOpen-Effects/TressFX)
452527
* [Micro Profiler](https://github.com/zeux/microprofile)
528+
* [MTuner](https://github.com/milostosic/MTuner)
453529

0 commit comments

Comments
 (0)