рдПрдХ рдмрд╛рд░ рдЬрдм рдореИрдВ рд▓реБрджреБрдо рдбреЗрдпрд░ рдХреА рддреИрдпрд╛рд░реА рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЧреЗрдо рдмрдирд╛рдпрд╛, рдЬрд╣рд╛рдВ рдореИрдВрдиреЗ рдкрд┐рдХреНрд╕реЗрд▓ рд╢реЗрдбреНрд╕ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ (рдЕрдиреНрдпреЛрдВ рдХреЛ рдлреЗрдЬрд░ рдЗрдВрдЬрди рдореЗрдВ рдирд╣реАрдВ рд▓рд╛рдпрд╛ рдЧрдпрд╛)ред
рд╢реЗрдб рдХреНрдпрд╛ рд╣реИрдВ?рд╢реЗрдбрд░реНрд╕ GLSL C- рдЬреИрд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реИрдВ рдЬреЛ рдПрдХ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХрд╛рд░реНрдб рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╢реЗрдбреНрд╕ рд╣реИрдВ, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рдкрд┐рдХреНрд╕реЗрд▓ рд╢реЗрдбреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рд╡реЗ рднреА "рдЯреБрдХрдбрд╝реЗ", рдЯреБрдХрдбрд╝реЗ рд╡рд╛рд▓реЗ рд╢реЗрдбреНрд╕) рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдЗрд╕ рд░реВрдк рдореЗрдВ рдмрд╣реБрдд рдореЛрдЯреЗ рддреМрд░ рдкрд░ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
color = pixelShader(x, y, ...other attributes)
рдпрд╛рдиреА рдПрдХ рд╢реЗрдбрд░ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдЫрд╡рд┐ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд░рдВрдЧ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдпрд╛ рдкрд░рд┐рд╖реНрдХреГрдд рдХрд░рддрд╛ рд╣реИред
рдЖрдк рд╣рдм рдкрд░ рдПрдХ рдЕрдиреНрдп рд▓реЗрдЦ рдкрд░ рдкрд░рд┐рдЪрдпрд╛рддреНрдордХ рд▓реЗрдЦ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ - https://habr.com/post/333002/
рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдПрдХ рджреЛрд╕реНрдд рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛, рдФрд░ рдЙрд╕рд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреЛ рдкреНрд░рд╢реНрди рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ "рдХреНрдпрд╛ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ?"
рдирд╣реАрдВ, рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рдерд╛ред Shader рдХреЛрдб рдХреЛ рдзреНрдпрд╛рди рд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдПрдХ рдЧрдгрдирд╛ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА:
if (t < M) { realColor = mix(color1,color2, pow(1. - t / R1, 0.5)); }
рдХреНрдпреЛрдВрдХрд┐ рдЪреВрдБрдХрд┐ рдирд┐рд░рдВрддрд░ R1 M рд╕реЗ рдХрдо рдерд╛, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ pow рдХреЗ рдкрд╣рд▓реЗ рддрд░реНрдХ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд╢реВрдиреНрдп рд╕реЗ рднреА рдХрдо рдерд╛ред рдирдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рд╡рд░реНрдЧрдореВрд▓ рдПрдХ рд░рд╣рд╕реНрдпрдордпреА рдЪреАрдЬ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдЬреАрдПрд▓рдПрд╕рдПрд▓ рдорд╛рдирдХ рдХреЗ рд▓рд┐рдПред рдореЗрд░рд╛ рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рднреНрд░рдорд┐рдд рдирд╣реАрдВ рдерд╛, рдФрд░ рдпрд╣ рдХрд┐рд╕реА рддрд░рд╣ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЧрдпрд╛ (рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдЗрд╕реЗ рдкреЙрд╡ 0 рд╕реЗ рд▓реМрдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛), рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рджреЛрд╕реНрдд рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрдкрд╛рдареНрдп рд╣реЛ рдЧрдпрд╛ред
рдФрд░ рдлрд┐рд░ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛: рдХреНрдпрд╛ рдореИрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдРрд╕реА рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдмрдЪ рд╕рдХрддрд╛ рд╣реВрдВ? рдХреЛрдИ рднреА рдЧрд▓рддрд┐рдпреЛрдВ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡реЗ рдЬреЛ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдкреБрди: рдкреЗрд╢ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЖрдк GLSL рдХреЗ рд▓рд┐рдП рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗред рдЗрд╕реА рд╕рдордп, рд╢реЗрдбрд░ рдХреЗ рдЕрдВрджрд░ рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИрдВ - рдЧреБрдгрд╛, рднрд╛рдЧ, рд╕рд╛рдЗрди, рдХреЛрд╕рд╛рдЗрди ... рдХреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдпрд╣ рдореВрд▓реНрдпреЛрдВ рдХреА рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╕реАрдорд╛ рд╕реЗ рдЖрдЧреЗ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИ?
рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ GLSL рдХреЗ рд▓рд┐рдП рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рд╣реБрдЖ - рдЖрдк рдЗрд╕реЗ рдХрдЯ рдХреЗ рдиреАрдЪреЗ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВ рдЖрдкрдХреЛ рддреБрд░рдВрдд рдЪреЗрддрд╛рд╡рдиреА рджреВрдВрдЧрд╛: рдореБрдЭреЗ рдХреЛрдИ рддреИрдпрд╛рд░ рдЙрддреНрдкрд╛рдж рдирд╣реАрдВ рдорд┐рд▓рд╛, рдХреЗрд╡рд▓ рдПрдХ рд╢реИрдХреНрд╖рд┐рдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдкред
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдореМрдЬреВрджрд╛ рд▓реЗрдЦреЛрдВ рдХрд╛ рдереЛрдбрд╝рд╛ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ рд╣реИ (рдФрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╖рдп рдХреЛ рдореВрд▓реНрдп рд╢реНрд░реЗрдгреА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ), рдореБрдЭреЗ рдЦреБрд╢реА рдереА рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ GLSL рдереА, рди рдХрд┐ рдХреБрдЫ рдЕрдиреНрдп рднрд╛рд╖рд╛ред рдЦреБрдж рдХреЗ рд▓рд┐рдП рдиреНрдпрд╛рдпрд╛рдзреАрд╢:
- рдХреЛрдИ "рдЧрддреНрдпрд╛рддреНрдордХрддрд╛" - рдХрд╛рд░реНрдпреЛрдВ, рдЗрдВрдЯрд░рдлреЗрд╕, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдиреБрдорд╛рдирд┐рдд рдкреНрд░рдХрд╛рд░ рдЖрджрд┐ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВред
- рдХреЛрдИ рдбрд╛рдпрд░реЗрдХреНрдЯ рдореЗрдореЛрд░реА рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдирд╣реАрдВ
- рдХреЛрдИ рдореЙрдбреНрдпреВрд▓, рд▓рд┐рдВрдХрд┐рдВрдЧ, рджреЗрд░ рд╕реЗ рдмрд╛рдзреНрдпрдХрд╛рд░реА - shader рдХрд╛ рд╕рдВрдкреВрд░реНрдг рд╕реНрд░реЛрдд рдХреЛрдб рдЙрдкрд▓рдмреНрдз рд╣реИ
рд░реЗрдВрдЬ рдЖрдо рддреМрд░ рдкрд░ рдЗрдирдкреБрдЯ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдиреА рдЬрд╛рддреА рд╣реИрдВ - рдХреБрдЫ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░, рдФрд░ рд╡реЗ рдПрдХ рдлреНрд▓реЛрдЯ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдШреВрдорддреЗ рд╣реИрдВред рдЗрдВрдЯ / рдмреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрдирдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЗрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ
- ifs рдФрд░ рд▓реВрдкреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг)ред рдЫреЛрд░реЛрдВ, рдпрджрд┐ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЕрдХреНрд╕рд░ рдПрдХ рд╕рд░рдгреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдиреЗ рдпрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рднрд╛рд╡ рдХреЛ рдХрдИ рдмрд╛рд░ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдХрд╛рдЙрдВрдЯрд░ рд╣реЛрддреЗ рд╣реИрдВред рдЬреАрдПрд▓рдПрд╕рдПрд▓ (рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ) рдореЗрдВ рдХреЛрдИ рднреА рдЗрддрдирд╛ рдбрд░рд╛рд╡рдирд╛ рдирд╣реАрдВ рд▓рд┐рдЦреЗрдЧрд╛ред
// - https://homepages.dcc.ufmg.br/~fernando/classes/dcc888/ementa/slides/RangeAnalysis.pdf k = 0 while k < 100: i = 0 j = k while i < j: i = i + 1 j = j тАУ 1 k = k + 1
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЬреАрдПрд▓рдПрд╕рдПрд▓ рдХреА рд╕реАрдорд╛рдУрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдХрд╛рд░реНрдп рд╣рд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд▓рдЧрддрд╛ рд╣реИред рдореБрдЦреНрдп рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
- shader рдХреЛрдб рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВ рдФрд░ рдХрд┐рд╕реА рднреА рд╡реИрд░рд┐рдПрдмрд▓ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рд╡рд╛рд▓реЗ рдЖрджреЗрд╢реЛрдВ рдХрд╛ рдПрдХ рдХреНрд░рдо рдмрдирд╛рдПрдВ
- рд╡реИрд░рд┐рдПрдмрд▓ рдХреЗ рд▓рд┐рдП рд╢реБрд░реБрдЖрддреА рд░реЗрдВрдЬ рдХреЛ рдЬрд╛рдирдирд╛, рдЕрдиреБрдХреНрд░рдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдирд╛, рдЬрдм рд╡реЗ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛
- рдпрджрд┐ рд╕реАрдорд╛ рдХрд┐рд╕реА рднреА рджреА рдЧрдИ рд╕реАрдорд╛рдУрдВ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛ рдкрд╛рдЙ рдореЗрдВ рдЖ рд╕рдХрддреА рд╣реИ, рдпрд╛ 1 рд╕реЗ рдЕрдзрд┐рдХ рдХреБрдЫ "рдЖрдЙрдЯрдкреБрдЯ рд░рдВрдЧ" gl_FragColor рд▓рд╛рд▓ рдШрдЯрдХ рдореЗрдВ рдЖ рдЬрд╛рдПрдЧрд╛), рддреЛ рдЖрдкрдХреЛ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рджрд┐рдЦрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рдкреНрд░рдпреБрдХреНрдд рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпрд╛рдБ
рдпрд╣рд╛рдВ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд▓рдВрдмреА рдФрд░ рджрд░реНрджрдирд╛рдХ рдкрд╕рдВрдж рдереАред рдПрдХ рддрд░рдл, рдореЗрд░рд╛ рдореБрдЦреНрдп рджрд╛рдпрд░рд╛ WebGL shaders рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╕рдм рдХреБрдЫ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПред рджреВрд╕рд░реА рдУрд░, рдореИрдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдлреЗрдЬрд░ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдФрд░ рдпреВрдирд┐рдЯреА рдпрд╛ рд▓реАрдмреАрдбреАрдПрдХреНрд╕ рдЬреИрд╕реЗ рджреВрд╕рд░реЗ рдЗрдВрдЬрди рдХреЛ рдЖрдЬрдорд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред рд╢реЗрдб рднреА рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛ рдЬрд╛рдПрдЧрд╛ред
рдФрд░ рддреАрд╕рд░реЗ рд╣рд╛рде рдкрд░, рдХрд╛рд░реНрдп рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдордиреЛрд░рдВрдЬрди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдФрд░ рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдордиреЛрд░рдВрдЬрди рдЪрд┐рдбрд╝рд┐рдпрд╛рдШрд░ рд╣реИред рдЗрд╕рд▓рд┐рдП:
- рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ GLSL рдХреЛрдб рдкрд╛рд░реНрд╕рд┐рдВрдЧред рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдмрд╣реБрдд рдЬрд▓реНрджреА рд╕реЗ рдПрдПрд╕рдЯреА рдкрд░ GLSL рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рдорд┐рд▓ рдЧрдпрд╛, рдФрд░ рдкрд░реАрдХреНрд╖рдг рдпреВрдЖрдИ рд╡реЗрдм рдЖрдзрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИред рдПрдПрд╕рдЯреА рдЖрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ ...
- ... рджреВрд╕рд░рд╛ рднрд╛рдЧ, рдЬреЛ C ++ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ WebAssembly рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рд╣реИред рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛: рдЕрдЧрд░ рдореИрдВ рдЕрдЪрд╛рдирдХ рдЗрд╕ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЗрдВрдЬрди рдореЗрдВ рдмрд╛рдВрдзрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рддреЛ рд╕реА ++ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдпрд╣ рд╕рдмрд╕реЗ рд╕рд░рд▓ рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЯреВрд▓рдХрд┐рдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж- рдореИрдВрдиреЗ рдореБрдЦреНрдп рдЖрдИрдбреАрдИ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛрдб рд▓рд┐рдпрд╛ рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рдЗрд╕рд╕реЗ рдЦреБрд╢ рд╣реВрдВред рдореБрдЭреЗ рдереЛрдбрд╝реА рд╕реА рдЦреБрд╢реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╕рдордп Ctrl + рдХреНрд▓рд┐рдХ рдХреЛ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕реНрд╡рдд: рдкреВрд░реНрдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рджреЛрдиреЛрдВ рдлрд╝рдВрдХреНрд╢рди C ++ рдФрд░ JS рджреЛрдиреЛрдВ рдореЗрдВ рдареАрдХ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╡реИрд╕реЗ, рд╡рд┐рднрд┐рдиреНрди IDEs рдХреЛ рдЖрдкрд╕ рдореЗрдВ рди рдмрджрд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рднреА рдмрд╣реБрдд рдЕрдЪреНрдЫреА рд╣реИред
- C ++ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, WebAssembly рдЪреАрдпрд░рдк рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (рдпрд╣ рднреБрдЧрддрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдУрдкрди-рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдореБрдлреНрдд рд╣реИ)ред рдореБрдЭреЗ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реБрдИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЗрд╕рдиреЗ рдХреЛрдб рдХреЛ рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЧрд▓рддреА рдХрд┐рд╕рдХреА рд╣реИ - рдЦреБрдж рдХреЛ рдпрд╛ рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП рдХреНрд▓реИрдВрдЧ рдХрдВрдкрд╛рдЗрд▓рд░ред
- C ++ рдореЗрдВ рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреЗ рдкреБрд░рд╛рдиреЗ gtest рдХреЛ рд▓рд┐рдпрд╛
- рдмрдВрдбрд▓ рдореЗрдВ js рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдорд╛рдЗрдХреНрд░реЛрдмрдВрдбрд▓ рд▓рд┐рдпрд╛ред рдЙрдиреНрд╣реЛрдВрдиреЗ рдореЗрд░реА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд┐рдпрд╛ "рдореБрдЭреЗ 1 рдПрдирдкреАрдПрдо рдкреИрдХреЗрдЬ рдФрд░ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЭрдВрдбреЗ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ" рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛, рдЕрдлрд╕реЛрд╕ред рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдиреЗ рд╡рд╛рд▓реА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдВрджреЗрд╢
[Object object]
рд╕рд╛рде рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╕рдордп рдХрд┐рд╕реА рднреА рддреНрд░реБрдЯрд┐ рдкрд░ рдХреНрд░реИрд╢ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдмрд╣реБрдд рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рд╕рдм рдХреБрдЫ, рдЕрдм рдЖрдк рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдореЙрдбрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕реНрдореГрддрд┐ рдореЗрдВ рдЙрди рдЪрд░реЛрдВ рдХреА рд╕реВрдЪреА рд░рдЦрддрд╛ рд╣реИ рдЬреЛ рд╢реИрдбрд░ рдореЗрдВ рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╡рд░реНрддрдорд╛рди рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рдиреЛрдВ (рдЬреИрд╕реЗ [0,1]
рдпрд╛ [1,тИЮ)
рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЗрд╕ рддрд░рд╣ рдПрдХ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ:
cmdId: 10 opCode: sin arguments: [1,2,-,-,3,4,-,-]
рдпрд╣рд╛рдВ рд╣рдо рдкрд╛рдк рдлрд╝рдВрдХреНрд╢рди рдХрд╣рддреЗ рд╣реИрдВ, рдЖрдИрдбреА = 3 рдФрд░ 4 рд╡рд╛рд▓реЗ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЛ рдЗрд╕реЗ рдЦрд┐рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдо рдЪрд░ 1 рдФрд░ 2 рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХреЙрд▓ GLSL-th рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ:
vec2 a = sin(b)
рдЦрд╛рд▓реА рддрд░реНрдХреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ ("-" рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд)ред GLSL рдореЗрдВ, рд▓рдЧрднрдЧ рд╕рднреА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдп рдЗрдирдкреБрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реЗрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рднрд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддред sin(float)
, sin(vec2)
, sin(vec3)
, sin(vec4)
ред рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕рднреА рдЕрддрд┐рднрд╛рд░рд┐рдд рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдПрдХ рд░реВрдк рдореЗрдВ рд▓рд╛рддрд╛ рд╣реВрдВ - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ sin(vec4)
ред
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ
cmdId: 10 branchId: 1 variable: 2 range: [-1,1]
рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ "рд╢рд╛рдЦрд╛ 1 рдореЗрдВ рд▓рд╛рдЗрди 10 рдореЗрдВ рдЪрд░ 2 рдореЗрдВ -1 рд╕реЗ 1 рд╕рдорд╛рд╡реЗрд╢реА рдХреА рд╕реАрдорд╛ рд╣реИ" (рд╣рдо рд╢рд╛рдЦрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ)ред рдЕрдм рдЖрдк рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдорд╛рдиреЛрдВ рдХреА рд╢реНрд░реЗрдгреА рдХреЛ рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рдЙрдЬрд╛рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдЪреНрдЫреА рд╢реБрд░реБрдЖрдд
рдЬрдм рдПрдПрд╕рдЯреА рдкреЗрдбрд╝ рдкрд╣рд▓реЗ рд╣реА рдЖрджреЗрд╢реЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдмрджрд▓рдирд╛ рд╢реБрд░реВ рдХрд░ рдЪреБрдХрд╛ рд╣реИ, рддреЛ рдорд╛рдирдХ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдЙрдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╣реИрдВ (рдФрд░ рдЙрдирдХреЗ рдкрд╛рд╕ рдУрд╡рд░рд▓реЛрдб рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рднреА рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рд▓рд┐рдЦрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдЙрдирдХреЗ рдкрд╛рд╕ рдЕрдиреБрдорд╛рдирд┐рдд рд░реЗрдВрдЬ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдореЗрд╢рди рд╣реИрдВред рдЖрдЗрдП, рдРрд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рд╛рдордиреЗ рдЖрддрд╛ рд╣реИ:
uniform float angle; // -> (-тИЮ,тИЮ) //... float y = sin(angle); // -> [-1,1] float ynorm = 1 + y; // -> [0,2] gl_FragColor.r = ynorm / 2.; // -> [0,1]
рдЖрдЙрдЯрдкреБрдЯ рд░рдВрдЧ рдХрд╛ рд▓рд╛рд▓ рдЪреИрдирд▓ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╕реАрдорд╛ рдХреЗ рднреАрддрд░ рд╣реИ, рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИред
рдпрджрд┐ рдЖрдк рдЕрдзрд┐рдХ рдирд┐рд░реНрдорд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдзреЗ рд╢реЗрдбреНрд╕ рдХреЗ рд▓рд┐рдП, рдРрд╕рд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд▓реЗрдХрд┐рди рджреВрд╕рд░реА рдЫрдорд╛рд╣реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ - рд╢рд░реНрддреЛрдВ, рдЫреЛрд░реЛрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде?
рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдРрд╕реЗ shader рдХреЛ рд▓реЗрдВред
uniform sampler2D uSampler; uniform vec2 uv;
рдЪрд░ рдХреЛ рдмрдирд╛рд╡рдЯ рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдЪрд░ рдХрд╛ рдореВрд▓реНрдп 0 рд╕реЗ 1 рддрдХ рд╣реИред
рдЖрдк рд╕рд░рд▓ рддрд░реАрдХреЗ рд╕реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ "рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рдПрдХрдЬреБрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ" - рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕реАрдорд╛ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ рдФрд░ рдХреБрд▓ рдХреЛ рджреЗрдВред рдпрджрд┐ рд╢рд╛рдЦрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ k = [0,2]
, рдФрд░ рджреВрд╕рд░реА рд╢рд╛рдЦрд╛ рдХреЗ рд▓рд┐рдП, k = [0,1]
ред рдпрджрд┐ рдЖрдк рдЧрдардмрдВрдзрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ [0,2]
, рдФрд░ рдЖрдкрдХреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ 1 рд╕реЗ рдЕрдзрд┐рдХ рдореВрд▓реНрдп gl_FragColor
рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рд░рдВрдЧ рдореЗрдВ gl_FragColor
ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЧрд▓рдд рдЕрд▓рд╛рд░реНрдо рд╣реИ, рдФрд░ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд▓рд┐рдП рдЭреВрдареЗ рдЕрд▓рд╛рд░реНрдо рд╕реЗ рдмрджрддрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ - рдЕрдЧрд░ рдпрд╣ "рднреЗрдбрд╝рд┐рдпрд╛" рдХреЗ рдкрд╣рд▓реЗ рд░реЛрдиреЗ рдХреЗ рдмрд╛рдж рдмрдВрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рджрд╕рд╡реАрдВ рдХреЗ рдмрд╛рдж рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред
рддреЛ, рд╣рдореЗрдВ рджреЛрдиреЛрдВ рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рджреЛрдиреЛрдВ рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рд╣рдореЗрдВ рдЪрд░ рдХреА рд╕реАрдорд╛ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ a
(рд╣рд╛рд▓рд╛рдВрдХрд┐ рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдмрджрд▓рд╛ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИ)ред рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
рд╢рд╛рдЦрд╛ 1:
if (a < 0.5) {
рд╢рд╛рдЦрд╛ 2:
if (a >= 0.5) {
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЬрдм рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕реАрдорд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рд╢рд╛рдЦрд╛рдПрдВ (рдмреНрд░рдВрдЪ) рдмрдирд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд╣ рд╕реНрд░реЛрдд рдЪрд░ рдХреА рд╕реАрдорд╛ рдХреЛ рдкрд░рд┐рд╖реНрдХреГрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрджреЗрд╢реЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдФрд░ рдиреАрдЪреЗ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╢рд╛рдЦрд╛рдПрдВ рдЗрдл-рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВред рдЬрдм рдПрдХ рд╡реИрд░рд┐рдПрдмрд▓ рдХреА рдПрдХ рд╢реНрд░реЗрдгреА рдХреЛ рдЙрдк-рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╢рд╛рдЦрд╛рдПрдВ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВ рдФрд░ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рд╢рд░реНрдд рд╡рд┐рд╡рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪрд░рдг рдлрд╝рдВрдХреНрд╢рди рднреА рд╢рд╛рдЦрд╛рдПрдВ рдмрдирд╛рддрд╛ рд╣реИред рдЕрдЧрд▓рд╛ GLSL рд╢реЗрдбрд░ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдмреНрд░рд╛рдВрдЪрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдЬреЛ, рд╡реИрд╕реЗ, рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдмреЗрд╣рддрд░ рд╣реИ)ред
float a = texture2D(uSampler, uv).a; float k = mix(a * 2., 1. - a, step(0.5, a)); gl_FragColor = vec4(1.) * k;
рдЪрд░рдг рдлрд╝рдВрдХреНрд╢рди 0 рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ <0.5 рдФрд░ 1 рдЕрдиреНрдпрдерд╛ред рдЗрд╕рд▓рд┐рдП, рдпрд╣рд╛рдВ рд╢рд╛рдЦрд╛рдПрдВ рднреА рдмрдирд╛рдИ рдЬрд╛рдПрдВрдЧреА - рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рдорд╛рдиред
рдЕрдиреНрдп рдЪрд░ рдХрд╛ рд╢реЛрдзрди
рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
float a = texture2D(uSampler, uv).a;
рдпрд╣рд╛рдБ рдХреА рдмрд╛рд░реАрдХрд┐рдпрд╛рдБ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ: рдЪрд░ b
рд╕рдВрдмрдВрдз рдореЗрдВ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЪрд░ рдХреЗ рд╕рд╛рде рдЧрдгрдирд╛рдПрдБ рд╣реЛрддреА рд╣реИрдВред рдпрд╣реА рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рд╢рд╛рдЦрд╛ рдХреЗ рдЕрдВрджрд░ рд░реЗрдВрдЬ b
рдХрд╛ рдПрдХ рд╕рд╣реА рдореВрд▓реНрдп рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рд░реЗрдВрдЬ рдХрд╛ рдореВрд▓ рдореВрд▓реНрдп, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрд▓рдд рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рджреЗрдЦрд╛ рдХрд┐ рд░реЗрдВрдЬ b
рдХреЛ a
рд╕реЗ рдЧрдгрдирд╛ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрджрд┐ рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдпрд╛рдж рд╣реИ, рддреЛ рдмреНрд░рд╛рдВрдЪ рдХрд░рддреЗ рд╕рдордп, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕рднреА рд╕реНрд░реЛрдд рдЪрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЕрджреГрд╢реНрдп рдЧрдгрдирд╛ рдХрд░рдХреЗ рдЕрдкрдиреА рд╕реАрдорд╛ рдХреЛ рдкрд░рд┐рд╖реНрдХреГрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдХрд╛рд░реНрдп рдФрд░ рд▓реВрдкреНрд╕
GLSL рдореЗрдВ рд╡рд░реНрдЪреБрдЕрд▓ рдореЗрдердбреНрд╕, рдлрдВрдХреНрд╢рди рдкреЙрдЗрдВрдЯрд░реНрд╕ рдпрд╛ рд░рд┐рдХрд░реНрд╕рд┐рд╡ рдХреЙрд▓реНрд╕ рднреА рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рд░ рдлрдВрдХреНрд╢рди рдХреЙрд▓ рдЕрджреНрд╡рд┐рддреАрдп рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХреЙрд▓ (рдЗрдирд▓рд╛рдЗрди, рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ) рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢рд░реАрд░ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣реИред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЖрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛ред
рдпрд╣ рд╕рд╛рдЗрдХрд┐рд▓ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рдЬреАрдПрд▓рдПрд╕рдПрд▓ рд▓реВрдк рдХреЗ рд▓рд┐рдП рд╕реА-рд▓рд╛рдЗрдХ рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░, рдЫреЛрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ:
for (int i = 0; i < 12; i++) {}
рдЗрд╕ рддрд░рд╣ рдХреЗ рдЪрдХреНрд░ "рддреИрдирд╛рддреА" рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН рд▓реВрдк рдХреЗ рд╢рд░реАрд░ рдХреЛ рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ 12 рдмрд╛рд░ рдбрд╛рд▓реЗрдВред рдирддреАрдЬрддрди, рд╕реЛрдЪрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдореИрдВрдиреЗ рдЕрдм рддрдХ рдХреЗрд╡рд▓ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИред
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдкреБрдирдГ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдЯреБрдХрдбрд╝реЗ (рдЬреИрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдмреЙрдбреА рдпрд╛ рд▓реВрдк) рдХреЛ рдпрд╛рдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдЖрджреЗрд╢реЛрдВ рдХреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдПрдХ рдзрд╛рд░рд╛ рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдкреЙрдк рдЕрдк рдХрд░реЗрдВ
рд╕рдорд╕реНрдпрд╛ # 1: рдХрдард┐рдирд╛рдИ рдпрд╛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрдерддрд╛
рдКрдкрд░, рд╣рдордиреЗ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХреА, рдЬрдм рдПрдХ рдЪрд░ рдХреЗ рдорд╛рдиреЛрдВ рдХреЛ рдкрд░рд┐рд╖реНрдХреГрдд рдХрд░рддреЗ рд╣реБрдП, рд╣рдордиреЗ рджреВрд╕рд░реЗ рдЪрд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рд╛ред рдФрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЬреЛрдбрд╝ / рдШрдЯрд╛рд╡ рдЬреИрд╕реЗ рдСрдкрд░реЗрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди, рдХрд╣рддреЗ рд╣реИрдВ, рддреНрд░рд┐рдХреЛрдгрдорд┐рддрд┐ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдРрд╕реА рд╕реНрдерд┐рддрд┐:
float a = getSomeValue(); if (sin(a) > 0.) {
рдЕрдВрджрд░ рдХреА рд╕реАрдорд╛ рдХреА рдЧрдгрдирд╛ рдХреИрд╕реЗ рдХрд░реЗрдВ рдпрджрд┐? рдпрд╣ рдкрд╛рдИ рдЪрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдЕрдВрддрд╣реАрди рд╕реЗрдЯ рдирд┐рдХрд▓рд╛, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ред
рдФрд░ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ:
float a = getSomeValue();
рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ рдХреНрд▓реЗрд░рд┐рдлрд╛рдЗрдВрдЧ рд░реЗрдВрдЬ a
рдФрд░ b
рдЕрд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реЛрдВрдЧреЗред рдФрд░, рдЗрд╕рд▓рд┐рдП, рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрднрд╡ рд╣реИред
рд╕рдорд╕реНрдпрд╛ # 2: рдирд┐рд░реНрднрд░ рд░рдВрдЧ
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
uniform float value //-> [0,1]; void main() { float val2 = value - 1.; gl_FragColor = vec4(value - val2); }
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╡реИрд░рд┐рдПрдмрд▓ val2
рдХреА рд╕реАрдорд╛ рдХреЛ val2
- рдФрд░ рдпрд╣ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИ [0,1] - 1 == [-1, 0]
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдлрд┐рд░, value - val2
рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ value - val2
, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдпрд╣ рдзреНрдпрд╛рди рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ рдХрд┐ val2
value
рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рд░реЗрдВрдЬ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рд╡реЗ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВред [0,1] - [-1,0] = [0,2]
, рдФрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕реЗ рд▓рдЧрд╛рддрд╛рд░ 1 рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред
рд╕рдВрднрд╡ рд╕рдорд╛рдзрд╛рди: рдкреНрд░рддреНрдпреЗрдХ рдЪрд░ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рди рдХреЗрд╡рд▓ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕, рдмрд▓реНрдХрд┐ рдкреВрд░реЗ "рдкрд░рд┐рд╡рд╛рд░ рдХрд╛ рдкреЗрдбрд╝" - рдЬреЛ рдЪрд░ рдкрд░ рдирд┐рд░реНрднрд░ рдереЗ, рдХреМрди рд╕реЗ рд╕рдВрдЪрд╛рд▓рди, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдПрдХ рдФрд░ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ "рдкреНрд░рдХрдЯ" рдХрд░рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рд╕рдорд╕реНрдпрд╛ # 3: рдЕрд╡реИрдз рд░реВрдк рд╕реЗ рдирд┐рд░реНрднрд░ рдкрд░реНрд╡рддрдорд╛рд▓рд╛
рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
float k = sin(a) + cos(a)
рдпрд╣рд╛рдВ, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдпрд╣ рдорд╛рди рд▓реЗрдЧрд╛ рдХрд┐ рд░реЗрдВрдЬ k = [-1,1] + [-1,1] = [-2,2]
ред рдЬреЛ рдЧрд▓рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реАрдорд╛ [-тИЪ2, тИЪ2]
рдореЗрдВ рдХрд┐рд╕реА рднреА рдЭреВрда рдХреЗ рд▓рд┐рдП sin(a) + cos(a)
ред
рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ sin(a)
рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ cos(a)
рдХреЗ рдкрд░рд┐рдгрд╛рдо рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╡реЗ рдПрдХ рд╣реА рд╢реНрд░реЗрдгреА рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред
рд╕рд╛рд░рд╛рдВрд╢ рдФрд░ рдирд┐рд╖реНрдХрд░реНрд╖
рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдРрд╕реА рд╕рд░рд▓ рдФрд░ рдЕрддрд┐ рд╡рд┐рд╢рд┐рд╖реНрдЯ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рднреА рдореВрд▓реНрдп рд╢реНрд░реЗрдгреА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛, рдХреНрдпреЛрдВрдХрд┐ GLSL рдПрдХ рдЖрд╕рд╛рди рдХрд╛рдо рдирд╣реАрдВ рд╣реИред рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдХрд╡рд░реЗрдЬ рдХреЛ рдЕрднреА рднреА рдордЬрдмреВрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рд╕рд╣рд╛рдпрдХ рд╕рд░рдгрд┐рдпреЛрдВ, рдореИрдЯреНрд░рд┐рд╕ рдФрд░ рд╕рднреА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдСрдкрд░реЗрд╢рди рдПрдХ рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рддрдХрдиреАрдХреА рдХрд╛рд░реНрдп рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдмрд╕ рд╕рдордп рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд▓реЗрдХрд┐рди рдЪрд░ рдХреЗ рдмреАрдЪ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП - рд╕рд╡рд╛рд▓ рдЕрднреА рднреА рдореЗрд░реЗ рд▓рд┐рдП рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИред рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд┐рдП рдмрд┐рдирд╛, рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХрддрд╛рдПрдВ рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╢реЛрд░ рдЕрдВрддрддрдГ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд╛рднреЛрдВ рд╕реЗ рдЖрдЧреЗ рдирд┐рдХрд▓ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рдЖрдпрд╛ рдерд╛, рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдореВрд▓реНрдп рд╢реНрд░реЗрдгреА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкреНрд░рд╕рд┐рджреНрдз рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдкрд░ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдирд╣реАрдВ рд╣реВрдВ - рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рдЬреАрдПрд▓рдПрд╕рдПрд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЙрдирдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред рдЙрд╕реА рд╕рдордп, рдЖрдк рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдЖрдк рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рди рдЬреАрдПрд▓рдПрд╕рдПрд▓ рдореЗрдВ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рд╕реЗ рд╕рдВрдХрд▓рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдпрд╣рд╛рдВ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдХреЛрдЯрд▓рд┐рди рд╕реЗ рд╕рдВрдХрд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рдерд╛ред рдлрд┐рд░ рдЖрдк рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рднреА рд╕реАрдорд╛ рд╢рд░реНрддреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛ рдПрдХ "рдбрд╛рдпрдиреЗрдорд┐рдХ рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░" рдмрдирд╛рдПрдВ рдЬреЛ рдЙрд╕реА рдбреЗрдЯрд╛ рдХреЛ рдЪрд▓рд╛рдПрдЧрд╛ рдЬреЛ рдореВрд▓ рдХреЛрдЯрд▓рд┐рди рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╢реЗрдбрд░ рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИред
рддреЛ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдореИрдВ рд░реБрдХ рдЧрдпрд╛ред рдкреБрд╕реНрддрдХрд╛рд▓рдп, рдЕрдлрд╕реЛрд╕, рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдпрд╣ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред
рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдЧрд┐рддреБрдм рдкрд░ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА:
рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
рдмреЛрдирд╕: рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрдХрд▓рдХ рдЭрдВрдбреЗ рдХреЗ рд╕рд╛рде webassembly рд╕реБрд╡рд┐рдзрд╛рдПрдБ
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдореИрдВрдиреЗ рд╕реНрдЯреИрдбрд▓рд┐рдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд┐рдпрд╛ - рдкреБрд░рд╛рдиреЗ рдврдВрдЧ рдХрд╛, рд╕рд░рдгрд┐рдпреЛрдВ рдФрд░ рд╕рдВрдХреЗрдд рдХреЗ рд╕рд╛рдеред рдЙрд╕ рд╕рдордп рдореИрдВ рдЖрдЙрдЯрдкреБрдЯ wasm-file рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рд▓реЗрдХрд░ рдмрд╣реБрдд рдЪрд┐рдВрддрд┐рдд рдерд╛, рдореИрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдЫреЛрдЯрд╛ рд╣реЛред рд▓реЗрдХрд┐рди рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рд╕реЗ рд╢реБрд░реВ рдХрд░рдХреЗ рдореБрдЭреЗ рдЕрд╕реБрд╡рд┐рдзрд╛ рдорд╣рд╕реВрд╕ рд╣реЛрдиреЗ рд▓рдЧреА рдФрд░ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╕рдм рдХреБрдЫ stdlib рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ - рд╕реНрдорд╛рд░реНрдЯ рдкреЙрдЗрдВрдЯрд░реНрд╕, рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдЧреНрд░рд╣, рд╡рд╣ рд╕рдмред
рддрджрдиреБрд╕рд╛рд░, рдореБрдЭреЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рджреЛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓рд╛ - рд╕реНрдЯреИрдбрд▓рд┐рдм рдХреЗ рд╕рд╛рде рдФрд░ рдмрд┐рдирд╛ред рдЦреИрд░, рдпрд╣ рднреА рджреЗрдЦреЗрдВ рдХрд┐ рдХрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ / рдмреБрд░рд╛ рдЪреАрдпрд░рдкреИрдк (рдФрд░ рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреНрд▓реИрдВрдЧ) рдХреЛрдб рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рджреЛрдиреЛрдВ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рди рдЭрдВрдбреЗ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реЗрдЯреЛрдВ ( -O0
, -O1
, -O0
, -O1
, -Os
рдФрд░ -Oz
) рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛, рдФрд░ рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ 1,000 рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рд╕рд╛рде 3,000 рд╕рдВрдЪрд╛рд▓рди рдХреА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЧрддрд┐ рдХреЛ рдорд╛рдкрд╛ред рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ, рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рддреБрд▓рдирд╛рддреНрдордХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдЖрдИрдПрдордПрдЪрдУ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
Wasm рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреНрдпрд╛ рд╣реБрдЖ:
рд╣реИрд░рд╛рдиреА рдХреА рдмрд╛рдд рд╣реИ, "рд╢реВрдиреНрдп" рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде рдЖрдХрд╛рд░ рд╡рд┐рдХрд▓реНрдк рд▓рдЧрднрдЧ рд╕рднреА рджреВрд╕рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмреЗрд╣рддрд░ рд╣реИред рдореИрдВ рдорд╛рди рд▓реВрдВрдЧрд╛ рдХрд┐ O3
рдореЗрдВ рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╣рд░ рдЪреАрдЬ рдХреА рдЖрдХреНрд░рд╛рдордХ рдЗрдирд▓рд╛рдЗрди рд╣реИ, рдЬреЛ рдмрд╛рдЗрдирд░реА рдХреЛ рдлреБрд▓рд╛рддреА рд╣реИред рд╕реНрдЯрдбрд▓рд┐рдм рдХреЗ рдмрд┐рдирд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдРрд╕рд╛ рдЕрдкрдорд╛рди рд╕рд╣рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЦреБрд╢реА рд╕реЗ рдЦреБрдж рдХреЛ рд╡рдВрдЪрд┐рдд рдХрд░рдирд╛ред
рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЧрддрд┐ рд╕реЗ:
рдЕрдм рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ -O0
рдХреА рддреБрд▓рдирд╛ рдореЗрдВ -O0
рдЦрд╛рдиреЗ рдореЗрдВ рд╡реНрдпрд░реНрде рдирд╣реАрдВ рд╣реИред рдЗрд╕реА рд╕рдордп, рд╕реНрдЯрдбрд▓рд┐рдм рдХреЗ рд╕рд╛рде рдФрд░ рдмрд┐рдирд╛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИ (рдореИрдВрдиреЗ 10 рдорд╛рдк рдХрд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдЕрдВрддрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдПрдЧрд╛)ред
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ 2 рдЕрдВрдХ:
- рдЧреНрд░рд╛рдл рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ 10 рд▓рдЧрд╛рддрд╛рд░ рд░рди рд╕реЗ рдФрд╕рдд рдореВрд▓реНрдпреЛрдВ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдмрд╣реБрдд рдкрд╣рд▓реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдмрд╛рдХреА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 2 рдЧреБрдирд╛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд░рд╣рддрд╛ рд╣реИ (рдпрд╛рдиреА, 120ms, рдФрд░ рдЕрдЧрд▓реЗ рд╡рд╛рд▓реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 60ms рдХреЗ рдЖрд╕рдкрд╛рд╕ рдереЗ)ред рд╢рд╛рдпрдж WebAssembly рдХреЗ рдХреБрдЫ рдкреНрд░рд╛рд░рдВрднрд┐рдХрдХрд░рдг рдереЗред
-O3
рдЭрдВрдбреЗ рдХреЗ рд╕рд╛рде, рдореИрдВрдиреЗ рдХреБрдЫ рдЕрдЬреАрдм рддрд░рд╣ рдХреЗ рдХреАрдбрд╝реЗ рдкрдХрдбрд╝ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВрдиреЗ рджреВрд╕рд░реЗ рдЭрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдкрдХрдбрд╝рд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдиреНрдпреВрдирддрдо рдФрд░ рдЕрдзрд┐рдХрддрдо рдХрд╛рд░реНрдпреЛрдВ рдиреЗ рдЕрдЪрд╛рдирдХ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ - рдЬреИрд╕реЗ рдХрд┐ рдорд┐рдирдЯред
рдирд┐рд╖реНрдХрд░реНрд╖
рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рджред
рдЕрдкрдиреЗ рдЪрд░реЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕реАрдорд╛ рд╕реЗ рдмрд╛рд╣рд░ рдХрднреА рди рдЬрд╛рдиреЗ рджреЗрдВред
рдФрд░ рдпрд╣рд╛рдБ рддреБрдо рдЬрд╛рдУред