Если устройство поддерживает GL_ARB_debug_output, тогда отладочный вывод может иметь представление о том, является ли что-то программным обеспечением или плохим для производительности.
Использование описано в документе http://www.opengl.org/registry/specs/ARB/debug_output.txt Короче говоря, вы должны установить буфер журнала или функцию обратного вызова, которая будет получать сообщения.
Существует также еще один удлинитель отладки http://www.opengl.org/registry/specs/KHR/debug.txt, вероятно, еще существует.
использовать расширение KHR вы должны инициализировать Context правильно
EGLint ctx_attribs[] = {
EGL_CONTEXT_CLIENT_VERSION, 2,
EGL_CONTEXT_FLAGS_KHR, EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR,
EGL_NONE};
EGLContext *ctx = eglCreateContext(dpy, config, EGL_NO_CONTEXT, ctx_attribs);
и установка обратного вызова
static void on_gl_error(enum source, enum type, uint id, enum severity,
sizei length, const char* message, void *userParam)
{
printf("%s\n", message);
}
static void enable_debug_callbacks(void)
{
glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR, GL_TRUE);
glDebugMessageCallbackKHR(on_gl_error, NULL);
}
Другие, вероятно, работают подобным образом, вы должны проверить, поддерживаемыми расширениями, прежде чем пытаться это, это делается проверяя возврат вызова. Это строка со списком всех поддерживаемых расширений.
glGetString(GL_EXTENSIONS);
Erg. Ну, это печально. Если ваш ответ правильный (как это, вероятно, есть), то у меня совсем немного рассола. Я дам ему еще несколько дней, чтобы узнать, есть ли у кого-нибудь ответ, а если нет, то просто бросьте вам щедрость. – fouric
thecoshman правильный. По сравнению с DirectX, который (используется) обеспечивает запрос на то, что аппаратное ускорение, OpenGL выбрал другой маршрут, который поддерживает все функции, но не было гарантии производительности. Фактически, в предыдущие дни различные комбинации настроек состояния могли привести к тому, что драйвер переместился с аппаратного ускорения на поддержку программного обеспечения. Вы получаете гораздо меньше, когда используете OpenGL только для шейдеров в настоящее время, но ситуация несколько возродилась с помощью OpenGL ES и встроенного оборудования. – radical7
Это позор, я бы счел разумным иметь стандартную функцию поддержки запросов для определенных функций.По моему мнению, это действительно то, что нужно сделать, позволяя вам вернуться к более низкому качеству, но все же более быстрым методам благодаря аппаратным ускорениям. Насколько я понимаю, это примерно так, как работают расширения, за исключением того, что функции «ядра» гарантируют, по крайней мере, поддержку уровня программного обеспечения. Там * может * быть расширением, которое может делать то, что вам нужно, но вы не можете точно сказать, насколько он будет широко поддерживаться. – thecoshman