Я получаю ошибку сегментации в OpenGL, когда я запускаю glGetIntegerv () в моей программе
вот полная программа
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <stdio.h>
// Shader sources
const GLchar vertexSource[] =
"#version 430 core\n""layout(location = 0) in vec4 vPosition""void main() {"" gl_Position = vec4(position, 0.0, 1.0);""}";
const GLchar fragmentSource[] =
"#version 430 core\n"
"out vec4 fColor""void main() {"" fColor = vec4(0.0,0.0,1.0, 1.0);""}";
int main(){
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
GLFWwindow* window = glfwCreateWindow(800, 600, "OpenGL", NULL, NULL);
glfwMakeContextCurrent(window);
glewExperimental = GL_TRUE;
glewInit();//Create Vertex Array Object
GLuint vao;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
// Create a Vertex Buffer Object and copy the vertex data to it
GLuint vbo;
glGenBuffers(1, &vbo);GLfloat vertices[] = {
-0.5f, 0.5f, 1.0f, 0.0f, 0.0f, // Top-left
0.5f, 0.5f, 0.0f, 1.0f, 0.0f, // Top-right
0.5f, -0.5f, 0.0f, 0.0f, 1.0f, // Bottom-right
-0.5f, -0.5f, 1.0f, 1.0f, 1.0f // Bottom-left
};
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);GLint * name;
glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, name);//printf(" %d \n", *kay);}
программа не выдаст мне никаких ошибок, если я отключу функцию glGetIntegerv (), так что она определенно имеет к этому какое-то отношение, и да, я понимаю, что программа не завершена, но, безусловно, glGetIntegerv не имеет к этому никакого отношения , это должно быть доступ к моему GPU для этой информации
name
неинициализированный указатель Обычно он имеет некоторое значение мусора, что означает, что он может указывать на любое возможное местоположение. Запись в него является неопределенным поведением, и обычно приводит к чему-то вроде ошибки сегментации.
На самом деле, вам не нужен указатель здесь:
GLint name;
glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &name);