Пример кода:
1. glGenBuffers(1, &VboId);
2. glBindBuffer(GL_ARRAY_BUFFER, VboId);
3. glBufferData(GL_ARRAY_BUFFER, sizeof(Vertices), Vertices, GL_STATIC_DRAW);
4. glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);
5. glEnableVertexAttribArray(0);
Таким образом, «0» в строках 4 (первый аргумент) и 5 относится к произвольному идентификатору / местоположению, которое мы выбрали.В GLSL, если мы хотим сослаться на эти данные, мы просто должны обратиться к одному и тому же идентификатору:
layout(location=0) in vec4 in_Position;
Однако в другом примере программы я видел, как это делается по-другому, без ссылкив «расположение мест».Вместо этого мы делаем что-то вроде этого:
1. glGenBuffers(1, &VboId);
2. glBindBuffer(GL_ARRAY_BUFFER, VboId);
3. glBufferData(GL_ARRAY_BUFFER, sizeof(Vertices), Vertices, GL_STATIC_DRAW);
4. glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);
5. glBindAttribLocation(shaderProgramHandle, 0, "in_position");
6. glEnableVertexAttribArray(0);
Мы добавили дополнительный шаг (5), где мы, кажется, привязываем указатель этого атрибута к определенной переменной в конкретной программе.И затем в нашем GLSL мы просто пишем это вместо:
in vec3 in_position;
Без ссылки на местоположение.
Если я не ошибаюсь, эти 2 программы, по сути, делают одно и то же... так почему разница?Каковы плюсы и минусы каждого метода?
(я только начал изучать OpenGL 3.x)