Anonymous
Вызов glGetIntegerv с GL_MAX_VARYING_COMPONENTS не возвращает значение
Сообщение
Anonymous » 03 авг 2024, 00:51
При вызове glGetIntegerv(GL_MAX_VARYING_COMPONENTS, &i); или glGetIntegerv(GL_MAX_VARYING_FLOATS, &i); с GLint i; в i ничего не записывается. Ошибки GL_INVALID_ENUM создаются в соответствии с glGetError().
Я вызываю 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]
1722635473
Anonymous
При вызове glGetIntegerv(GL_MAX_VARYING_COMPONENTS, &i); или glGetIntegerv(GL_MAX_VARYING_FLOATS, &i); с GLint i; в i ничего не записывается. Ошибки GL_INVALID_ENUM создаются в соответствии с glGetError(). Я вызываю glGetIntegerv после успешного вызова glfwInit() и успешного создания окна с помощью *window = glfwCreateWindow(800, 600, "OpenGL", NULL, NULL);, делая контекст окна текущим с помощью glfwMakeContextCurrent(*window);, и после успешной инициализации glewInit(). Я убедился, что glfwInit() и glewInit() вернули успешные значения. Соответствующий код: [code]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]