После обновления до Mavericks My Software OpenGL запускает вершинный шейдер на CPU

StackOverflow https://stackoverflow.com//questions/21001453

  •  20-12-2019
  •  | 
  •  

Вопрос

У меня есть большое программное обеспечение C ++ OpenGL, которое работало с очень высокой производительностью под горным львом. После обновления до Mavericks и перекомпиляция производительность значительно упала. Путем переключения между треугольными полосками и треугольниками в качестве визуализации типа объекта и просмотра падения производительности еще одним фактором 2 или 3, я нахожусь под впечатлением, что вершинский шейдер должен быть причиной проблемы и учитывая, насколько простоЯ подозреваю, что он работает в программном обеспечении на CPU, а не на графическом процессе. Как я могу восстановить производительность, которые у меня было под горным львом?Есть ли некоторые изменения, которые мне нужно сделать?

Источник моего вершинного шейдера приведен ниже.Он подает следующий геометрический шейдер.

#version 410

uniform mat3 normalMatrix;
uniform mat4 modelMatrix;
uniform mat4 modelProjMatrix;
uniform vec3 color  = vec3(0.4,0.4, 0.4);

in vec3 vertex;
in vec3 normal;

out NodeData {
    vec3 normal, position;
    vec4 refColor;
} v;

void main()
{
    vec4 position = modelMatrix * vec4(vertex, 1.0);
    vec3 vertNormal = normal;
    v.normal = normalize(normalMatrix * vertNormal);
    v.position = position.xyz;

    v.refColor = vec4(color, 1.0);
    gl_Position = modelProjMatrix * vec4(vertex, 1.0);

}
.

Для 180 000 треугольников я могу получить 3FP, только при кормлении как треугольники и около 8, когда кормятся как полоски.Треугольник упорядочен в соответствии с алгоритмом оптимизации Forsyth для оптимизации кеша после преобразования.

Это было полезно?

Решение

Решение: убедитесь, что все векторные буферы, которые добавляются в VAO, используются в вершине.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top