рдЧреНрд░рд╛рдлрд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рди рдХреЗрд╡рд▓ рдЖрдирдВрдж рдХрд╛ рдПрдХ рд╕реНрд░реЛрдд рд╣реИ, рдмрд▓реНрдХрд┐ рд╣рддрд╛рд╢рд╛ рднреА рд╣реИ рдЬрдм рдХреБрдЫ рдХреЛ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рд╕реНрдХреНрд░реАрди рдкрд░ рдХреБрдЫ рднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╣рдо рдЬреЛ рдХрд░рддреЗ рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкрд┐рдХреНрд╕реЗрд▓ рд╣реЗрд░рдлреЗрд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдпрд╣ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдХреБрдЫ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐ рдХреЛ рдбреАрдмрдЧ рдХрд░рдирд╛ CPU рдкрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХрдВрд╕реЛрд▓ рдирд╣реАрдВ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдо рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо shader рдореЗрдВ рдПрдХ рд╡рд┐рд░рд╛рдо рдмрд┐рдВрджреБ рдирд╣реАрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рдХреЗрд╡рд▓ GPU рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд╣реАрдВ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ, рд╣рдо рдЖрдкрдХреЛ рдЕрдкрдиреЗ OpenGL рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдбрд┐рдмрдЧрд┐рдВрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рддрдХрдиреАрдХреЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд░рд╛рдПрдБрдЧреЗред рдУрдкрдирдЬреАрдПрд▓ рдореЗрдВ рдбрд┐рдмрдЧрд┐рдВрдЧ рдЗрддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдХреБрдЫ рдЧреБрд░ рд╕реАрдЦрдиреЗ рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рднреБрдЧрддрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рд╕рд╛рдордЧреНрд░реАрднрд╛рдЧ 1. рдЖрд░рдВрдн рдХрд░рдирд╛ рднрд╛рдЧ 2. рдмреБрдирд┐рдпрд╛рджреА рдкреНрд░рдХрд╛рд╢ рднрд╛рдЧ 3ред 3 рдбреА рдореЙрдбрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рднрд╛рдЧ 4. рдЙрдиреНрдирдд OpenGL рд╕реБрд╡рд┐рдзрд╛рдПрдБ рднрд╛рдЧ 5. рдЙрдиреНрдирдд рдкреНрд░рдХрд╛рд╢ рднрд╛рдЧ 6. рдкреАрдмреАрдЖрд░ рднрд╛рдЧ 7. рдЕрднреНрдпрд╛рд╕ glGetError ()
рдЬрдм рдЖрдк OpenGL рдХрд╛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдЖрдк рдПрдХ рдмрдлрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдмрд╛рдВрдзрдирд╛ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ), рддреЛ OpenGL рдиреЛрдЯрд┐рд╕ рдХрд░реЗрдЧрд╛ рдФрд░ рджреГрд╢реНрдпреЛрдВ рдХреЗ рдкреАрдЫреЗ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдХрд╕реНрдЯрдо рддреНрд░реБрдЯрд┐ рдЭрдВрдбреЗ рдмрдирд╛рдПрдЧрд╛ред рд╣рдо glGetError()
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдЗрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдмрд╕ рддреНрд░реБрдЯрд┐ рдЭрдВрдбреЗ рд╕реЗрдЯ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛрдиреЗ рдкрд░ рддреНрд░реБрдЯрд┐ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред
GLenum glGetError();
рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рддреНрд░реБрдЯрд┐ рдзреНрд╡рдЬ рдпрд╛ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рд╡рд╛рдкрд╕реА рдорд╛рди рд╕реВрдЪреА:
OpenGL рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдВрджрд░, рдЖрдк рдЙрди рдПрд░рд░ рдХреЛрдб рдХреЛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдлрд╝рдВрдХреНрд╢рдВрд╕ рджреНрд╡рд╛рд░рд╛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк glBindTexture()
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрд░рд░реНрд╕ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рддреНрд░реБрдЯрд┐ рдХреЛрдб рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЬрдм рддреНрд░реБрдЯрд┐ рдзреНрд╡рдЬ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреЛрдИ рдЕрдиреНрдп рддреНрд░реБрдЯрд┐ рдзреНрд╡рдЬ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрдм glGetError
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рд╕рднреА рддреНрд░реБрдЯрд┐ рдЭрдВрдбреЗ рдХреЛ рдорд┐рдЯрд╛ рджреЗрддрд╛ рд╣реИ (рдпрд╛ рд╡рд┐рддрд░рд┐рдд рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдХреЗрд╡рд▓ рдПрдХ, рдиреАрдЪреЗ рджреЗрдЦреЗрдВ)ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдлреНрд░реЗрдо рдХреЗ рдмрд╛рдж рдПрдХ рдмрд╛рд░ glGetError
рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХрдорд╛рддреНрд░ рддреНрд░реБрдЯрд┐ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЕрднреА рднреА рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рддреНрд░реБрдЯрд┐ рдХрд╣рд╛рдВ рд╣реБрдИ рдереАред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЬрдм OpenGL рдПрдХ рд╡рд┐рддрд░рд┐рдд рдлреИрд╢рди рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдХреНрд╕рд░ X11 рдХреЗ рд╕рд╛рде рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЕрдиреНрдп рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдЬрдмрдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреЛрдб рд╣реЛрддреЗ рд╣реИрдВред glGetError
рдХреЙрд▓ glGetError
рдмрд╕ рд╕рднреА рдХреЗ рдмрдЬрд╛рдп рддреНрд░реБрдЯрд┐ рдХреЛрдб рдХреЗ рдЭрдВрдбреЗ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдлреНрд▓рд╢ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рд╡реЗ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓реВрдк рдореЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВред
glBindTexture(GL_TEXTURE_2D, tex); std::cout << glGetError() << std::endl;
glGetError
рдХреА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рддреНрд░реБрдЯрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ рдФрд░ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ OpenGL рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдк рдХреБрдЫ рднреА рдЖрдХрд░реНрд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдХреНрдпрд╛ рд╣реИ: рдлреНрд░реЗрдо рдмрдлрд░ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛? рдмрдирд╛рд╡рдЯ рд╕реЗрдЯ рдХрд░рдирд╛ рднреВрд▓ рдЧрдП? рд╣рд░ рдЬрдЧрд╣ glGetError
рдХреЙрд▓ рдХрд░рдХреЗ, рдЖрдк рдЬрд▓реНрджреА рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкрд╣рд▓реА рддреНрд░реБрдЯрд┐ рдХрд╣рд╛рдВ рд╣реЛрддреА рд╣реИред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, glGetError
рдХреЗрд╡рд▓ рддреНрд░реБрдЯрд┐ рд╕рдВрдЦреНрдпрд╛ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ рдЬрдм рддрдХ рдЖрдк рдХреЛрдб рд╕рдВрдЦреНрдпрд╛ рдпрд╛рдж рдирд╣реАрдВ рдХрд░рддреЗред рдпрд╣ рдЕрдХреНрд╕рд░ рдЙрд╕ рд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде рдПрдХ рддреНрд░реБрдЯрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
GLenum glCheckError_(const char *file, int line) { GLenum errorCode; while ((errorCode = glGetError()) != GL_NO_ERROR) { std::string error; switch (errorCode) { case GL_INVALID_ENUM: error = "INVALID_ENUM"; break; case GL_INVALID_VALUE: error = "INVALID_VALUE"; break; case GL_INVALID_OPERATION: error = "INVALID_OPERATION"; break; case GL_STACK_OVERFLOW: error = "STACK_OVERFLOW"; break; case GL_STACK_UNDERFLOW: error = "STACK_UNDERFLOW"; break; case GL_OUT_OF_MEMORY: error = "OUT_OF_MEMORY"; break; case GL_INVALID_FRAMEBUFFER_OPERATION: error = "INVALID_FRAMEBUFFER_OPERATION"; break; } std::cout << error << " | " << file << " (" << line << ")" << std::endl; } return errorCode; } #define glCheckError() glCheckError_(__FILE__, __LINE__)
рдпрджрд┐ рдЖрдк рдЕрдзрд┐рдХ glCheckError
рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЬрд╛рдирдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдХрд┐ рддреНрд░реБрдЯрд┐ рдХрд╣рд╛рдВ рд╣реБрдИред
glBindBuffer(GL_VERTEX_ARRAY, vbo); glCheckError();
рдирд┐рд╖реНрдХрд░реНрд╖:

рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдмрдиреА рд╣реБрдИ рд╣реИ: GLEW рдореЗрдВ рдПрдХ рд▓рдВрдмрд╛-рдЪреМрдбрд╝рд╛ рдмрдЧ рд╣реИ: glewInit()
рд╣рдореЗрд╢рд╛ GL_INVALID_ENUM
рдзреНрд╡рдЬ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдзреНрд╡рдЬ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП glGetError
рдмрд╛рдж glewInit
рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ:
glewInit(); glGetError();
glGetError
рдЬреНрдпрд╛рджрд╛ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рджреА рдЧрдИ рдЬрд╛рдирдХрд╛рд░реА рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдХреНрд╕рд░ glGetError
рдХреЛ рдкрдХрдбрд╝рдиреЗ рдпрд╛ рдЙрд╕ рдЬрдЧрд╣ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рддреНрд░реБрдЯрд┐ рд╣реБрдИ рдереАред рдпрд╣ рдПрдХ рд╕рд░рд▓ рд▓реЗрдХрд┐рди рдкреНрд░рднрд╛рд╡реА рдбрд┐рдмрдЧрд┐рдВрдЧ рдЯреВрд▓ рд╣реИред
рдбрд┐рдмрдЧ рдЖрдЙрдЯрдкреБрдЯ
рдЯреВрд▓ рдХрдо рдкреНрд░рд╕рд┐рджреНрдз рд╣реИ, рд▓реЗрдХрд┐рди glCheckError
рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╣реИ, OpenGL рдПрдХреНрд╕рдЯреЗрдВрд╢рди "рдбрд┐рдмрдЧ рдЖрдЙрдЯрдкреБрдЯ", рдЬреЛ OpenGL 4.3 рдХреЛрд░ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдерд╛ред рдЗрд╕ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде, OpenGL рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рддреНрд░реБрдЯрд┐ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдЧрд╛ред рдпрд╣ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рди рдХреЗрд╡рд▓ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЖрдкрдХреЛ рдЙрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рднреА рдкрдХрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╡реЗ рдбреАрдмрдЧрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдбреАрдмрдЧ рдЖрдЙрдЯрдкреБрдЯ рдУрдкрди 4.3 рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдУрдкрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рд╕реА рднреА рдорд╢реАрди рдкрд░ рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкрд╛рдПрдВрдЧреЗ рдЬреЛ рдУрдкрди 5 4.3 рдФрд░ рдЙрдЪреНрдЪрддрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рд╕рдВрд╕реНрдХрд░рдг рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк ARB_debug_output
рдФрд░ AMD_debug_output
рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдмрд╛рдд рдХреА рднреА рдЕрд╕рддреНрдпрд╛рдкрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рд╣реИ рдХрд┐ рдбрд┐рдмрдЧрд┐рдВрдЧ рдЖрдЙрдЯрдкреБрдЯ OS X рдкрд░ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ (рдореВрд▓ рдХреЗ рд▓реЗрдЦрдХ рдФрд░ рдЕрдиреБрд╡рд╛рджрдХ рдиреЗ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдХреГрдкрдпрд╛ рддреНрд░реБрдЯрд┐ рд╕реБрдзрд╛рд░ рддрдВрддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореВрд▓ рдХреЗ рд▓реЗрдЦрдХ рдХреЛ рдпрд╛ рдореБрдЭреЗ рдирд┐рдЬреА рд╕рдВрджреЗрд╢реЛрдВ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░реЗрдВ, рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕ рддрдереНрдп рдХреА рдкреБрд╖реНрдЯрд┐ рдпрд╛ рдЦрдВрдбрди рдорд┐рд▓рддрд╛ рд╣реИ; UPD: Jeka178RUS рдиреЗ рдпрд╣ рдЬрд╛рдБрдЪ рдХреА рд╣реИ; рддрдереНрдп: рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░, рдбрд┐рдмрдЧ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЙрд╕рдиреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХреА)ред
рдбрд┐рдмрдЧ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЖрд░рдВрднреАрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рдУрдкрди рдбрд┐рдмрдЧ рд╕рдВрджрд░реНрдн рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдВрдбреЛ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЕрд▓рдЧ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рд╣рдо рдХреЗрд╡рд▓ GLFW рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди "рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд╛рдордЧреНрд░реА" рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЖрдк рдЕрдиреНрдп рд╡рд┐рдВрдбреЛ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
GLFW рдореЗрдВ рдбрд┐рдмрдЧ рдЖрдЙрдЯрдкреБрдЯ
GLFW рдореЗрдВ рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕рдВрджрд░реНрднреЛрдВ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рд╕рд░рд▓ рд╣реИ: рдЖрдкрдХреЛ рдмрд╕ рдЗрддрдирд╛ рдХрд░рдирд╛ рд╣реИ рдХрд┐ GLFW рдХреЛ рдПрдХ рд╕рдВрдХреЗрдд рджреЗрдВ рдХрд┐ рд╣рдо рдПрдХ рд╕рдВрджрд░реНрдн рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдбреАрдмрдЧрд┐рдВрдЧ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рд╣рдореЗрдВ glfwCreateWindow
рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, GL_TRUE);
рдЬреИрд╕реЗ рд╣реА рд╣рдордиреЗ GLFW рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕рдВрджрд░реНрдн рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рд╣рдо OpenGL 4.3 рдпрд╛ рдЙрдЪреНрдЪрддрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ рд╣рдореЗрдВ рдЕрдкрдиреА рдХрд┐рд╕реНрдордд рдЖрдЬрд╝рдорд╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдФрд░ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдЕрднреА рднреА рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕рдВрджрд░реНрдн рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ OpenGL рдПрдХреНрд╕рдЯреЗрдВрд╢рди рддрдВрддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбрд┐рдмрдЧ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
OpenGL рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕рдВрджрд░реНрдн рд╕рд╛рдорд╛рдиреНрдп рд╕реЗ рдзреАрдорд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЕрдиреБрдХреВрд▓рди рдкрд░ рдпрд╛ рд░рд┐рд▓реАрдЬрд╝ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ рд╣рдЯрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред
рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕рдВрджрд░реНрдн рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:
GLint flags; glGetIntegerv(GL_CONTEXT_FLAGS, &flags); if (flags & GL_CONTEXT_FLAG_DEBUG_BIT) {
рдбрд┐рдмрдЧ рдЖрдЙрдЯрдкреБрдЯ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рд╣рдо OpenGL рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рджреЗрддреЗ рд╣реИрдВ (GLFW рдореЗрдВ рдХреЙрд▓рдмреИрдХ рдХреЗ рд╕рдорд╛рди) рдФрд░ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╣рдо OpenGL рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрдВрд╕реЛрд▓ рдХреЛ рдЙрдкрдпреЛрдЧреА рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рднреЗрдЬрддреЗ рд╣реИрдВред рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк:
void APIENTRY glDebugOutput(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *message, void *userParam);
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреБрдЫ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЕрдВрддрд┐рдо рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдкреНрд░рдХрд╛рд░ const void*
рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдореМрдЬреВрдж рдмрдбрд╝реЗ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╣рдо рдПрдХ рдЙрдкрдпреЛрдЧреА рдПрд░рд░ рдкреНрд░рд┐рдВрдЯрд┐рдВрдЧ рдЯреВрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
void APIENTRY glDebugOutput(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *message, void *userParam) {
рдЬрдм рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдПрдХ OpenGL рддреНрд░реБрдЯрд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ рдФрд░ рд╣рдо рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд┐рдВрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдордиреЗ рдХреБрдЫ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдмреЗрдХрд╛рд░ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдирд╡реАрдбрд┐рдпрд╛ рдЪрд╛рд▓рдХреЛрдВ рдореЗрдВ 131185 рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдмрдлрд░ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛)ред
рдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╛рдВрдЫрд┐рдд рдХреЙрд▓рдмреИрдХ рд╣реИ, рддреЛ рдбрд┐рдмрдЧ рдЖрдЙрдЯрдкреБрдЯ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ:
if (flags & GL_CONTEXT_FLAG_DEBUG_BIT) { glEnable(GL_DEBUG_OUTPUT); glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS); glDebugMessageCallback(glDebugOutput, nullptr); glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, nullptr, GL_TRUE); }
рдЗрд╕рд▓рд┐рдП рд╣рдо OpenGL рдХреЛ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдбрд┐рдмрдЧ рдЖрдЙрдЯрдкреБрдЯ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред glEnable(GL_DEBUG_SYNCRHONOUS)
рдХреЛ рдХреЙрд▓ рдУрдкрдирдЬреАрдПрд▓ рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрдм рдпрд╣ рд╣реБрдЖред
рдбрд┐рдмрдЧ рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ
glDebugMessageControl
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде glDebugMessageControl
рдЖрдк рдЙрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдорд┐рд▓рддреА рд╣реИрдВред рдпрджрд┐ рд╣рдо рдХреЗрд╡рд▓ OpenGL API рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЪрд╛рд╣рддреЗ рдереЗ, рдЬреИрд╕реЗ рддреНрд░реБрдЯрд┐ рдФрд░ рдорд╣рддреНрд╡ рд╕реНрддрд░ рдЙрдЪреНрдЪ, рддреЛ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд▓рд┐рдЦреЗрдВрдЧреЗ:
glDebugMessageControl(GL_DEBUG_SOURCE_API, GL_DEBUG_TYPE_ERROR, GL_DEBUG_SEVERITY_HIGH, 0, nullptr, GL_TRUE);
рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде, рд╣рд░ рдЧрд▓рдд OpenGL рдХрдорд╛рдВрдб рдмрд╣реБрдд рд╕рд╛рд░реА рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рднреЗрдЬреЗрдЧрд╛:

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

рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдореИрдиреБрдЕрд▓ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЬрд▓реНрджреА рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИ рдХрд┐ рдХреМрди рд╕реА рдХреЙрд▓ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрди рд░рд╣реА рд╣реИред
рдЦреБрдж рдХреА рдЧрд▓рддрд┐рдпрд╛рдБ
рдкрдврд╝рдиреЗ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде, рд╣рдо рдЙрдиреНрд╣реЗрдВ glDebugMessageInsert
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд┐рдмрдЧ рдЖрдЙрдЯрдкреБрдЯ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ:
glDebugMessageInsert(GL_DEBUG_SOURCE_APPLICATION, GL_DEBUG_TYPE_ERROR, 0, GL_DEBUG_SEVERITY_MEDIUM, -1, "error message here");
рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИ рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдЕрдиреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдпрд╛ OpenGL рдХреЛрдб рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕рдВрджрд░реНрдн рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЕрдиреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЖрдкрдХреЗ рдХрд╕реНрдЯрдо рдУрдкрди рдХреЛрдб рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рднреА рд░рд┐рдкреЛрд░реНрдЯ рдХреА рдЧрдИ рддреНрд░реБрдЯрд┐ рдХрд╛ рддреБрд░рдВрдд рдкрддрд╛ рд▓рдЧрд╛ рдкрд╛рдПрдВрдЧреЗред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдбрд┐рдмрдЧрд┐рдВрдЧ рдЖрдЙрдЯрдкреБрдЯ (рдпрджрд┐ рдЙрдкрд▓рдмреНрдз рд╣реЛ) рдЬрд▓реНрджреА рд╕реЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЯреНрдпреВрдирд┐рдВрдЧ рдкрд░ рдЦрд░реНрдЪ рдХрд┐рдП рдЧрдП рдкреНрд░рдпрд╛рд╕ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рдХрд╛рд╕ рд╕рдордп рдмрдЪрд╛рддрд╛ рд╣реИред рдЖрдк glGetError
рдФрд░ рдбреАрдмрдЧ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╣рд╛рдВ рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рдПрдХ рдкреНрд░рддрд┐ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рддреНрд░реБрдЯрд┐рдпрд╛рдБ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
рд╢реЗрдбрд░ рдбреАрдмрдЧ рдЖрдЙрдЯрдкреБрдЯ
рдЬрдм рдпрд╣ GLSL рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ glGetError
рдпрд╛ рдбрд┐рдмрдЧрд░ рдореЗрдВ рдЪрд░рдгреЛрдВ рдореЗрдВ рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреИрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИред рдЬрдм рдЖрдк рдПрдХ рдХрд╛рд▓реА рд╕реНрдХреНрд░реАрди рдпрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрд▓рдд рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рдордЭрдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рдВ, рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╕рд┐рдВрдЯреИрдХреНрд╕ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рд┐рдореЗрдВрдЯрд┐рдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝рдирд╛ рд╡рд╣ рдЧреАрдд рд╣реИред
рдПрдХ shader рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ, рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдорддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ shader рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рд╕рднреА рд╕рдВрдмрдВрдзрд┐рдд рдЪрд░ рдХреЛ рд╕реАрдзреЗ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЬреЛ рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ shader рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдЪреИрдирд▓ рдХреЗ рд▓рд┐рдП рд╣реИред рд░рдВрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рдЙрддреНрдкрд╛рджрди рдЪреИрдирд▓ рдореЗрдВ shader рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдХреЗ, рд╣рдо рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдЪрд┐рддреНрд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдХреЗ рджрд┐рд▓рдЪрд╕реНрдк рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдорд╛рдирджрдВрдб рд╕рд╣реА рд╣реИрдВред рд╣рдо рдЙрдиреНрд╣реЗрдВ (рд░реВрдкрд╛рдВрддрд░рд┐рдд рдпрд╛ рдирд╣реАрдВ) рд╢реАрд░реНрд╖ рд╕реЗ рдЦрдВрдб рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╣рдо рдорд╛рдирджрдВрдбреЛрдВ рдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:
(рдиреЛрдЯ рд▓реЗрди: GLSL рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ?)
#version 330 core out vec4 FragColor; in vec3 Normal; [...] void main() { [...] FragColor.rgb = Normal; FragColor.a = 1.0f; }
рд░рдВрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рдЧреИрд░-рд░рдВрдЧ рдЪрд░ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдХреЗ, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдм рд╣реИ, рд╣рдо рдЬрд▓реНрджреА рд╕реЗ рдЪрд░ рдХреЗ рдореВрд▓реНрдп рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд░рд┐рдгрд╛рдо рдПрдХ рдХрд╛рд▓реА рд╕реНрдХреНрд░реАрди рд╣реИ, рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдорд╛рдирджрдВрдбреЛрдВ рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд╢реЗрдбрд░реНрд╕ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЬрдм рдЙрдиреНрд╣реЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╢реБрджреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП рдЙрдирдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИ:

рджреГрд╢реНрдп рдкрд░рд┐рдгрд╛рдореЛрдВ рд╕реЗ, рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдорд╛рдирджрдВрдб рд╕рд╣реА рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕реВрдЯ рдХреЗ рджрд╛рдИрдВ рдУрд░ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд▓рд╛рд▓ рд╣реИ (рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдорд╛рдирджрдВрдб рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдХреБрд▓реНрд╣рд╛рдбрд╝реА рдПрдХреНрд╕ рдЕрдХреНрд╖ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ) рдФрд░ рд╕реВрдЯ рдХреЗ рд╕рд╛рдордиреЗ рдХрд╛ рднрд╛рдЧ рднреА рд╕рдХрд╛рд░рд╛рддреНрдордХ z рдЕрдХреНрд╖ (рдиреАрд▓рд╛) рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рд░рдВрдЧреАрди рд╣реИред
рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд┐рд╕реА рднреА рд╡реИрд░рд┐рдПрдмрд▓ рддрдХ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдЕрдЯрдХ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ рддреНрд░реБрдЯрд┐ рд╢реЗрдбреНрд╕ рдореЗрдВ рд╣реИ, рддреЛ рдХреБрдЫ рдЪрд░ рдпрд╛ рдордзреНрдпрд╡рд░реНрддреА рдкрд░рд┐рдгрд╛рдо рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдФрд░ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ рдХрд┐ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдХрд┐рд╕ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╣реИред
рдУрдкрди рдЬреАрдПрд▓рдПрд╕рдПрд▓ рд╕рдВрджрд░реНрдн рд╕рдВрдХрд▓рдХ
рдкреНрд░рддреНрдпреЗрдХ рд╡реАрдбрд┐рдпреЛ рдбреНрд░рд╛рдЗрд╡рд░ рдХреА рдЕрдкрдиреА рдХреНрд╡рд┐рд░рдХреНрд╕ рд╣реЛрддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, NVIDIA рдбреНрд░рд╛рдЗрд╡рд░ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдереЛрдбрд╝рд╛ рдирд░рдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдПрдПрдордбреА рдЪрд╛рд▓рдХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВ (рдЬреЛ рдмреЗрд╣рддрд░ рд╣реИ, рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ)ред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдорд╢реАрди рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рд╢реЗрдб рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдореЗрдВ рдЕрдВрддрд░ рдХреЗ рдХрд╛рд░рдг рджреВрд╕рд░реЗ рдкрд░ рдкреИрд╕рд╛ рдирд╣реАрдВ рдХрдорд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдХрдИ рд╡рд░реНрд╖реЛрдВ рдХреЗ рдЕрдиреБрднрд╡ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╡рд┐рднрд┐рдиреНрди GPU рдХреЗ рдмреАрдЪ рд╕рднреА рдЕрдВрддрд░реЛрдВ рдХреЛ рд╕реАрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рд╢реЗрдб рд╣рд░ рдЬрдЧрд╣ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ, рддреЛ рдЖрдк GLSL рд╕рдВрджрд░реНрдн рд╕рдВрдХрд▓рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдпрд╣рд╛рдВ ( рд╕реНрд░реЛрдд ) рддрдерд╛рдХрдерд┐рдд рдЬреАрдПрд▓рдПрд╕рдПрд▓ рд▓реИрдВрдЧ рд╡реИрд▓рд┐рдбреЗрдЯрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рд╛рде, рдЖрдк рдЕрдкрдиреЗ рд╢реЗрдбрд░реНрд╕ рдХреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ 1 рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдПрдХреНрд╕рдЯреЗрдВрд╢рди рджреНрд╡рд╛рд░рд╛ рд╢реЗрдбрд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ:
.vert
: рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбрд░.frag
: рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдХрд░рдирд╛.geom
: рдЬреНрдпрд╛рдорд┐рддреАрдп shader.tesc
: .tesc
рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╢реЗрдбрд░.tese
: .tese
рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╢реЗрдбрд░.comp
: рдЧрдгрдирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛
рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрд▓рд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ:
glslangValidator shader.vert
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИ, рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреБрдЫ рднреА рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдПрдХ рдЯреВрдЯреА рд╣реБрдИ рдЪреЛрдЯреА рдХреА рдЫрд╛рдпрд╛ рдкрд░, рдЖрдЙрдЯрдкреБрдЯ рдЬреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛:

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

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

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

рдореИрдВрдиреЗ рдХреЛрдбрдПрдХреНрд╕рдПрд▓ рдХрд╛ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рд░реЗрдВрдбрд░рдбреЙрдХ рдореБрдЭреЗ рдЖрд╕рд╛рди рд▓рдЧ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ рдХреЛрдбрдПрдХреНрд╕рдПрд▓ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдЙрдкрдХрд░рдг рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ рдФрд░ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ GPU рдХреЗ рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рдирд┐рд░реНрдорд╛рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
NVIDIA рд╢реНрд╡реЗрдд
Nsight рдПрдХ рд▓реЛрдХрдкреНрд░рд┐рдп NUedia GPU рдбрд┐рдмрдЧрд┐рдВрдЧ рдЯреВрд▓ рд╣реИред рдпрд╣ рди рдХреЗрд╡рд▓ рджреГрд╢реНрдп рд╕реНрдЯреВрдбрд┐рдпреЛ рдФрд░ рдЧреНрд░рд╣рдг рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧ-рдЗрди рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рдЕрд▓рдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рднреА рд╣реИред рдЧреНрд░рд╛рдлрд┐рдХ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП Nsight рдкреНрд▓рдЧрдЗрди рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рдЪреАрдЬ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ GPU рдХреЗ рдЙрдкрдпреЛрдЧ рдФрд░ GPU рдХреЗ рдлреНрд░реЗрдо-рдмрд╛рдп-рдлреНрд░реЗрдо рд░рд╛рдЬреНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреЗ рдЖрдБрдХрдбрд╝реЗ рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИред
рдЬрд┐рд╕ рд╕рдордп рдЖрдк рдбрд┐рдмрдЧ рд╕реНрдЯреВрдбрд┐рдпреЛ рдпрд╛ рдПрдХреНрд▓рд┐рдкреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдпрд╛ рдПрдХреНрд▓рд┐рдкреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдирд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЕрдВрджрд░ рд╣реА рд╢реБрд░реВ рд╣реЛрдЧрд╛ред Nsight рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд: рдПрдХ рдЪрд▓ рд░рд╣реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ GUI рд╕рд┐рд╕реНрдЯрдо (GUI, рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕) рдХрд╛ рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд░рдирд╛, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдпрд╛ рдлреНрд░реЗрдо-рдмрд╛рдп-рдлреНрд░реЗрдо рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

Nsight рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рдЙрдкрдХрд░рдг рд╣реИ, рдЬреЛ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЙрдкрд░реЛрдХреНрдд рдЯреВрд▓ рдХреЛ рдкрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдПрдХ рдЧрдВрднреАрд░ рдЦрд╛рдореА рд╣реИ: рдпрд╣ рдХреЗрд╡рд▓ NVIDIA рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХрд╛рд░реНрдб рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк NVIDIA рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХрд╛рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдкреНрд░рдпрд╛рд╕ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред
, ( , VOGL APItrace ), , . , , () ( , ).
- ? тАФ Reto Koradi.
- тАФ Vallentin Source.
рдкреБрдирд╢реНрдЪ : рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддрдмрд╛рджрд▓реЛрдВ рдХреЗ рд╕рдордиреНрд╡рдп рдХреЗ рд▓рд┐рдП рдПрдХ рддрд╛рд░ рд╣реИ ред рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдиреБрд╡рд╛рдж рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреА рдЧрдВрднреАрд░ рдЗрдЪреНрдЫрд╛ рд╣реИ, рддреЛ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!