рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдореИрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдореИрдВрдиреЗ Surreal рдЗрдВрдЬрди рдЧреЗрдо рдЗрдВрдЬрди рдХреЛ WebAssembly рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ред
https://demensdeum.com/demos/SurrealEngine/”
рдЕрд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЗрдВрдЬрди – рдПрдХ рдЧреЗрдо рдЗрдВрдЬрди рдЬреЛ рдЕрд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЗрдВрдЬрди 1 рдХреА рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рдЗрдВрдЬрди рдкрд░ рдкреНрд░рд╕рд┐рджреНрдз рдЧреЗрдо – рдЕрд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЯреВрд░реНрдирд╛рдореЗрдВрдЯ 99, рдЕрд╡рд╛рд╕реНрддрд╡рд┐рдХ, рдбреНрдпреВрд╕ рдПрдХреНрд╕, рдЕрдирдбрд╛рдЗрдВрдЧред рдпрд╣ рдХреНрд▓рд╛рд╕рд┐рдХ рдЗрдВрдЬрдиреЛрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдПрдХрд▓-рдереНрд░реЗрдбреЗрдб рдирд┐рд╖реНрдкрд╛рджрди рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдореВрд▓ рд░реВрдк рд╕реЗ рдореЗрд░реЗ рдорди рдореЗрдВ рдПрдХ рдРрд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд▓реЗрдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдерд╛ рдЬрд┐рд╕реЗ рдореИрдВ рдХрд┐рд╕реА рднреА рдЙрдЪрд┐рдд рд╕рдордп рд╕реАрдорд╛ рдореЗрдВ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЯреНрд╡рд┐рдЪ рдЕрдиреБрдпрд╛рдпрд┐рдпреЛрдВ рдХреЛ рджрд┐рдЦрд╛рдпрд╛ рдХрд┐ рдРрд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рднреА рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рднреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдЕрдкрдиреА рдкрд╣рд▓реА рд╕реНрдЯреНрд░реАрдо рдХреЗ рджреМрд░рд╛рди, рдореБрдЭреЗ рдЕрдЪрд╛рдирдХ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ Emscripten рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Surreal рдЗрдВрдЬрди C++ рдХреЛ WebAssembly рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рд╕рдВрднрд╡ рдерд╛ред
рдПрдХ рдорд╣реАрдиреЗ рдмрд╛рдж, рдореИрдВ WebAssembly рдкрд░ рдЕрдкрдирд╛ рдлрд╝реЛрд░реНрдХ рдФрд░ рдЗрдВрдЬрди рдЕрд╕реЗрдВрдмрд▓реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ:
https://demensdeum.com/demos/SurrealEngine/
рдирд┐рдпрдВрддреНрд░рдг, рдореВрд▓ рдХреА рддрд░рд╣, рдХреАрдмреЛрд░реНрдб рддреАрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж, рдореИрдВ рдЗрд╕реЗ рдореЛрдмрд╛рдЗрд▓ рдирд┐рдпрдВрддреНрд░рдг (рдЯреИрдЪреА) рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕рд╣реА рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рдФрд░ рдЕрд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЯреВрд░реНрдирд╛рдореЗрдВрдЯ 99 рд░реЗрдВрдбрд░ рдХреА рдЕрдиреНрдп рдЧреНрд░рд╛рдлрд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ?
рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рдореИрдВ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ Emscripten рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ C++ рд╕реЗ WebAssembly рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдПрдХрдорд╛рддреНрд░ рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд┐рддрдиреА рдкреВрд░реНрдг рд╣реЛрдЧреАред рдРрд╕рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЪреБрдиреЗрдВ рдЬрд┐рд╕рдХреЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреЛрд░реНрдЯ рдПрдореНрд╕рд╕реНрдХреНрд░рд┐рдкреНрдЯреЗрди рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрд▓рдмреНрдз рд╣реЛрдВ; Surreal рдЗрдВрдЬрди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рдмрд╣реБрдд рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрдВрдЬрди SDL 2, OpenAL – рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдкреБрд╕реНрддрдХрд╛рд▓рдп. рд╡реЗ рджреЛрдиреЛрдВ рдПрдореНрд╕рд╕реНрдХреНрд░рд┐рдкреНрдЯреЗрди рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╡рд▓реНрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдПрдкреАрдЖрдИ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ HTML5 рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, WebGPU рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдбреНрд░рд╛рдлреНрдЯ рдЪрд░рдг рдореЗрдВ рднреА рд╣реИ, рдФрд░ рдпрд╣ рднреА рдЕрдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╛рдирдХреАрдХреГрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж Vulkan рд╕реЗ WebGPU рддрдХ рдХрд╛ рдкреЛрд░реНрдЯ рдХрд┐рддрдирд╛ рд╕рд░рд▓ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ Surreal рдЗрдВрдЬрди рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдореВрд▓ OpenGL-ES/WebGL рд░реЗрдВрдбрд░рд░ рд▓рд┐рдЦрдирд╛ рдкрдбрд╝рд╛ред
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг
Surreal рдЗрдВрдЬрди рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рдПрдБ – рд╕реАрдПрдордХреЗ, рдЬреЛ рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЛ рднреА рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдореНрд╕рд╕реНрдХреНрд░рд┐рдкреНрдЯрди рдЕрдкрдиреЗ рдореВрд▓ рдмрд┐рд▓реНрдбрд░реЛрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ – рдПрдордореЗрдХ, рдПрдордореЗрдХред
Surreal рдЗрдВрдЬрди рдкреЛрд░реНрдЯ WebGL/OpenGL ES рдФрд░ C++ рдореЗрдВ рдбреЗрде-рдорд╛рд╕реНрдХ рдирд╛рдордХ рдореЗрд░реЗ рдирд╡реАрдирддрдо рдЧреЗрдо рдХреЗ рдХреЛрдб рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдерд╛, рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ рд╡рд┐рдХрд╛рд╕ рдмрд╣реБрдд рд╕рд░рд▓ рдерд╛, рдореЗрд░реЗ рдкрд╛рд╕ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдмрд┐рд▓реНрдб рдлрд╝реНрд▓реИрдЧ рдФрд░ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдереЗред
CMakeLists.txt рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБрдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ Emscripten рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдб рдлрд╝реНрд▓реИрдЧ рд╣реИ, рдиреАрдЪреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
set(CMAKE_CXX_FLAGS "-s MIN_WEBGL_VERSION=2
-s MAX_WEBGL_VERSION=2
-s EXCEPTION_DEBUG
-fexceptions
--preload-file UnrealTournament/
--preload-file SurrealEngine.pk3
--bind
--use-preload-plugins
-Wall
-Wextra
-Werror=return-type
-s USE_SDL=2
-s ASSERTIONS=1
-w
-g4
-s DISABLE_EXCEPTION_CATCHING=0
-O3
--no-heap-copy
-s ALLOW_MEMORY_GROWTH=1
-s EXIT_RUNTIME=1")
рдмрд┐рд▓реНрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрд╡рдпрдВ:
clear
emmake make -j 16
cp SurrealEngine.data /srv/http/SurrealEngine/SurrealEngine.data
cp SurrealEngine.js /srv/http/SurrealEngine/SurrealEngine.js
cp SurrealEngine.wasm /srv/http/SurrealEngine/SurrealEngine.wasm
cp ../buildScripts/Emscripten/index.html /srv/http/SurrealEngine/index.html

рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдЗрдП index.html рддреИрдпрд╛рд░ рдХрд░реЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реАрд▓реЛрдбрд░ рд╢рд╛рдорд┐рд▓ рд╣реИред рд╡реЗрдм рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЕрд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЯреВрд░реНрдирд╛рдореЗрдВрдЯ рдбреЗрдореЛ рд╕рдВрд╕реНрдХрд░рдг 338 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╕реАрдПрдордХреЗ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдирдкреИрдХреНрдб рдЧреЗрдо рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдмрд┐рд▓реНрдб рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдПрдореНрд╕рд╕реНрдХреНрд░рд┐рдкреНрдЯреЗрди рдХреЗ рд▓рд┐рдП рдкреНрд░реАрд▓реЛрдб-рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдВрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдореБрдЦреНрдп рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди
рдлрд┐рд░ рд╣рдореЗрдВ рдЧреЗрдо рдХреЗ рдЧреЗрдо рд▓реВрдк рдХреЛ рдмрджрд▓рдирд╛ рдкрдбрд╝рд╛, рдЖрдк рдПрдХ рдЕрдВрддрд╣реАрди рд▓реВрдк рдирд╣реАрдВ рдЪрд▓рд╛ рд╕рдХрддреЗ, рдЗрд╕рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдлрд╝реНрд░реАрдЬрд╝ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЖрдкрдХреЛ emscripten_set_main_loop рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреЗ 2017 рдиреЛрдЯ рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛ ” target=’_blank’>SDL C++ рдЧреЗрдореНрд╕ рдХреЛ HTML5 (Emscripten) рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рдирд╛тАЭ
рд╣рдо while рд▓реВрдк рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ if рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╣рдо рдЧреЗрдо рдЗрдВрдЬрди рдХреЗ рдореБрдЦреНрдп рд╡рд░реНрдЧ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдЧреЗрдо рд▓реВрдк рд╣реЛрддрд╛ рд╣реИ, рд╡реИрд╢реНрд╡рд┐рдХ рджрд╛рдпрд░реЗ рдореЗрдВ, рдФрд░ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬреЛ рд╡реИрд╢реНрд╡рд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдЧреЗрдо рд▓реВрдк рдЪрд░рдг рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛:
#if __EMSCRIPTEN__
#include <emscripten.h>
Engine *EMSCRIPTEN_GLOBAL_GAME_ENGINE = nullptr;
void emscripten_game_loop_step() {
EMSCRIPTEN_GLOBAL_GAME_ENGINE->Run();
}
#endif
рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХреЛрдИ рдкреГрд╖реНрдарднреВрдорд┐ рдереНрд░реЗрдб рдирд╣реАрдВ рд╣реИрдВ; рдпрджрд┐ рд╣реИрдВ, рддреЛ рдПрдХрд▓-рдереНрд░реЗрдбреЗрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рдПрдВ, рдпрд╛ рдПрдореНрд╕рд╕реНрдХреНрд░рд┐рдкреНрдЯрди рдореЗрдВ phtread рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
Surreal рдЗрдВрдЬрди рдореЗрдВ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдереНрд░реЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрдЧреАрдд рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореБрдЦреНрдп рдЗрдВрдЬрди рдереНрд░реЗрдб рд╕реЗ рд╡рд░реНрддрдорд╛рди рдЯреНрд░реИрдХ, рд╕рдВрдЧреАрдд рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдпрд╛ рдЙрд╕рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рдЖрддрд╛ рд╣реИ, рдлрд┐рд░ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдереНрд░реЗрдб рдореНрдпреВрдЯреЗрдХреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдирдИ рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирдпрд╛ рд╕рдВрдЧреАрдд рдмрдЬрд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ, рдпрд╛ рд░реБрдХ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд▓реЗрдмреИрдХ рдХреЗ рджреМрд░рд╛рди рд╕рдВрдЧреАрдд рдХреЛ рдмрдлрд╝рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдереНрд░реЗрдб рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкрд╛рдереНрд░реЗрдб рдХреЗ рд╕рд╛рде рдПрдореНрд╕рд╕реНрдХреНрд░рд┐рдкреНрдЯреЗрди рдХреЗ рд▓рд┐рдП рд╕рд░рд░рд┐рдпрд▓ рдЗрдВрдЬрди рдмрдирд╛рдиреЗ рдХреЗ рдореЗрд░реЗ рдкреНрд░рдпрд╛рд╕ рдЕрд╕рдлрд▓ рд░рд╣реЗ, рдХреНрдпреЛрдВрдХрд┐ рдПрд╕рдбреАрдПрд▓2 рдФрд░ рдУрдкрдирдПрдПрд▓ рдкреЛрд░реНрдЯ рдмрд┐рдирд╛ рдкрд╛рдереНрд░реЗрдб рд╕рдорд░реНрдерди рдХреЗ рдмрдирд╛рдП рдЧрдП рдереЗ, рдФрд░ рдореИрдВ рд╕рдВрдЧреАрдд рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рд▓реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреГрд╖реНрдарднреВрдорд┐ рд╕рдВрдЧреАрдд рд╕реНрдЯреНрд░реАрдо рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдПрдХрд▓-рдереНрд░реЗрдбреЗрдб рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ред C++ рдХреЛрдб рд╕реЗ pthread рдХреЙрд▓реНрд╕ рдХреЛ рд╣рдЯрд╛рдХрд░, рдореИрдВрдиреЗ рдмрдлрд╝рд░рд┐рдВрдЧ рдФрд░ рд╕рдВрдЧреАрдд рдкреНрд▓реЗрдмреИрдХ рдХреЛ рдореБрдЦреНрдп рдереНрд░реЗрдб рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛, рддрд╛рдХрд┐ рдХреЛрдИ рджреЗрд░реА рди рд╣реЛ, рдореИрдВрдиреЗ рдмрдлрд╝рд░ рдХреЛ рдХреБрдЫ рд╕реЗрдХрдВрдб рддрдХ рдмрдврд╝рд╛ рджрд┐рдпрд╛ред
рдЖрдЧреЗ, рдореИрдВ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдФрд░ рдзреНрд╡рдирд┐ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред
рд╡рд▓реНрдХрди рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ!
рд╣рд╛рдБ, Vulkan HTML5 рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╕рднреА рдорд╛рд░реНрдХреЗрдЯрд┐рдВрдЧ рдмреНрд░реЛрд╢рд░ Vulkan рдХреЗ рдореБрдЦреНрдп рд▓рд╛рдн рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдФрд░ рд╡реНрдпрд╛рдкрдХ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╕рдорд░реНрдерди рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, рдореБрдЭреЗ рд╕рд░рд▓реАрдХреГрдд OpenGL рдкреНрд░рдХрд╛рд░ – рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдореВрд▓ рдЧреНрд░рд╛рдлрд╝рд┐рдХреНрд╕ рд░реЗрдВрдбрд░рд░ рд▓рд┐рдЦрдирд╛ рдкрдбрд╝рд╛ред рдИрдПрд╕, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрднреА-рдХрднреА рдЗрд╕рдореЗрдВ рдЖрдзреБрдирд┐рдХ рдУрдкрдирдЬреАрдПрд▓ рдХреА рдлреИрд╢рдиреЗрдмрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡реЗрдмрдЬреАрдПрд▓ рдХреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдПрдореНрд╕рд╕реНрдХреНрд░рд┐рдкреНрдЯреЗрди рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЬреАрдпреВрдЖрдИ рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдЯрд╛рдЗрд▓ рд░реЗрдВрдбрд░рд┐рдВрдЧ, рдмреАрдПрд╕рдкреА рд░реЗрдВрдбрд░рд┐рдВрдЧ рд▓рд┐рдЦрдирд╛ рдФрд░ рдореЙрдбрд▓ + рдореИрдк рд░реЗрдВрдбрд░ рдХрд░рдирд╛ рджреЛ рд╕рдкреНрддрд╛рд╣ рдореЗрдВ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ред рдпрд╣ рд╢рд╛рдпрдж рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╕рдмрд╕реЗ рдХрдард┐рди рд╣рд┐рд╕реНрд╕рд╛ рдерд╛ред Surreal рдЗрдВрдЬрди рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреА рдкреВрд░реНрдг рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рдмрд╣реБрдд рдХрд╛рдо рдмрд╛рдХреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдб рдФрд░ рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рдардХреЛрдВ рдХреА рдХрд┐рд╕реА рднреА рдорджрдж рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред
OpenAL рд╕рдорд░реНрдерд┐рдд!
рдмрдбрд╝реА рдХрд┐рд╕реНрдордд рдпрд╣ рд╣реИ рдХрд┐ Surreal рдЗрдВрдЬрди рдСрдбрд┐рдпреЛ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП OpenAL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред OpenAL рдореЗрдВ рдПрдХ рд╕рд░рд▓ рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб рд▓рд┐рдЦрдиреЗ рдФрд░ рдЗрд╕реЗ Emscripten рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ WebAssembly рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд┐рддрдирд╛ рд╕рд░рд▓ рдерд╛, рдФрд░ рдореИрдВрдиреЗ рдзреНрд╡рдирд┐ рдХреЛ рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред
рдХрдИ рдШрдВрдЯреЛрдВ рдХреА рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рдмрд╛рдж, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдПрдореНрд╕рд╕реНрдХреНрд░рд┐рдкреНрдЯреЗрди рдХреЗ рдУрдкрдирдПрдПрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдХрдИ рдмрдЧ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдореЛрдиреЛ рдЪреИрдирд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдкрдврд╝рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡рд┐рдзрд┐ рдПрдХ рдЕрдирдВрдд рд╕рдВрдЦреНрдпрд╛ рд▓реМрдЯрд╛рддреА рд╣реИ, рдФрд░ рдЕрдирдВрдд рдЖрдХрд╛рд░ рдХреЗ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, C++ рдЕрдкрд╡рд╛рдж рд╡реЗрдХреНрдЯрд░::рд▓реЗрдВрде_рдПрд░рд░ рдХреЗ рд╕рд╛рде рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рд╣рдо рдореЛрдиреЛ рдЪреИрдирд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ 2048 рддрдХ рд╣рд╛рд░реНрдбрдХреЛрдб рдХрд░рдХреЗ рдЗрд╕рд╕реЗ рдирд┐рдЬрд╛рдд рдкрд╛рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ:
alcGetIntegerv(alDevice, ALC_MONO_SOURCES, 1, &monoSources);
alcGetIntegerv(alDevice, ALC_STEREO_SOURCES, 1, &stereoSources);
#if __EMSCRIPTEN__
monoSources = 2048; // for some reason Emscripten's OpenAL gives infinite monoSources count, bug?
#endif
рдХреНрдпрд╛ рдХреЛрдИ рдиреЗрдЯрд╡рд░реНрдХ рд╣реИ?
Surreal рдЗрдВрдЬрди рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдСрдирд▓рд╛рдЗрди рдЦреЗрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдмреЙрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдирд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЗрди рдмреЙрдЯреНрд╕ рдХреЗ рд▓рд┐рдП AI рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдк Websockets рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ WebAssembly/Emscripten рдкрд░ рдПрдХ рдиреЗрдЯрд╡рд░реНрдХ рдЧреЗрдо рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг Surreal рдЗрдВрдЬрди рдХреА рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХрд╛рдлреА рд╕реБрдЪрд╛рд░реВ рд╣реЛ рдЧрдИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП Emscripten рдкреЛрд░реНрдЯ рд╣реИрдВ, рд╕рд╛рде рд╣реА Emscripten рдкрд░ WebAssembly рдХреЗ рд▓рд┐рдП C++ рдореЗрдВ рдПрдХ рдЧреЗрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдореЗрд░рд╛ рдкрд┐рдЫрд▓рд╛ рдЕрдиреБрднрд╡ рднреА рд╣реИред рд╡рд┐рд╖рдп рдкрд░ рдЬреНрдЮрд╛рди рдХреЗ рд╕реНрд░реЛрддреЛрдВ рдФрд░ рднрдВрдбрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╣реИрдВред
рдПрдо-рдПрдо-рдПрдо-рд░рд╛рдХреНрд╖рд╕ рд╣рддреНрдпрд╛!
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЖрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдорджрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЕрдзрд┐рдорд╛рдирддрдГ рд╡реЗрдмрдЬреАрдПрд▓/рдУрдкрдирдЬреАрдПрд▓ рдИрдПрд╕ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЛрдб рдХреЗ рд╕рд╛рде, рддреЛ рдореБрдЭреЗ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдореЗрдВ рд▓рд┐рдЦреЗрдВ:
https://t.me/demenscave
рд▓рд┐рдВрдХ
https://demensdeum.com/demos/SurrealEngine/














