нужен конкретный пример того, когда эффективный буферный доступ эффективен - PullRequest
0 голосов
/ 10 июня 2019

В (KHR_robustness.txt) такой переход: при включении (проверка надежного буфера) индексы в массиве элементов, которые ссылаются на данные вершин, которые находятся вне объекта буфера вершин включенного атрибута [для OpenGL ES], приводят к неопределенным значениям[для OpenGL] приводит к чтению нуля для соответствующих атрибутов, но не может привести к сбою приложения.

Я не мог знать, при каких условиях будет работать надежный доступ к буферу (если он уже был включен)?

Я пытаюсь изменить индексы [].Позвольте этому индексировать вне связанного массива.Но независимо от того, активирую ли я надежный доступ к буферу или нет, результатом отрисовки является замена неверной индексной точки на точку (0,0,0,0,0,0,1,0). И то и другое не приводит к сбою приложения.

Исходный код

vertexArray[ ]={
-0.5,0.5,0.0,1.0,
-1.0,0.5,0.0,1.0,
-0.5,0.0,0.0,1.0,
-0.5,1.0,0.0,1.0,
}
indices[ ]={
0,1,2
1,2,3,
}
glDrawElements(GL_TRIANGLES,12,GL_UNSINGED_SHORT,0);

Код модификации

vertexArray[ ]={
-0.5,0.5,0.0,1.0,
-1.0,0.5,0.0,1.0,
-0.5,0.0,0.0,1.0,
-0.5,1.0,0.0,1.0,
}
indices[ ]={
0,1,2
1,2,4,
}
glDrawElements(GL_TRIANGLES,12,GL_UNSINGED_SHORT,0);

// indices [6] = 4, в то время как vertexArray [4] находится вне этого массива, я думал в этом случае,произошел доступ из буфера. (Это правильно?)

1 Ответ

0 голосов
/ 11 июня 2019

Но независимо от того, включаю я надежный доступ к буферу или нет, Результатом розыгрыша является замена неверной индексной точки на (0,0,0,0,0,0,1,0) балла. И то и другое не приводит к применению отказ.

Без включенного расширения поведение за пределами доступа определяется реализацией. Он может получить доступ вне массива, может произойти сбой, он может заменить данные за пределами константы постоянным значением, он может ограничить доступ к экстентам буфера. Он может выбирать, какой из них непредсказуемо и непоследовательно, поэтому приложение не может безопасно полагаться ни на что.

Формулировка спецификации такова, что расширение должно:

Предоставить возможность гарантировать, что буферный объект выходит за пределы доступ к графическому процессору будет иметь детерминированное поведение и исключать нестабильность или прекращение работы приложения из-за неправильного буфера доступ.

т.е. сбой запрещен, но любое другое поведение в более раннем списке в порядке, если оно последовательно применяется.

В итоге; поведение, которое вы видите, является допустимым для обоих этих сценариев, но обратите внимание, что другие платформы могут дать другой результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...