Я вызываю glGetIntegerv после успешного вызова glfwInit() и успешного создания окна с помощью *window = glfwCreateWindow(800, 600, "OpenGL", NULL, NULL);, делая контекст окна текущим с помощью glfwMakeContextCurrent(*window);, и после успешной инициализации glewInit(). Я убедился, что glfwInit() и glewInit() вернули успешные значения.
Соответствующий код:
Код: Выделить всё
enum main_err {
MAIN_GLFW_INIT_ERR,
MAIN_WINDOW_INIT_ERR,
MAIN_GLEW_INIT_ERR,
MAIN_GLFW_LOG_ERR,
MAIN_GOOD
};
main_err init_glfw(GLFWwindow** window) {
glfwSetErrorCallback(glfw_error_callback);
if (!glfwInit()) {
return MAIN_GLFW_INIT_ERR;
}
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_RESIZABLE, false);
glfwWindowHint(GLFW_SAMPLES, 4);
*window = glfwCreateWindow(800, 600, "OpenGL", NULL, NULL);
if (!*window) {
glfwTerminate();
return MAIN_WINDOW_INIT_ERR;
}
glfwMakeContextCurrent(*window);
glfwSetKeyCallback(*window, glfw_key_callback);
glfwSwapInterval(1);
int width, height;
glfwGetFramebufferSize(*window, &width, &height);
glViewport(0, 0, width, height);
return MAIN_GOOD;
}
main_err glfw_log_parameters() {
GLenum param[] = {
// integer values
GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS,
GL_MAX_CUBE_MAP_TEXTURE_SIZE,
GL_MAX_DRAW_BUFFERS,
GL_MAX_FRAGMENT_UNIFORM_COMPONENTS,
GL_MAX_TEXTURE_IMAGE_UNITS,
GL_MAX_TEXTURE_SIZE,
GL_MAX_VARYING_COMPONENTS,
GL_MAX_VARYING_FLOATS,
GL_MAX_VARYING_VECTORS,
GL_MAX_VERTEX_ATTRIBS,
GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS,
GL_MAX_VERTEX_UNIFORM_COMPONENTS
};
const char* param_str[] = {
"GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS",
"GL_MAX_CUBE_MAP_TEXTURE_SIZE",
"GL_MAX_DRAW_BUFFERS",
"GL_MAX_FRAGMENT_UNIFORM_COMPONENTS",
"GL_MAX_TEXTURE_IMAGE_UNITS",
"GL_MAX_TEXTURE_SIZE",
"GL_MAX_VARYING_COMPONENTS",
"GL_MAX_VARYING_FLOATS",
"GL_MAX_VARYING_VECTORS",
"GL_MAX_VERTEX_ATTRIBS",
"GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS",
"GL_MAX_VERTEX_UNIFORM_COMPONENTS"
};
for (int i = 0; i < 10; i++) {
GLint p = 123456789;
glGetIntegerv(param[i], &p);
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/78818999/calling-glgetintegerv-with-gl-max-varying-components-does-not-return-value[/url]