рдпрд╣ рд▓реЗрдЦ
Qt 5.1 - рднрд╛рдЧ 1 рдФрд░
рднрд╛рдЧ 2 рдореЗрдВ OpenGL рдХреЗ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╣реИ
рднрд╛рдЧ 1
рдпрд╣ рд▓реЗрдЦ рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдкрд╣рд▓рд╛ рд╣реИред рд╡рд╣ рджрд┐рдЦрд╛рдПрдЧрд╛ рдХрд┐
Qt 5 рдореЗрдВ OpenGL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдпрд╣ рдЖрд▓реЗрдЦ Qt рдореЗрдВ OpenGL рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╡рд┐рд╖рдпрд╛рдВрддрд░ рд╣реЛрдЧрд╛ред рдлрд┐рд░ рд╣рдо
Qt 5.1 рдореЗрдВ рдкреЗрд╢ рдХреА рдЧрдИ рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗред рдмрд╛рдж рдХреЗ рд▓реЗрдЦ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдХреБрдЫ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рднреА рд╣реИрдВ рдХрд┐ рдХреНрдпреВрдЯреА рдХреЛ рдУрдкрдирдЬреАрдПрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдиреА рдЖрд╕рд╛рдиреА рд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
(рдмрд╣реБрдд) Qt рдФрд░ OpenGL рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЗрддрд┐рд╣рд╛рд╕
Qt рдХрд╛ OpenGL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреНрд░рд╛рдЗрдВрдЧ рд╕рдорд░реНрдерди рдХрд╛ рдПрдХ рд▓рдВрдмрд╛ рдЗрддрд┐рд╣рд╛рд╕ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ Qt рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдкрд╛рд╕
QGLWidget рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдФрд░ рд╕рдВрднрд╡рдд: рдХреБрдЫ OpenGL- рдЖрдзрд╛рд░рд┐рдд рдЗрдВрдЬрди рд╣реИрдВред рдпрд╣ рдЖрдкрдХреЛ рдХрдЪреНрдЪреЗ рдУрдкрдирдЬреАрдПрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдпрд╛
QPainter API рджреНрд╡рд╛рд░рд╛ рджреА рдЧрдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, Qt рд╡рд┐рднрд┐рдиреНрди рдУрдкрди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрдИ рдЙрдкрдпреЛрдЧреА рдЖрд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
QGLShaderProgram ,
QGLFramebufferObject ,
QGLBuffer , рдЖрджрд┐ред
Qt 5 рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рддреЗ рд╕рдордп, рдЗрди QGL * рд╡рд░реНрдЧреЛрдВ рдХреЛ "рдХрд┐рдпрд╛ рдЧрдпрд╛" рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдирд╡реАрдирддрдо QOpenGL * рдХрдХреНрд╖рд╛рдПрдВ QtGui рдореЙрдбреНрдпреВрд▓ (
рдЕрдиреБрд╡рд╛рджрдХ рдХреЗ рдиреЛрдЯ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрди рдЧрдИрдВ - рдпрд╣
QtOpenGL рд╣реБрдЖ тАЛтАЛрдХрд░рддреА рдереАрдВ )ред рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ Qt Quick 2 рдореЗрдВ рдирдпрд╛ рджреГрд╢реНрдп OpenGL рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдФрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ Qt рдХреЗ рдЧреНрд░рд╛рдлрд╝рд┐рдХрд▓ рдкреНрд░рд╕рд╛рдж рдХрд╛ рдПрдХ рдкреНрд░рдореБрдЦ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдирдИ QOpenGL * рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреБрд░рд╛рдиреЗ QGL * рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдм
QtGui рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ QOpenGL * рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА
рдЧрдИ рд╣реИред
рдХреНрдпреВрдЯреА 5.0 рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ (рдореВрд▓ рд░реВрдк рд╕реЗ) рдУрдкрдирдЬреАрдПрд▓ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд╣реА рд╕рдмрд╕реЗрдЯ рдЬреЛ рдХреНрдпреВрдЯреА 4.8 рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдХреНрдпреВрдЯреА рдХреНрд╡рд┐рдХ 2 рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рд╕рд╛рдеред рдХреНрдпреВрдЯреА рек.рек рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреНрдпреВрдЯреА рел.реж рдХрд┐рд╕реА рднреА рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдХрд╕реНрдЯрдо рдУрдкрдирдЬреАрдПрд▓ рд╡рд┐рдВрдбреЛ рдФрд░ рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЕрдм рдЖрдкрдХреЛ рдПрдХ рд╕рдВрджрд░реНрдн рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рд╕реЗ рдкрд░реЗрд╢рд╛рди рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ
рдУрдкрдирдЬреАрдПрд▓ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдмрд╕
QOpenGLContext рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рднреВрд░реЗ рдмрд╛рд▓реЛрдВ рд╕реЗ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВ!
Qt 5.1 рдореЗрдВ, рд╣рдорд╛рд░реЗ рдХрд╛рд░рдирд╛рдореЗ OpenGL рдФрд░ Qt рдХреЛ рд╕рд░рд▓, рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдФрд░ рдЙрдореНрдореАрдж рдХреЗ рд╕рд╛рде рдордЬрд╝реЗрджрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ OpenGL рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреЗ рд╣реИрдВ! рдЗрд╕рдХреЗ рд▓рд┐рдП,
рдХреЗрдбреАрдПрдмреА рдиреЗ рдХреНрдпреВрдЯреА рдФрд░ рдУрдкрдирдЬреАрдПрд▓ рдХреА рд╕реАрдорд╛рдУрдВ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ рднрд╛рд░реА рдирд┐рд╡реЗрд╢ рдХрд┐рдпрд╛ рд╣реИред
рд╣рд░ рдЬрдЧрд╣ рдХрд╛рд░реНрдп, рдХрд╛рд░реНрдп!
рдЦреБрд▓рдХрд░, рдХреБрдЫ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдУрдкрдирдЬреАрдПрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
ред рдЗрди рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХреЗ рдореБрдЦреНрдп рдХрд╛рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдХреЗ рдкрддреЗ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд░рди рдЯрд╛рдЗрдо рдкрд░, рдФрд░ рдмрд┐рд▓реНрдб рд╕рдордп рдкрд░ рдирд╣реАрдВ (рдЬрдм рд▓рд┐рдВрдХрд░ рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Microsoft Windows рдкрд░, OpenGL рдХреЗ рд╕рдВрд╕реНрдХрд░рдг 1.1 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрддрд╛ рд░рдирдЯрд╛рдЗрдо рдкрд░ рд╕реМрдВрдкрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣реА рд╣реИ, рдЗрд╕реЗ рдЖрдзреБрдирд┐рдХ рдУрдкрдирдЬреАрдПрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд▓рдЧрднрдЧ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП!
рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Qt рдЙрдкрдпреЛрдЧреА рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
QOpenGLContext :: GetProcAddress () рдФрд░
QOpenGLFunctions ред рдкреВрд░реНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдПрдХ рд╡рд░реНрдЧ рд╣реИ, рдЬрд┐рд╕рдХреЗ рддрд░реАрдХреЗ рдУрдкрдирдЬреАрдПрд▓ 2 рдФрд░
рдУрдкрдирдЬреАрдПрд▓ рдИрдПрд╕ 2 рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдмрд╕реЗрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпреЗ рдорджрджрдЧрд╛рд░ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ QOpenGLFunctions рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╡рд┐рдзрд┐рдпреЛрдВ (OpenGL 2 рдФрд░ OpenGL ES 2 рдХреЗ рд╕рдмрд╕реЗрдЯ) рдореЗрдВ рд╕реАрдорд┐рдд рд╣реИред рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдПрдХ рдореИрдиреБрдЕрд▓ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдПрдХ рдмрд╣реБрдд рдердХрд╛рдК рдХрд╛рдо рд╣реИ, рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рднрд░рд╛ред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдк рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рддреГрддреАрдп-рдкрдХреНрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐
Glew рдпрд╛
GLee ред рд╕рдЪ рд╣реИ, рдпреЗ рд╕рдорд╛рдзрд╛рди Qt рдХреЗ рд╕рд╛рде рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХрд╛рд░реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рдХрд░рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣реЗрдбрд░ рдХреЗ рдЖрджреЗрд╢ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП)ред
QOpenGLContext :: versionFunctions () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ! рдпрд╣ рдПрдХ рдорд╛рдореВрд▓реА рд╕рд╛ рдХрд╛рд░реНрдп рд╣реИ - рдУрдкрдирдЧреЗрд▓ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкрддреЗ (рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ) рдХреЗ "рдпреВрдЯреЛрдкрд┐рдпрд╛" рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рдорд╛рд░реНрдЧрджрд░реНрд╢рди :) рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдУрдкрдирдЬреАрдПрд▓ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдореЗрдВ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ (рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде) рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдЗрдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕
QWindow рдХрд╛ рдПрдХ рдЙрдкрд╡рд░реНрдЧ рд╣реИ рдЬреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред рд╣рдо рдПрдХ
OpenGL 4.3 рдХреЛрд░ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╕рднреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ:
Window::Window(QScreen * screen) : QWindow(screen) {
рдЕрдм рд╕реЗ, рд╣рдо рдмрд╕
QOpenGLFunctions_4_3_Core рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рджрд╕реНрдп рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
рдЗрд╕ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ? рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд┐рд╕реА рднреА рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рд╣рд╛рдереЛрдВ рдореЗрдВ рд╕рднреА OpenGL рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реЛрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдЬреЛ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛,
QOpenGLContext ,
QOpenGLFunctions_4_3_Core, рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреА рдХрдХреНрд╖рд╛рдПрдВ рд╡реИрдз рдлрд╝рдВрдХреНрд╢рди
рдмрд┐рдВрджреБ рд╡рд╛рд▓реЗ рдмреИрдХреЗрдВрдб рд╡рд┐рддрд░рд┐рдд рдХрд░рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдХрдо рдХрд░рддреА рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдкрддреЛрдВ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдХрдИ рдереНрд░реЗрдбреНрд╕ рдФрд░ рд╕рдВрджрд░реНрдн рдпрд╛ рдХрдИ GPU рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ)ред рдЗрди рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд╕рд╣рд╛рдпрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдУрдкрдирдЬреАрдПрд▓ рдХрд╛ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рд╣реЛрдиреЗ рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред
рдУрдкрдирдЧреЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рдиреНрд╕
рдУрдкрдирдЬреАрдПрд▓ рдХрд╛ рдПрдХ рд▓реЛрдХрдкреНрд░рд┐рдп
рд╡рд┐рд╕реНрддрд╛рд░ рдЗрдВрдЬрди рд╣реИ рдЬреЛ рд╡рд┐рдХреНрд░реЗрддрд╛рдУрдВ рдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдирдИ рдпрд╛ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдФрд░ рдПрдкреАрдЖрдИ рдкреЗрд╢ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╡реЗ рдЙрдкрдпреЛрдЧреА рд╣реИрдВ рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реЛрдЪрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрджрд┐ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдирдП рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдкрддреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЕрдиреНрдп рдУрдкрдирдЧреЗрд▓ рдлрд╝рдВрдХреНрд╢рди (рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдХреЗ рд▓рд┐рдП рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдУрдкрдирдЬреАрдПрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рджреЛ рдЪрд░рдгреЛрдВ рд╕реЗ рдЧреБрдЬрд░рдирд╛ рд╣реЛрдЧрд╛ред Qt рджреЛрдиреЛрдВ рдЪрд░рдгреЛрдВ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ:
рд╕реНрдЯреЗрдЬ 1:
рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЖрд╡рд╢реНрдпрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдПрдХ рдирдпрд╛ рдПрдкреАрдЖрдИ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕рдорд░реНрдерд┐рдд рд╣реИ, рдЖрдкрдХреЛ
QOpenGLContext :: hasExtension () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдорд░реНрдерд┐рдд рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рдкреВрд░реА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк
OpenGLContext рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
:: рдПрдХреНрд╕рдЯреЗрдВрд╢рди () :
рд╕реНрдЯреЗрдЬ 2:
рджреВрд╕рд░реЗ рдЪрд░рдг рдореЗрдВ, рд╣рдореЗрдВ рдЕрдкрдиреЗ рдкреБрд░рд╛рдиреЗ рдорд┐рддреНрд░ -
QOpenGLContext :: GetProcAddress () рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред Qt 5.1 рдореЗрдВ,
QtOpenGLExtensions рдореЙрдбреНрдпреВрд▓ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдпрд╣ рдореЙрдбреНрдпреВрд▓ рдПрдХ рд╕реНрдерд┐рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ
рдЦреНрд░реЛрдиреЛрд╕ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдУрдкрдирдЬреАрдПрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди (рдЬреЛ рдПрдХ рдирдпрд╛ рдПрдкреАрдЖрдИ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИ) рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИред OpenGL рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдХреЗ рд╕рдорд╛рди рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
рдХреЛрд░ рдУрдкрдирдЧреНрд▓ рдлреАрдЪрд░ рдХреЗ рд╕рд╛рде, рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИред
рднрд╛рдЧ реи
рд╡рд░реНрдЯреЗрдХреНрд╕ рдПрд░реЗ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕
Qt рдХреЗ рдкрд╛рд╕ рдПрдХ
QOpenGLBuffer рд╣реИ (рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ
QGLBuffer рдерд╛) рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА OpenGL рдмрдлрд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕, рдЬреИрд╕реЗ-
pertex рд╡рд┐рд╢реЗрд╖рддрд╛ рдбреЗрдЯрд╛ рдФрд░
рдПрд▓рд┐рдореЗрдВрдЯ рдЗрдВрдбреЗрдХреНрд╕ рдмрдлрд╝рд░реНрд╕ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдУрдкрдирдЬреАрдПрд▓ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХрдВрдЯреЗрдирд░ рднреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ
рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╡рд░реНрдЯреЗрдХреНрд╕ рдПрд░реЗ (рд╡реАрдПрдУ) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ
рд╡рд░реНрдЯреЗрдХреНрд╕ рдмрдлрд░ рдСрдмреНрдЬреЗрдХреНрдЯ (рд╡реАрдмреАрдУ) рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░рддрд╛ рд╣реИред
KDAB рдиреЗ Qt 5.1 рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЬреЛрдбрд╝рд╛ рд╣реИ рдЬреЛ рдХрдИ VAO рдХреЛ
QOpenGLVertexArrayObject рдХреНрд▓рд╛рд╕ рдХреЗ рд╕рд╛рде
рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрд╛рдЗрдВрдбрд┐рдВрдЧ OpenGL рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрдЯреЗрдХреНрд╕ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдХрд┐рд╕реА рднреА рд░рд╛рдЬреНрдп рдХреЛ "рдпрд╛рдж рд░рдЦреЗрдВ" рдЬрд┐рд╕реЗ рдЖрдк рдмрд╛рдж рдореЗрдВ рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдо рдмрд╛рдж рдореЗрдВ рдХреЗрд╡рд▓ рд╡реАрдПрдУ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рдХрд░ рдЖрд╡рд╢реНрдпрдХ рд░рд╛рдЬреНрдп рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдмрд╣реБрдд рдЬрд▓реНрджреА рдмрд╣рд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╣рдореЗрдВ "рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕" рдХреЗ рд▓рд┐рдП рд╢реАрд░реНрд╖ рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рдмреАрдЪ рдмрд╣реБрдд рддреЗрдЬрд╝реА рд╕реЗ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЕрдкрдиреЗ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
рдЕрдиреБрд╡рд╛рджрдХ рдХрд╛ рдиреЛрдЯрдореЗрд░реА рд░рд╛рдп рдореЗрдВ, "рдмрд╛рдзреНрдпрдХрд╛рд░реА" рдХреЗ рдмрдЬрд╛рдп, "Russified" рдХреНрд░рд┐рдпрд╛ "рдмрд╛рдЗрдВрдб" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реЛрдЧрд╛, рдЬреЛ рд╕рдВрднрд╡рддрдГ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рд╣реИред
void Scene::initialize() {
рдЕрдиреБрд╡рд╛рджрдХ рдХрд╛ рдиреЛрдЯ"рдХреБрд▓реНрд▓рд╛ рдФрд░ рджреЛрд╣рд░рд╛рдирд╛" рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрдпрдВрдЧреНрдпрд╛рддреНрдордХ рд░реВрдкрдХ рд╣реИред рдпрд╣ рд╡рд╛рдХреНрдпрд╛рдВрд╢ "рдзреЛрдиреЗ, рдХреБрд▓реНрд▓рд╛, рджреЛрд╣рд░рд╛рдиреЗ" рд╕реЗ рдЬрдбрд╝реЗрдВ рд╣реИрдВ, рдЬреЛ рд╢реИрдВрдкреВ рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдмреНрд░рд╛рдВрдбреЛрдВ рдХреА рдкреИрдХреЗрдЬрд┐рдВрдЧ рдкрд░ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдУрдкрди рдУрдкрди 3 рдХреЗ рдмрд╛рдж рд╕реЗ рд╡реАрдПрдУ рдкреЗрд╢ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдХреЛрд░ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде 3.1 рд╕реЗ рдЕрдзрд┐рдХ рдкреБрд░рд╛рдиреЗ рдУрдкрдирдЬреАрдПрд▓ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, VAOs рдХреНрд░рдорд╢рдГ OpenGL 2 рдФрд░ OpenGL ES 2 рдореЗрдВ
GL_ARB_vertex_array_object рдпрд╛
GL_OES_vertex_array_object рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред QOpenGLVertexArrayObject рд╡рд░реНрдЧ рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ (рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ) рдпрд╛ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рд╡рд┐рд╕реНрддрд╛рд░ (рдпрджрд┐ рдХреЛрдИ рд╣реЛ) рдХрд╛ рд╕рдВрджрд░реНрдн рд▓реЗрдВред
VAO рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛрдб рдХреЛ рд╕рд░рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдмрдврд╝рд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ OpenGL рдбреНрд░рд╛рдЗрд╡рд░ рдХрдо рд╕рддреНрдпрд╛рдкрди рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ (рдпрджрд┐ рдпрд╣ рдЕрдзрд┐рдХ рдмрдлрд░ рд╕рдВрдЪрд╛рд▓рди рдХрд░реЗрдЧрд╛)ред
рднрд╛рдЧ 3,4,5 рдЬрд▓реНрдж рд╣реА рдЖ рд░рд╣рд╛ рд╣реИ ... рдкреБрдирд╢реНрдЪ: рдПрдХ рдмрдбрд╝рд╛ рдЕрдиреБрд░реЛрдз, рд╕рднреА рд╢реИрд▓реАрдЧрдд рдФрд░ рд╡реНрдпрд╛рдХрд░рдг рд╕рдВрдмрдВрдзреА рддреНрд░реБрдЯрд┐рдпреЛрдВ, рд╕рд╛рде рд╣реА рдЕрдиреБрд╡рд╛рдж рдореЗрдВ рдЧрд▓рддрд┐рдпрд╛рдВ, рд▓реИрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░рд┐рдкреЛрд░реНрдЯ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рдЬреИрд╕реЗ рд╣реА рд╡реЗ рдЙрдкрд▓рдмреНрдз рд╣реЛрдВрдЧреЗ рдореИрдВ рд╕рдм рдХреБрдЫ рд░рд╛рдЬ рдХрд░реВрдВрдЧрд╛ред