рдмреНрд▓рд┐рдЯреНрдЬ.рдЗрдирд╛рдЗрди: рдПрд╕реЗрдЯ рд╕рд┐рд╕реНрдЯрдо



рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рд╕рдордЭреЗрдВ рдХрд┐ рдмреНрд▓рд┐рдЯреНрдЬ.рдмрд╛рдЗрди рдЗрдВрдЬрди рдХреА рд╕рдВрдкрддреНрддрд┐ рдкреНрд░рдгрд╛рд▓реА рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ , рд╣рдореЗрдВ рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рд╕рдВрдкрддреНрддрд┐ рдХреНрдпрд╛ рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рдкреНрд░рдгрд╛рд▓реА рд╕реЗ рд╣рдорд╛рд░рд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдПрдХ рдЧреЗрдо рдПрд╕реЗрдЯ рдПрдХ рдбрд┐рдЬрд┐рдЯрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдПрдХ рд╣реА рдбреЗрдЯрд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ, рдПрдХ рдЕрд╡рд┐рднрд╛рдЬреНрдп рдЗрдХрд╛рдИ рдЬреЛ рдЧреЗрдо рд╕рд╛рдордЧреНрд░реА рдХреЗ рднрд╛рдЧ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХреБрдЫ рдЧреБрдг рд╣реЛрддреЗ рд╣реИрдВред рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЙрдбрд▓ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдПрдХ рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рдХреБрдЫ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдкрд░ рдмрдирд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддреА рд╣реИред рдЖрд╕реНрддрд┐рдпреЛрдВ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдмрджрд▓реЗ рдореЗрдВ, рдПрдХ рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рдкреНрд░рдгрд╛рд▓реА рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓реЛрдб рдФрд░ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рдПрд╕реЗрдЯ рд╕рд┐рд╕реНрдЯрдо рдЧреЗрдо рдЗрдВрдЬрди рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЬреЛ рдЧреЗрдо рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рдлрд╛рджрд╛рд░ рд╕рд╣рд╛рдпрдХ рдмрди рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдЙрдирдХреЗ рдЬреАрд╡рди рдХреЛ рдирд░рдХ рдореЗрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рддрд╛рд░реНрдХрд┐рдХ рдирд┐рд░реНрдгрдп рдЗрд╕ "рдирд░рдХ" рдХреЛ рдПрдХ рд╕реНрдерд╛рди рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛, рдЕрдиреНрдп рдЯреАрдо рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдзреНрдпрд╛рди рд╕реЗ рдЗрд╕рдХреА рд░рдХреНрд╖рд╛ рдХрд░рдирд╛ред рд╣рдо рдЖрдкрдХреЛ рдЗрд╕ рд▓реЗрдЦ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдПрдВрдЧреЗ - рдЪрд▓реЛ рдЪрд▓реЗрдВ!

рд╡рд┐рд╖рдп рдкрд░ рдирд┐рдпреЛрдЬрд┐рдд рд▓реЗрдЦ:

  • рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдФрд░ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдЕрд╡рд▓реЛрдХрди рдХрд╛ рд╡рд┐рд╡рд░рдг
  • рдПрд╕реЗрдЯ рд▓рд╛рдЗрдл рд╕рд╛рдЗрдХрд┐рд▓
  • рд╡рд┐рд╕реНрддреГрдд AssetManager рд╡рд░реНрдЧ рдЕрд╡рд▓реЛрдХрди
  • рдИрд╕реАрдПрд╕ рдореЗрдВ рдПрдХреАрдХрд░рдг
  • GlobalAssetCache

рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ рдФрд░ рдХрд╛рд░рдг


рдПрд╕реЗрдЯ рд▓реЛрдбрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ рдПрдХ рдЪрдЯреНрдЯрд╛рди рдФрд░ рдПрдХ рдХрдард┐рди рдЬрдЧрд╣ рдХреЗ рдмреАрдЪ рдкреИрджрд╛ рд╣реБрдИ рдереАрдВред рдПрдХ рдирд┐рд╣рд╛рдИ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдереА рддрд╛рдХрд┐ рдпрд╣ рдмрд╛рд╣рд░реА рдХреЛрдб рд▓рд┐рдЦреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░реЗред рдЦреИрд░, рдпрд╛ рд▓рдЧрднрдЧ рдмрд╛рд╣рд░реА рдХреЛрдб рд▓рд┐рдЦреЗ рдмрд┐рдирд╛ред рд╣рдереМрдбрд╝рд╛ рд╣рдХреАрдХрдд рдмрди рдЧрдпрд╛ред рдФрд░ рдпрд╣рд╛рдВ рд╣рдордиреЗ рдЬреЛ рдХрд┐рдпрд╛, рдЙрд╕рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реБрдЖ:

  1. рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдореЗрдореЛрд░реА рдкреНрд░рдмрдВрдзрди , рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рд░рд┐рд▓реАрдЬрд╝ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЕрд░реНрдерд╛рддреН, рдЬреИрд╕реЗ рд╣реА рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдмрд╛рд╣рд░реА рд╡рд╕реНрддреБрдПрдВ рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ, рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдпрд╣рд╛рдБ рдкреНрд░реЗрд░рдгрд╛ рд╕рд░рд▓ рд╣реИ - рдХрдо рдХреЛрдб рд▓рд┐рдЦреЗрдВред рдХрдо рдХреЛрдб рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрдо рддреНрд░реБрдЯрд┐рдпрд╛рдБред
  2. , ( AssetManagerтАЩa). , . тАФ . , ┬л┬╗ .
    , , (). тАФ , . , , . , , . , , .
  3. . : . , .
  4. (shared) . , . , . ┬л┬╗ , .
  5. рдПрд╕реЗрдЯ рд▓реЛрдбрд┐рдВрдЧ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдВ ред рдХреЗрд╡рд▓ 3 рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕реНрддрд░ рд╣реИрдВ: рдЙрдЪреНрдЪ, рдордзреНрдпрдо, рдирд┐рдореНрдиред рдЙрд╕реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рднреАрддрд░, рдЕрдиреБрд░реЛрдз рдХреЗ рдХреНрд░рдо рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рд▓реЛрдб рдХреА рдЬрд╛рддреА рд╣реИред рдПрдХ рд╕реНрдерд┐рддрд┐ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ: рдПрдХ рдЦрд┐рд▓рд╛рдбрд╝реА "рд▓рдбрд╝рд╛рдИ рдХреЗ рд▓рд┐рдП" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕реНрддрд░ рдХреА рд▓реЛрдбрд┐рдВрдЧ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде рд╣реА, рд▓реЛрдбрд┐рдВрдЧ рд╕реНрдХреНрд░реАрди рдХреЗ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдХреЛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдбрд╛рдЙрдирд▓реЛрдб рдХрддрд╛рд░ рдореЗрдВ рдЖрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдХреБрдЫ рд╕реНрддрд░ рдХреА рд╕рдВрдкрддреНрддрд┐ рд╕реНрдкреНрд░рд╛рдЗрдЯ рд╕реЗ рдкрд╣рд▓реЗ рдХрддрд╛рд░ рдореЗрдВ рдЖ рдЧрдИ рдереА, рдЗрд╕рд▓рд┐рдП рдЦрд┐рд▓рд╛рдбрд╝реА рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдмреНрд▓реИрдХ рд╕реНрдХреНрд░реАрди рдкрд░ рджрд┐рдЦрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдордиреЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдирд┐рдпрдо рддреИрдпрд╛рд░ рдХрд┐рдпрд╛: "рдПрд╕реЗрдЯрдореИрдирдЧрд░ рдереНрд░реЗрдб рдкрд░ рдЬреЛ рдХреБрдЫ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд╡рд╣ рдПрд╕реЗрдЯрдореИрдирдЧрд░ рдереНрд░реЗрдб рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред" рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдКрдВрдЪрд╛рдИ рдХреЗ рдирдХреНрд╢реЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдорд╛рдирджрдВрдбреЛрдВ рдХрд╛ рдкрд░рд┐рджреГрд╢реНрдп рдФрд░ рдмрдирд╛рд╡рдЯ рддреИрдпрд╛рд░ рдХрд░рдирд╛, рдЬреАрдкреАрдпреВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдЬреЛрдбрд╝рдирд╛, рдЖрджрд┐ред

рдХреБрдЫ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг


рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдпрд╣ рд╕рдордЭрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ рдХрд┐ рдПрд╕реЗрдЯ рд▓реЛрдбрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╣рдореЗрдВ рджреЛ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдмреНрд▓рд┐рдЯреНрдЬ. рдЗрдВрдЬрди рдЗрдВрдЬрди рдореЗрдВ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ:

  • Type: рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд░рдирдЯрд╛рдЗрдо рдЬрд╛рдирдХрд╛рд░реАред рдпрд╣ рдкреНрд░рдХрд╛рд░ TypeC # рднрд╛рд╖рд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдорд╛рди рд╣реИ , рдЗрд╕ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдХрд┐ рдпрд╣ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: рдирд╛рдо рдЯрд╛рдЗрдк рдХрд░реЗрдВ, рдЬреИрд╕реЗ рдХрдИ рд╕рдВрдХреЗрдд is_floating, is_pointer, is_const, рдЖрджрд┐ред рд╡рд┐рдзрд┐ Type::instance<T>рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХреЗ рднреАрддрд░ рдПрдХ рд╕реНрдерд┐рд░ рд░рд┐рдЯрд░реНрди рджреЗрддрд╛ рд╣реИ const Type*, рдЬреЛ рдЖрдкрдХреЛ рдлреЙрд░реНрдо рдХреЗ рдЪреЗрдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИif (type == Type::instance<T>())
  • Any: рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рдЪрд▓ рдпрд╛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рдХрд╛рд░ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдкреИрдХреЗрдЬ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреИрдХреЗрдЬ рдкреИрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЬреНрдЮрд╛рди AnyрдХрд╛рдВрд╕реНрдЯреЗрдмрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддрд╛ рд╣реИ Type*ред AnyрдЕрдкрдиреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣реИрд╢ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЬрд╛рдирддрд╛ рд╣реИ, рдФрд░ рд╕рдорд╛рдирддрд╛ рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рднреА рдЬрд╛рдирддрд╛ рд╣реИред рд░рд╛рд╕реНрддреЗ рдХреЗ рд╕рд╛рде, рдпрд╣ рдЖрдкрдХреЛ рд╡рд░реНрддрдорд╛рди рдкреНрд░рдХрд╛рд░ рд╕реЗ рджреВрд╕рд░реЗ рддрдХ рд░реВрдкрд╛рдВрддрд░рдг рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдпрд╛ рдмрдврд╝рд╛рд╡рд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ рдХрд╛ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рд╣реИред

рд╕рднреА рд╕рдВрдкрддреНрддрд┐ рд╕реВрдЪреА рд▓реЛрдбрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рддреАрди рд╡рд░реНрдЧреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ AssetManager, AssetBase, IAssetSerializer:ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрди рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рдкрд░ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдмрд╛рд╣рд░реА рдХреЛрдб рдПрдХ рдЙрдкрдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ Asset<T>рдЗрд╕ рддрд░рд╣ рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

Asset = std::shared_ptr<T>

рдЬрд╣рд╛рдВ T рдПрдХ рдПрд╕реЗрдЯрдмреЗрд╕ рдпрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрдкрддреНрддрд┐ рд╣реИред рд╣рд░ рдЬрдЧрд╣ share_ptr рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирдВрдмрд░ 1 (рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдореЗрдореЛрд░реА рдкреНрд░рдмрдВрдзрди) рдХреА рдкреВрд░реНрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред

AssetManager- рдпрд╣ рдПрдХ рдкрд░рд┐рдорд┐рдд рд╡рд░реНрдЧ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡рд╛рд░рд┐рд╕ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╡рд░реНрдЧ рдХрд┐рд╕реА рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдВрдкрддреНрддрд┐ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИред рдпрд╣ AssetManagerрд╕рдВрдкрддреНрддрд┐ рдХреЗ рдмреАрдЪ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдкреЗрдбрд╝ рдХреЛ рднреА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдбрд┐рд╕реНрдХ рдкрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рдмрдВрдзрди, рд╕реБрдирддрд╛ рд╣реИ FileWatcherрдФрд░ рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рдкреБрдирдГ рд▓реЛрдб рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рдпрд╣ AssetManagerрдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИ, рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдп рдХрддрд╛рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЕрдиреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдереНрд░реЗрдбреНрд╕ рдХреЗ рд╕рд╛рде рд╕рднреА рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд░рддрд╛ рд╣реИ (рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рдЕрдиреБрд░реЛрдз рдХрд┐рд╕реА рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдереНрд░реЗрдб рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рд╕реНрдЯреНрд░реАрдо рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ)ред

рдПрдХ рд╣реА рд╕рдордп AssetManagerрдореЗрдВ рдПрдХ рдЕрдореВрд░реНрдд рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдЪрд▓ рд░рд╣реА рд╣реИAssetBase, рд╡рд╛рд░рд┐рд╕ рд╕реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрдкрддреНрддрд┐ рдмрдирд╛рдиреЗ рдФрд░ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ IAssetSerializerред рдореИрдВ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдмрд╛рдж рдХреЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ рдпрд╣ рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИред

рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕рдВрдЦреНрдпрд╛ 4 (рдПрд╕реЗрдЯ рд╢реЗрдпрд░рд┐рдВрдЧ) рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ, рд╕рдмрд╕реЗ рдЧрд░реНрдо рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ "рд╕рдВрдкрддреНрддрд┐ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдерд╛?" рд╕рдмрд╕реЗ рд╕рд░рд▓ рдФрд░ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рд╕реНрдкрд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдХреЗ рдкрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдирд┐рд░реНрдгрдп рдХрдИ рдЧрдВрднреАрд░ рд╕реАрдорд╛рдПрдБ рд▓рдЧрд╛рддрд╛ рд╣реИ:

  1. рд╕рдВрдкрддреНрддрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╛рдж рдХреЛ рдбрд┐рд╕реНрдХ рдкрд░ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдЕрдиреНрдп рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд░рдирдЯрд╛рдЗрдо рд╕рдВрдкрддреНрддрд┐ рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред
  2. . , GPUProgram (defines). , .
  3. , .
  4. .

рд╣рдо рдкреИрд░рд╛рдЧреНрд░рд╛рдл 3 рдФрд░ 4 рдХреЛ рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдорд╛рдирддреЗ рдереЗ, рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рд╕реЛрдЪрд╛ рднреА рдирд╣реАрдВ рдерд╛ рдХрд┐ рдпрд╣ рдХрд╛рдо рдЖ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдиреЗ рдмрд╛рдж рдореЗрдВ рд╕рдВрдкрд╛рджрдХ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдпрд╛ред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдордиреЗ рдПрдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рдЬреЛ рд╕реНрддрд░ рдкрд░ AssetManagerрдкреНрд░рдХрд╛рд░ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ Anyред AnyрдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдирд╛ рдЬрд╛рдирддрд╛ рд╣реИ IAssetSerializerред рдЦреБрдж AssetManagerрдХреЛ рдХреЗрд╡рд▓ рдХреБрдВрдЬреА рдХреЗ рдкреНрд░рдХрд╛рд░ рдФрд░ рд╡рд╛рд░рд┐рд╕ рдХреЗ рдмреАрдЪ рдХреЗ рд╕рдВрдмрдВрдз рдХреЛ рдЬрд╛рдирддрд╛ рд╣реИ IAssetSerializerред рдХрд┐рд╕реА рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рдЖрдорддреМрд░ рдкрд░ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЙрд╕реЗ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдФрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреА рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддреА рд╣реИред рдпрд╣ рд╕рдм рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣реЛрддрд╛ рд╣реИ:


class Texture: public AssetBase
{
public:
    struct PathKey
    {
        FilePath path;
        size_t hash() const;
        bool operator==(const PathKey& other);
    };

    struct MemoryKey
    {
        u32 width = 1;
        u32 height = 1;
        u32 level_count = 1;
        TextureFormat format = RBGA8;
        TextureType type = TEX_2D;
        Vector<Vector<u8*>> data; // Face<MipLevels<Image>>

        size_t hash() const;
        bool operator==(const MemoryKey& other);
    };
};

class TextureSerializer: public IAssetSerializer
{
};

class AssetManager final
{
public:
    template<typename T>
    Asset<T> get_asset(const Any& key, ...);
    Asset<AssetBase> get_asset(const Any& key, ...);
};

int main()
{
   ...
   Texture::PathKey key("/path_to_asset");
   Asset<Texture> asset = asset_manager->get_asset<Texture>(key);
   ...

   Texture::MemoryKey mem_key;
   mem_key.width = 128;
   mem_key.format = 128;
   mem_key.level_count = 1;
   mem_key.format = A8;
   mem_key.type = TEX_2D;
   Vector<u8*>& mip_chain = mem_key.data.emplace_back();
   mip_chain.push_back(generage_sdf_font());
   
   Asset<Texture> sdf_font_texture = asset_manager->get_asset<Texture>(mem_key);
};

рд╡рд┐рдзрд┐ hashрдФрд░ рддреБрд▓рдирд╛ рдСрдкрд░реЗрдЯрд░ рдХреЗ рдЕрдВрджрд░ PathKeyрд╕рдВрдмрдВрдзрд┐рдд рд╡рд░реНрдЧ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдХрд╛рдордХрд╛рдЬ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ Any, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдВрдЧреЗред

рддреЛ, рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ: рдХреЙрд▓ рдХреЗ рд╕рдордп, get_asset(key)рдХреБрдВрдЬреА рдХреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ Any, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ, рд╡рд┐рдзрд┐ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░ рджреЗрдЧрд╛ get_assetред рдЕрдЧрд▓рд╛, AssetManagerрддрд░реНрдХ рд╕реЗ рдХреБрдВрдЬреА рдХрд╛ рдкреНрд░рдХрд╛рд░ рд▓реЗрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╣реЛрдЧрд╛:

Type::instance<MyAsset::PathKey>

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕реЗ, рд╡рд╣ рдХреНрд░рдорд┐рдХ рд╡рд╕реНрддреБ рдХреЛ рдЦреЛрдЬреЗрдЧрд╛ рдФрд░ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдХреЗ рдмрд╛рдж рдХреЗ рд╕рднреА рд╕рдВрдЪрд╛рд▓рди (рдирд┐рд░реНрдорд╛рдг рдФрд░ рд▓реЛрдбрд┐рдВрдЧ) рдХреЛ рд╕реМрдВрдк рджреЗрдЧрд╛ред

AssetBase- рдпрд╣ рдЗрдВрдЬрди рдореЗрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рд╣реИред рдпрд╣ рд╡рд░реНрдЧ рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рдХреБрдВрдЬреА, рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ (рд▓реЛрдб, рдкрдВрдХреНрддрд┐рдмрджреНрдз, рдЖрджрд┐), рд╕рд╛рде рд╣реА рддреНрд░реБрдЯрд┐ рдкрд╛рда рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рдХреА рдЕрдиреБрдкрд▓рдмреНрдзрддрд╛ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдереЛрдбрд╝реА рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред

IAssetSerializer, рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рдЙрд╕ рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рддреИрдпрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рди рдХреЗрд╡рд▓ рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реИ:

  • рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рд╡рд╕реНрддреБ рдХрд╛ рдЖрд╡рдВрдЯрди рдФрд░ рдирд┐рдкрдЯрд╛рдиред
  • рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрдкрддреНрддрд┐ рд▓реЛрдб рдХрд░рдирд╛ред
  • рдлрд╝рд╛рдЗрд▓ рдкрдереЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд╝рд╛рдЗрд▓ рдмрджрд▓рдиреЗ рдкрд░ рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рдкреБрдирдГ рд▓реЛрдб рддрдВрддреНрд░ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реВрдЪреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ: рдкрдереЛрдВ рдХреА рд╕реВрдЪреА, рдФрд░ рдПрдХ рдкрде рдХреНрдпреЛрдВ рдирд╣реАрдВ? рд╕рд░рд▓ рд╕рдВрдкрддреНрддрд┐, рдмрдирд╛рд╡рдЯ рдХреА рддрд░рд╣, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рд╣рдо shader рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд░рд┐рдмреВрдЯ рди тАЛтАЛрдХреЗрд╡рд▓ рдпрджрд┐ shader рдкрд╛рда рдмрджрд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ shader рд╕реЗ рдЬреБрдбрд╝реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред
  • рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдбрд┐рд╕реНрдХ рдкрд░ рд╕рд╣реЗрдЬрдирд╛ред рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп рдФрд░ рдЦреЗрд▓ рдХреЗ рд▓рд┐рдП рд╕рдВрдкрддреНрддрд┐ рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╕рдордп рдЗрд╕рдХрд╛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рдФрд░ рдЖрдЦрд┐рд░реА рд╕рд╡рд╛рд▓ рдЬреЛ рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ: рдЖрдкрдХреЛ рдПрдХ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ / рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреА рдХреБрдВрдЬреА рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ? рдЪрд▓реЛ рдмрджрд▓реЗ рдореЗрдВ рдЗрд╕реЗ рд╕реБрд▓рдЭрд╛рддреЗ рд╣реИрдВред

рдПрдХ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ - рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреА рдЪрд╛рдмрд┐рдпрд╛рдБ


рдЖрдЗрдП рдПрдХ рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд▓реЗрдВ GPUProgram(рдЬреЛ рдХрд┐ рдПрдХ рдЫрд╛рдпрд╛рджрд╛рд░ рд╣реИ)ред рд╣рдорд╛рд░реЗ рдЗрдВрдЬрди рдореЗрдВ рдПрдХ рд╢реЗрдбрд░ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:

  1. Shader рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрдеред
  2. рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреА рд╕реВрдЪреАред
  3. рд╡рд╣ рдЪрд░рдг рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╢реЗрдб рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╢реАрд░реНрд╖, рдЯреБрдХрдбрд╝рд╛, рдЧрдгрдирд╛)ред
  4. рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдХрд╛ рдирд╛рдоред

рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдПрдХ рд╕рд╛рде рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдкрд░, рд╣рдореЗрдВ shader рдХреБрдВрдЬреА рдорд┐рд▓рддреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЦреЗрд▓ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдЧреЗрдо рдпрд╛ рдЗрдВрдЬрди рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди, рд╕реНрдХреНрд░реАрди рдкрд░ рдХреБрдЫ рдбрд┐рдмрдЧрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЕрдХреНрд╕рд░ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИ, рдХрднреА-рдХрднреА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╢реЗрдбрд░ рдХреЗ рд╕рд╛рдеред рдФрд░ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреЛрдб рдореЗрдВ рд╕реАрдзреЗ shader рдХрд╛ рдкрд╛рда рд▓рд┐рдЦрдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рджреВрд╕рд░реЗ рдкреНрд░рдХрд╛рд░ рдХреА рдХреБрдВрдЬреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдкрде рдХреЗ рдмрдЬрд╛рдп рдФрд░ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ shader рдХрд╛ рдкрд╛рда рд╕рдорд╛рд╣рд┐рдд рдХрд░реЗрдЧрд╛ред

рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: рдмрдирд╛рд╡рдЯред рдмрдирд╛рд╡рдЯ рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдбрд┐рд╕реНрдХ рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдлрд╝рд╛рдЗрд▓ ( PathKey) рдХреЗ рд▓рд┐рдП рдкрде рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред рд▓реЗрдХрд┐рди рд╣рдо рдмрдирд╛рд╡рдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕реЗ рднреА рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрд╛рдЗрдЯреНрд╕ ( MemoryKey) рдХреА рдПрдХ рд╕рд░рдгреА рд╕реЗ рдПрдХ рдмрдирд╛рд╡рдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ ред рддреАрд╕рд░реЗ рдкреНрд░рдХрд╛рд░ рдХреА рдХреБрдВрдЬреА рдПрдХ RenderTargetрдмрдирд╛рд╡рдЯ ( RTKey) рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреБрдВрдЬреА рд╣реЛ рд╕рдХрддреА рд╣реИ ред

рдХреБрдВрдЬреА рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╡рд┐рднрд┐рдиреНрди рдЧреНрд▓рд┐рдлрд╝ рд░реЗрдЦрд╛рдкреБрдВрдЬ рдЗрдВрдЬрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: stb (StbFontKey), FreeType (FTFontKet) рдпрд╛ рдПрдХ рд╕реНрд╡-рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рджреВрд░реА рдлрд╝реАрд▓реНрдб рдлрд╝реЙрдиреНрдЯ рдЬрдирд░реЗрдЯрд░ (SDFFontKey)ред

рдХреАрдлрд╝реНрд░реЗрдо рдПрдиреАрдореЗрд╢рди рд▓реЛрдб ( PathKey) рдпрд╛ рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ( MemoryKey)ред

рдПрдХ рд╕рдВрдкрддреНрддрд┐ - рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреА рдЪрд╛рдмрд┐рдпрд╛рдВ


рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ ParticleEffectрд╕рдВрдкрддреНрддрд┐ рд╣реИ рдЬреЛ рдХрдг рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рдирд┐рдпрдореЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕рдВрдкрд╛рджрдХ рд╣реИред рдЙрд╕реА рд╕рдордп, рд╕реНрддрд░ рд╕рдВрдкрд╛рджрдХ рдФрд░ рдХрдг рд╕рдВрдкрд╛рджрдХ рдПрдХ рдмрд╣реБ-рд╡рд┐рдВрдбреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдПрдХ рд╕реНрддрд░ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдореЗрдВ рдХрдгреЛрдВ рдХрд╛ рдПрдХ рд╕реНрд░реЛрдд рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реНрд╡рдпрдВ рдкреНрд░рднрд╛рд╡ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реБрдП рд╕реНрддрд░ рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдкреНрд░рднрд╛рд╡ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдХреБрдВрдЬреА рд╣реИ, рддреЛ рдкреНрд░рднрд╛рд╡ рд╕рдВрдкрд╛рджрди рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдФрд░ рд╕реНрддрд░ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рднрд╛рд╡ рд╡рд╕реНрддреБ рдПрдХ рдФрд░ рдПрдХ рд╣реА рд╣реИред рдкреНрд░рднрд╛рд╡ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдХрд┐рдП рдЧрдП рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрди рддреБрд░рдВрдд рд╕реНрддрд░ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдЗрдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ:

  1. , , , . , .
  2. - , . , .

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рд╕реНрдерд┐рддрд┐ рд╕рдВрднрд╡ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреА рдЪрд╛рдмрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд┐рд╕реНрдХ рдкрд░ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрдкрддреНрддрд┐ рдмрдирд╛рддреЗ рд╣реИрдВред рдХреБрдВрдЬреА рдХреЗ "рдЧреЗрдо" рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдЧреЗрдо рдореЗрдВ рддреНрд╡рд░рд┐рдд рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдПрдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВред "рд╕рдВрдкрд╛рджрдХреАрдп" рдкреНрд░рдХрд╛рд░ рдХреА рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдПрдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рд╕рдВрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдЗрд╕ рддрд░рд╣ рд╕реЗ, рд╣рдорд╛рд░реЗ рд╕рдВрдкрд╛рджрдХ BlendTreeрдХрдВрдХрд╛рд▓ рдПрдирд┐рдореЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕рдВрдкрд╛рджрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ ред рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдХреБрдВрдЬреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рдкреНрд░рдгрд╛рд▓реА рд╣рдореЗрдВ рдПрдХ рдИрдорд╛рдирджрд╛рд░ рдкреЗрдбрд╝ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдмрдирд╛рддреА рд╣реИ рдФрд░ рдмрджрд▓рддреЗ рдЯреЛрдкреЛрд▓реЙрдЬреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХреЗрддреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╣реИ, рдЬреЛ рд╕рдВрдкрд╛рджрди рдХрд░рддреЗ рд╕рдордп рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЦреЗрд▓ рдореЗрдВ рдзреАрд░реЗ-рдзреАрд░реЗред рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреА рдХреБрдВрдЬреА рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдПрдХ рдФрд░ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрдкрддреНрддрд┐ рдмрдирд╛рддрд╛ рд╣реИ: рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдкреЗрдбрд╝ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреЛрдИ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдФрд░ рдкреЗрдбрд╝ рдЦреБрдж рдХреЛ рдиреЛрдбреНрд╕ рдХреЗ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдиреЛрдб рд╕реЗ рд▓рд┐рдВрдХ рд╕рд░рдгреА рдореЗрдВ рдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ рд╣реИред

рдЙрдкрд╕рдВрд╣рд╛рд░


рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдХреЛ рдЙрди рд╕рдорд╛рдзрд╛рдиреЛрдВ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЗрдВрдЬрди рдХреЗ рдЖрдЧреЗ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

  1. рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдХрд╕реНрдЯрдо рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдПрдХ рдлрд╝рд╛рдЗрд▓ рдкрде рдирд╣реАрдВред
  2. рдХреЗрд╡рд▓ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдореЛрдб рдореЗрдВ рдПрд╕реЗрдЯ рд▓реЛрдбрд┐рдВрдЧред
  3. рдПрд╕реЗрдЯ рд╢реЗрдпрд░рд┐рдВрдЧ (рдПрдХ рдПрд╕реЗрдЯ - рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреА рдЪрд╛рдмрд┐рдпрд╛рдВ) рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рдЪреАрд▓реА рдпреЛрдЬрдирд╛ред
  4. рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛ рд╕реНрд░реЛрддреЛрдВ (рдПрдХ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдореЗрдВ рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреА рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрдкрддреНрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред

рдЖрдк рд╕реАрдЦреЗрдВрдЧреЗ рдХрд┐ рдЗрди рдирд┐рд░реНрдгрдпреЛрдВ рдиреЗ рдЕрдЧрд▓реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рдХреЛрдб рдФрд░ рдмрд╛рд╣рд░реА рджреЛрдиреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ред

рд▓реЗрдЦрдХ:Exmix

All Articles