Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the antispam-bee domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/ruwritingagame/public_html/wp-includes/functions.php on line 6131

Warning: Cannot modify header information - headers already sent by (output started at /home/ruwritingagame/public_html/wp-includes/functions.php:6131) in /home/ruwritingagame/public_html/wp-includes/rest-api/class-wp-rest-server.php on line 1902

Warning: Cannot modify header information - headers already sent by (output started at /home/ruwritingagame/public_html/wp-includes/functions.php:6131) in /home/ruwritingagame/public_html/wp-includes/rest-api/class-wp-rest-server.php on line 1902

Warning: Cannot modify header information - headers already sent by (output started at /home/ruwritingagame/public_html/wp-includes/functions.php:6131) in /home/ruwritingagame/public_html/wp-includes/rest-api/class-wp-rest-server.php on line 1902

Warning: Cannot modify header information - headers already sent by (output started at /home/ruwritingagame/public_html/wp-includes/functions.php:6131) in /home/ruwritingagame/public_html/wp-includes/rest-api/class-wp-rest-server.php on line 1902

Warning: Cannot modify header information - headers already sent by (output started at /home/ruwritingagame/public_html/wp-includes/functions.php:6131) in /home/ruwritingagame/public_html/wp-includes/rest-api/class-wp-rest-server.php on line 1902

Warning: Cannot modify header information - headers already sent by (output started at /home/ruwritingagame/public_html/wp-includes/functions.php:6131) in /home/ruwritingagame/public_html/wp-includes/rest-api/class-wp-rest-server.php on line 1902

Warning: Cannot modify header information - headers already sent by (output started at /home/ruwritingagame/public_html/wp-includes/functions.php:6131) in /home/ruwritingagame/public_html/wp-includes/rest-api/class-wp-rest-server.php on line 1902

Warning: Cannot modify header information - headers already sent by (output started at /home/ruwritingagame/public_html/wp-includes/functions.php:6131) in /home/ruwritingagame/public_html/wp-includes/rest-api/class-wp-rest-server.php on line 1902
{"id":383,"date":"2021-11-30T21:09:35","date_gmt":"2021-11-30T21:09:35","guid":{"rendered":"https:\/\/writingagame.com\/?p=383"},"modified":"2022-02-09T19:22:51","modified_gmt":"2022-02-09T19:22:51","slug":"chapter-7-external-data-files-windows","status":"publish","type":"post","link":"https:\/\/writingagame.ru\/index.php\/2021\/11\/30\/chapter-7-external-data-files-windows\/","title":{"rendered":"\u0413\u043b\u0430\u0432\u0430 7. \u0412\u043d\u0435\u0448\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u044b \u0434\u0430\u043d\u043d\u044b\u0445, Windows"},"content":{"rendered":"\n

\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0433\u043e\u0442\u043e\u0432\u044b \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 <\/em>(\u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445) \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u0432. \u0421\u0435\u0439\u0447\u0430\u0441 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c 2 (1 vertex \u0438 1 fragment), \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 (hard-coded) \u0432 \u043a\u043e\u0434. \u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u043d\u0435 \u043b\u0443\u0447\u0448\u0435\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043d\u043e \u0440\u0430\u0434\u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u043f\u0440\u0438\u043c\u0435\u0440\u0430 – \u0432\u043f\u043e\u043b\u043d\u0435 \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u043d\u043e\u0435. \u041c\u044b \u0436\u0435, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043c \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0438\u0445 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u044d\u043a\u0437\u0435\u0448\u043d\u0438\u043a\u0430.<\/p>\n\n\n\n

1. \u0412 Windows File Explorer<\/strong>-\u0435 (\u043d\u0435 \u0432 VS), \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 C:\\CPP\\engine\\<\/em> \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u043e\u0434-\u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u201cdt\u201d (for “data”). \u0412 \u043d\u0435\u043c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432\u0441\u0435 engine-related \u0444\u0430\u0439\u043b\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 – \u0448\u0435\u0439\u0434\u0435\u0440\u044b. \u0412\u043d\u0443\u0442\u0440\u0438 \u201cdt\u201d \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u043e\u0434-\u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u201cshaders\u201d.<\/p>\n\n\n\n

\u0412 Text Editor<\/strong> (\u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435) \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 txt \u0444\u0430\u0439\u043b, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0430\u0440\u0443 \u0441\u0442\u0440\u043e\u043a, \u0442\u0438\u043f\u0430<\/p>\n\n\n

\ntest 1\ntest 2\n<\/pre><\/div>\n\n\n


\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u0435\u0433\u043e \u043a\u0430\u043a C:\\CPP\\engine\\dt\\shaders\\test0.txt<\/em><\/p>\n\n\n\n


\n\n\n\n

<\/p>\n\n\n\n

2. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0434\u043e \u043a\u0430\u043a-\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0435\u0433\u043e \u044d\u043a\u0437\u0435\u0448\u043d\u0438\u043a\u0443. \u0415\u0441\u0442\u044c \u043f\u0430\u0440\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0442\u0438\u043f\u0430 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u0432 “\u0440\u0435\u0441\u0443\u0440\u0441\u044b” \u0438\u043b\u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432 \u043f\u0440\u043e\u0435\u043a\u0442. \u041e\u0434\u043d\u0430\u043a\u043e, \u043c\u044b \u041d\u0415 \u0445\u043e\u0442\u0438\u043c \u0435\u0433\u043e “\u0432\u043d\u0443\u0442\u0440\u0438” \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u041b\u0443\u0447\u0448\u0435 \u043c\u044b \u043f\u0440\u043e\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0440\u0443\u0435\u043c Visual Studio \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0442\u0430\u043b\u043e\u0433 “dt” \u0432 \u0442\u043e\u0442 \u0436\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433, \u0433\u0434\u0435 \u0438 \u044d\u043a\u0437\u0435\u0448\u043d\u0438\u043a.<\/p>\n\n\n\n

\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c Visual Studio, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c C:\\CPP\\a999hello\\p_windows\\p_windows.sln<\/em> solution.<\/p>\n\n\n\n


\n\n\n\n

<\/p>\n\n\n\n

3. \u041e\u0442\u043a\u0440\u043e\u0435\u043c p_windows<\/em> project Properties, All Configurations \/ Win32, Configuration Properties -> Build events -> Post-Build Event<\/em>, \u043e\u0442\u043a\u0440\u043e\u0435\u043c Command Line -> Edit<\/em>.<\/p>\n\n\n\n

\u0414\u043e\u0431\u0430\u0432\u0438\u043c (copy-paste) \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n\n\n\n

xcopy \"..\\..\\engine\\dt\\*.*\" \"$(TargetDir)dt\\\" \/E \/R \/D \/y<\/code><\/pre>\n\n\n\n

<\/p>\n\n\n\n

\u0417\u0430\u0442\u0435\u043c – Ok, Apply, Ok<\/strong>.<\/p>\n\n\n\n

“\u0420\u0430\u0441\u043a\u0430\u0434\u0440\u043e\u0432\u043a\u0430”:<\/p>\n\n\n\n

  • xcopy <\/strong>– \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c<\/li>
  • “..\\..\\engine\\dt\\*.*”<\/strong> \u2013 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0442\u043e \u0438 \u043e\u0442\u043a\u0443\u0434\u0430. \u042d\u0442\u043e \u0442\u043e\u0442 \u0436\u0435 C:\\CPP\\engine\\dt<\/em>, \u043f\u0440\u043e\u0441\u0442\u043e \u0432 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435 \u043e\u0442 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 p_windows<\/em> \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/li>
  • “$(TargetDir)dt\\”<\/strong> – \u043a\u0443\u0434\u0430 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u041c\u044b \u0445\u043e\u0442\u0438\u043c \u043a\u043e\u043f\u0438\u044e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u201cdt\u201d \u0442\u0430\u043c \u0436\u0435 \u0433\u0434\u0435 \u0438 \u044d\u043a\u0437\u0435\u0448\u043d\u0438\u043a<\/li><\/ul>\n\n\n\n

    \u041a\u043b\u044e\u0447\u0438:<\/p>\n\n\n\n

    • \/E<\/strong> – \u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438 \u0438 \u043f\u043e\u0434-\u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043f\u0443\u0441\u0442\u044b\u0435<\/li>
    • \/R<\/strong> – \u041f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c read-only \u0444\u0430\u0439\u043b\u044b \u0442\u043e\u0436\u0435<\/li>
    • \/D<\/strong> \u2013 \u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043d\u043e\u0432\u0435\u0435<\/li>
    • \/y<\/strong> – \u041d\u0435 \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043b\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435<\/li><\/ul>\n\n\n\n
      \n\n\n\n

      <\/p>\n\n\n\n

      4. \u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u043f\u0443\u0441\u043a (\u0437\u0435\u043b\u0435\u043d\u0430\u044f \u0441\u0442\u0440\u0435\u043b\u043a\u0430). \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u043a\u0440\u043e\u0435\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0418\u041b\u0418: VS top menu -> Debug -> Stop Debugging<\/em>.<\/p>\n\n\n\n

      \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c Windows File Explorer<\/strong>, \u0438\u0434\u0435\u043c \u0432 C:\\CPP\\a999hello\\p_windows\\Debug<\/em>. \u041e\u0442\u043b\u0438\u0447\u043d\u043e, \u043a\u043e\u043f\u0438\u044f \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 “dt” \u0441\u043e \u0432\u0441\u0435\u043c \u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c \u0442\u0430\u043c, \u0432 \u0442\u043e\u043c \u0436\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u0447\u0442\u043e \u0438 OurProject.exe<\/em>:<\/p>\n\n\n\n

      <\/p>\n\n\n\n

      <\/p>\n\n\n\n


      \n\n\n\n

      5. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0430\u0448 \u0444\u0430\u0439\u043b (test0.txt). \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c full<\/strong> path \u0444\u0430\u0439\u043b\u0430. \u041d\u043e \u043e\u043d \u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u043c, \u0441\u043c\u043e\u0442\u0440\u044f \u043a\u0443\u0434\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430. \u0417\u043d\u0430\u0447\u0438\u0442, \u043d\u0430\u0434\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u0443\u0434\u0430, \u0442\u043e \u0435\u0441\u0442\u044c \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n\n\n\n

      \u041a\u043e\u0434:<\/p>\n\n\n

      \n    \/\/find application root folder\n    char path[256];\n    GetModuleFileNameA(NULL, path, 256);\n    filesRoot.assign(path);\n    int lastSlashPos = filesRoot.find_last_of('\\\\');\n    if (lastSlashPos < 0)\n        lastSlashPos = filesRoot.find_last_of('\/');\n    filesRoot = filesRoot.substr(0, lastSlashPos);\n    mylog("App path = %s\\n", filesRoot.c_str());\n\n<\/pre><\/div>\n\n\n

      <\/p>\n\n\n\n

      \u0412\u0441\u0442\u0430\u0432\u0438\u043c \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0432 main.cpp<\/em> \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u0434 theGame.run()<\/em>.<\/p>\n\n\n\n

      \u0415\u0449\u0435 \u043d\u0430\u0434\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435 include \u0441\u0435\u043a\u0446\u0438\u0438:<\/p>\n\n\n

      \n#include <windows.h>\n#include <string>\n#include <fstream>      \/\/ std::ifstream\n\nstd::string filesRoot;\n\n<\/pre><\/div>\n\n\n

      <\/p>\n\n\n\n

      \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n\n\n\n

      App path = C:\\CPP\\a999hello\\p_windows\\Debug<\/strong><\/p>\n\n\n\n

      \u0422\u043e, \u0447\u0442\u043e \u043d\u0430\u0434\u043e. <\/p>\n\n\n\n


      \n\n\n\n

      6. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0435\u043c \u0444\u0430\u0439\u043b.<\/p>\n\n\n\n

      \u041f\u043e\u0441\u043b\u0435 mylog(\u2026)<\/em> \u0434\u043e\u0431\u0430\u0432\u0438\u043c:<\/p>\n\n\n

      \n    \/\/reading test file\n    std::ifstream myFile(filesRoot + "\/dt\/shaders\/test0.txt");\n    std::string line;\n    if (myFile.is_open())\n    {\n        while (getline(myFile, line))\n            mylog("%s\\n", line.c_str());\n    }\n    else mylog("Unable to open file\\n");\n\n<\/pre><\/div>\n\n\n

      <\/p>\n\n\n\n

      \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n\n\n\n

      App path = C:\\CPP\\a999hello\\p_windows\\Debug<\/strong>
      test 1
      test 2<\/strong><\/p>\n\n\n\n


      \n\n\n\n

      7. \u041f\u043e\u0441\u043b\u0435 \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u043e\u0442 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u0434\u0430, main.cpp<\/em> (\u0441 \u043d\u043e\u0432\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 filesRoot <\/em>\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043a\u043e\u0434\u043e\u043c) \u0431\u0443\u0434\u0435\u0442:<\/p>\n\n\n

      \n#include <glad\/glad.h>\n#define GLFW_INCLUDE_NONE\n#include <GLFW\/glfw3.h>\n\n#include <stdlib.h>\n\n#include "TheGame.h"\n#include "platform.h"\n\n#include <windows.h>\n#include <string>\n\nstd::string filesRoot;\n\nstatic void error_callback(int error, const char* description)\n{\n    mylog("Error: %s\\n", description);\n}\n\nstatic void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)\n{\n    if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)\n        glfwSetWindowShouldClose(window, GLFW_TRUE);\n}\n\nTheGame theGame;\nGLFWwindow* myMainWindow;\n\nint main(void)\n{\n    glfwSetErrorCallback(error_callback);\n\n    if (!glfwInit())\n        exit(EXIT_FAILURE);\n\n    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);\n    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);\n\n    myMainWindow = glfwCreateWindow(640, 480, "Simple example", NULL, NULL);\n    if (!myMainWindow)\n    {\n        glfwTerminate();\n        exit(EXIT_FAILURE);\n    }\n\n    glfwSetKeyCallback(myMainWindow, key_callback);\n\n    glfwMakeContextCurrent(myMainWindow);\n    gladLoadGLES2Loader((GLADloadproc)glfwGetProcAddress); \/\/gladLoadGL(glfwGetProcAddress);\n    glfwSwapInterval(1);\n\n    \/\/find application root folder\n    char path[256];\n    GetModuleFileNameA(NULL, path, 256);\n    filesRoot.assign(path);\n    int lastSlashPos = filesRoot.find_last_of('\\\\');\n    if (lastSlashPos < 0)\n        lastSlashPos = filesRoot.find_last_of('\/');\n    filesRoot = filesRoot.substr(0, lastSlashPos);\n    mylog("App path = %s\\n", filesRoot.c_str());\n    \n    theGame.run();\n\n    glfwDestroyWindow(myMainWindow);\n    glfwTerminate();\n    exit(EXIT_SUCCESS);\n}\n\n<\/pre><\/div>\n\n\n

      <\/p>\n\n\n\n

      \u0417\u0430\u043c\u0435\u043d\u044f\u0435\u043c main.cpp<\/em> \u043a\u043e\u0434 \u044d\u0442\u0438\u043c.<\/p>\n\n\n\n

      Save All.<\/p>\n\n\n\n

      \u0427\u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435? \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u0448\u0435\u0439\u0434\u0435\u0440\u044b?? \u041d\u0435\u0442. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 – \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 Android-\u0435.<\/p>\n\n\n\n


      \n\n\n\n

      <\/p>\n","protected":false},"excerpt":{"rendered":"

      \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0433\u043e\u0442\u043e\u0432\u044b \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 (\u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445) \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u0432. \u0421\u0435\u0439\u0447\u0430\u0441 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c 2 (1 vertex \u0438 1 fragment), \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 (hard-coded) \u0432 \u043a\u043e\u0434. \u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u043d\u0435 \u043b\u0443\u0447\u0448\u0435\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043d\u043e \u0440\u0430\u0434\u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u043f\u0440\u0438\u043c\u0435\u0440\u0430 – \u0432\u043f\u043e\u043b\u043d\u0435 \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u043d\u043e\u0435. \u041c\u044b \u0436\u0435, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043c \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0438\u0445 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u044d\u043a\u0437\u0435\u0448\u043d\u0438\u043a\u0430. 1. \u0412 Windows File Explorer-\u0435 (\u043d\u0435 \u0432 VS), […]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-383","post","type-post","status-publish","format-standard","hentry","category-cross-platform-3d"],"_links":{"self":[{"href":"https:\/\/writingagame.ru\/index.php\/wp-json\/wp\/v2\/posts\/383","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/writingagame.ru\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/writingagame.ru\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/writingagame.ru\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/writingagame.ru\/index.php\/wp-json\/wp\/v2\/comments?post=383"}],"version-history":[{"count":17,"href":"https:\/\/writingagame.ru\/index.php\/wp-json\/wp\/v2\/posts\/383\/revisions"}],"predecessor-version":[{"id":1654,"href":"https:\/\/writingagame.ru\/index.php\/wp-json\/wp\/v2\/posts\/383\/revisions\/1654"}],"wp:attachment":[{"href":"https:\/\/writingagame.ru\/index.php\/wp-json\/wp\/v2\/media?parent=383"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/writingagame.ru\/index.php\/wp-json\/wp\/v2\/categories?post=383"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/writingagame.ru\/index.php\/wp-json\/wp\/v2\/tags?post=383"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}