Важна ли позиция BeginDraw () (Direct2D) при кодировании? - PullRequest
0 голосов
/ 27 февраля 2020

В настоящее время я изучаю, как использовать Direct2D для создания приложения, и мне было интересно, имеет ли значение размещение большого количества «неграфического» кода после вызова «BeginDraw ()». Я не совсем понимаю, что на самом деле делает BeginDraw (), поэтому мой вопрос в основном касается времени выполнения. Это замедляет другие процессы? Это «съедает» процессор после его вызова до тех пор, пока не будет вызван «EndDraw ()»?

1 Ответ

1 голос
/ 27 февраля 2020

Вы не получите дополнительную плату за период, потраченный в пределах BeginDraw.

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

Но вы не получите затрат из-за того, что блок имеет большую область видимости. На самом деле, было бы даже полезно вызвать его раньше, так как это дает времени lib2 Direct2D для выполнения фоновой обработки, если это необходимо. Может быть, просто привлечение памяти. Я ожидал бы, что это будет незначительным или не повлияет, но выполнение этого ранее, если это единственное изменение, может помочь не навредить.

На практике старайтесь использовать как можно меньше блоков. И используйте любой доступный API буферизации команд, в отличие от немедленных команд рисования. (извините за нехватку деталей здесь, я не очень знаком с DirectDraw, больше из OpenGL / Vulkan dev)

...