Draw the client's scene in the renderer process

The adapter records everything the client draws (state, transforms, lights, fog, textures and buffers) as a command stream, sent in chunks through the shared memory channel, while IMVU's Direct3D renderer still draws the whole view. The renderer process draws it with Diligent, with shaders reproducing IMVU's Direct3D 9 fixed-function setup, over the right half of the 3D view to compare. It skips to the newest frame when it falls behind, and logs its errors and frame times.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
dhkatzandClaude Opus 5.5 committed 2026-10-28 05:52:15 -07:00
1 parent 5c35c8b63a
commit 42fc55cb91
23 files changed
+2121 -472

No files matched your search

+14 -1
View File
@@ -20,8 +20,21 @@ FetchContent_Declare(DiligentCore
SYSTEM)
FetchContent_MakeAvailable(DiligentCore)
add_executable(t5de_renderer WIN32 main.cpp)
# Shader sources, embedded in the program (Diligent compiles them at run time): each shaders/<name>.hlsl becomes
# <name>_hlsl.hpp, defining <camelCaseName>Hlsl.
function(t5de_embed_shader file name)
set(T5DE_SHADER_FILE ${file})
set(T5DE_SHADER_NAME ${name})
file(READ ${CMAKE_CURRENT_SOURCE_DIR}/shaders/${file} T5DE_SHADER_SOURCE)
get_filename_component(stem ${file} NAME_WE)
configure_file(shaders/embed.hpp.in ${CMAKE_CURRENT_BINARY_DIR}/generated/${stem}_hlsl.hpp @ONLY)
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS shaders/${file})
endfunction()
t5de_embed_shader(fixed_function.hlsl fixedFunctionHlsl)
add_executable(t5de_renderer WIN32 main.cpp scene.cpp)
set_target_properties(t5de_renderer PROPERTIES OUTPUT_NAME t5de-renderer)
target_include_directories(t5de_renderer PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/generated)
target_link_libraries(t5de_renderer PRIVATE t5de::protocol t5de::options Diligent-GraphicsEngineD3D11-static Diligent-Common)
install(TARGETS t5de_renderer RUNTIME DESTINATION .)