Data Structures That Make Video Games Go Rounddevelopment cycles. ● Large, complex codebases.But the structure of a game is *roughly the same*Renderer Start End Gameplay Audio Initialization I/O AI Physics Rendering AudioStart End Initialization registry acts as a place to store, manage and manipulate those resources. Resource Registry Renderer Physics System AI Audio compressed_textures collision_boxes behavior_trees audioResource Physics ● Gameplay specific We’ve simulated everything and all that’s left is to send them to the renderer.Player Rocks Foliage NPCs Line of sightWe can’t send everything to the GPU. The Problem ●0 码力 | 196 页 | 3.03 MB | 6 月前3
Building a Coroutine-Based Job System Without Standard Libraryintroduction about my background, I am a real-time rendering engineer at NVIDIA working on the RTX renderer in Omniverse. Before that, I was rendering engineer intern on the rendering team of Unreal Engine is implemented is generally break the whole execution into several parts, and compose the whole process as an state machine and use coroutine frame to maintain the necessary intermediate states. 2425 } frame->seq_for.await_resume(); And, this is our ApplyImmunization. We’ve walk through the process. We will get the token, and initial suspend 9091 token<> awaitable awaitable::await_suspend0 码力 | 120 页 | 2.20 MB | 6 月前3
How Meta Made Debugging Async Code Easier with Coroutines and Sendersprocess_file(...) pool.run() _clone … … process_file(...) pool.run() _clone … … process_file(...) pool.run() _clone … … Stack Traces for Async Code are Unhelpful Unhelpful Threadpool threads: #0 process_file(...) #5 pool.run() #10 __clone … … IO Thread: #0 async_read_some_at(...) #3 ctx.run() #5 __clone … … Main thread: main() #7 __libc_start_main() … …What would be better? Threadpool threads: #0 process_file(...) #5 pool.run() #10 … IO Thread: … #0 async_read_some_at(...) #30 码力 | 131 页 | 907.41 KB | 6 月前3
Object Introspection: A Revolutionary Memory Profiler for C++ Objectscode modification • APIsCode Generation Outline Source Code Executable Debug Info Running Process Measurement Code • Debug Info Analysis • Type/Layout Reconstruction • Code Generation • Transformation: Inline Inheritance ReconstructedOutline Source Code Executable Debug Info Running Process • Debug Info Analysis • Type/Layout Reconstruction • Code Generation • Object Introspection CodeGen: containersType Reconstruction Outline Source Code Executable Debug Info Running Process • Debug Info Analysis • Type/Layout Reconstruction • Code Generation • Object Introspection0 码力 | 62 页 | 2.24 MB | 6 月前3
POCOAS in C++: A Portable Abstraction for Distributed Data Structuresnum_values, MPI_FLOAT, 0, 0, MPI_COMM_WORLD); // Data is now in // `recv_values` Process 0 Process 1How do I program one? - Message Passing - processes issue matching send and receive calls num_values, MPI_FLOAT, 0, 0, MPI_COMM_WORLD); // Data is now in // `recv_values` Process 0 Process 1How do I program one? - Message Passing - processes issue matching send and receive calls num_values, MPI_FLOAT, 0, 0, MPI_COMM_WORLD); // Data is now in // `recv_values` Process 0 Process 1 P0 and P1 must both participate in message.How do I program one? - Message Passing - processes0 码力 | 128 页 | 2.03 MB | 6 月前3
ethercat stackSSC extern "C" Plugins User provides functionality: ▶ Calls the main loop ▶ Provides call for process data handling ▶ Provides calls for interrupt control ▶ Calls interface on interrupts ▶ Hardware concrete loop processing for SSC void MainLoop(void); Called from SSC when cyclic data is available. void process_cycle(TOBJ7000 *pdo_in, TOBJ6000 *pdo_out); ciere.com Beckhoff SSC extern "C" Outline Beckhoff with const See Jason’s C++ Weekly Episode 283 Main loops all the way down extern "C" { void process_app(TOBJ7000 *pdo_in, TOBJ6000 *pdo_out) { // UGLY THINGS WE DON'T PUT ON SLIDES } } extern "C" {0 码力 | 65 页 | 2.54 MB | 6 月前3
LLVM's Realtime Safety Revolution: Tools for Modern Mission Critical Systemsright time.Missed deadlines Real-time programmingReal-time code in C++ Real-time programmingvoid process (float * audio) { // You have 11.6 ms from now, GO!!!! ... }void dispatch (Data& audio) ... } 🚨void dispatch() { x = make_unique(); ... } 🚨Sometimes it’s hiddenvoid process_audio() { numbers_[1] = 2; ... } 🤔void dispatch() { auto const x = input_array(); post_report([x, y](auto & data) { data.input = x; data.output = y; }); } 🤔void process_audio() { fftw_execute(plan); ... } 🤔How can we be confident that our code is real-time 0 码力 | 153 页 | 1.38 MB | 6 月前3
Using Modern C++ to Build XOffsetDatastructuregame environments with many players, a single process cannot handle everything. The game world is divided into smaller areas, each managed by its own process. As players move, data must migrate between What is serialization and deserialization? • In computing, serialization (or serialisation) is the process of translating a data structure or object state into a format that can be stored (e.g. files in What is serialization and deserialization? • In computing, serialization (or serialisation) is the process of translating a data structure or object state into a format that can be stored (e.g. files in0 码力 | 111 页 | 3.03 MB | 6 月前3
Techniques to Optimise Multi-threaded Data Building During Game Development- CppCon 2024Hello My name is Dominik Grabiec This talk isFocusing on optimising the process around building the data - the data build system • How many people are in Game Development? • How JSON More common with indie games ▶ Maximal extreme Large process - requires entire server farm Creates lots of data - even more to process Outputs optimised binary files - loaded quickly and efficiently moved to background threads Data building code Run outside of the game Needed before game can run Process as quickly as possible Developers need to iterate Speaker notesCOMMON GAME CODE GOTCHAS Issues 0 码力 | 99 页 | 2.40 MB | 6 月前3
Taming the C++ Filter ViewFilters need the value to check, but pass its position (iterator) • Callers need the value again to process ©2024 by josuttis.com 24 C++ Performance of Views • Good compilers optimize a lot – but not everything (int i) { return -i; }) ) { process(v); } for (int v : rg | std::views::transform([] (int i) { return -i; }) | std::views::filter([] (int i) { return i % 3 == 0; }) ) { process(v); } for (auto pos = rg begin(); pos != rg.end(); ++pos) { if (*pos % 3 == 0) { process(-*pos); } } for (auto pos = rg.begin(); pos != rg.end(); ++pos) { if (-*pos % 3 == 0) { process(-*pos); } } C++20 Nico Josuttis C++ Filter View0 码力 | 43 页 | 2.77 MB | 6 月前3
共 199 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
相关搜索词
DataStructuresThatMakeVideoGamesGoRoundBuildingCoroutineBasedJobSystemWithoutStandardLibraryHowMetaMadeDebuggingAsyncCodeEasierwithCoroutinesandSendersObjectIntrospectionRevolutionaryMemoryProfilerforC++ObjectsPOCOASinPortableAbstractionDistributedethercatstackLLVMRealtimeSafetyRevolutionToolsModernMissionCriticalSystemsUsingtoBuildXOffsetDatastructureTechniquesOptimiseMultithreadedDuringGameDevelopmentTamingtheFilterView













