Почему VkBool32 от Vulkan реализован как неподписанный тип int?

Просматривая С ++ Виллем C ++ Vulkan Demos, размещенный на GitHub, Я заметил, что некоторые функции возвращают тип данных VkBool32,

Мне было любопытно, почему Khronos не использовал обычный bool, когда я заметил линию

typedef uint32_t VkBool32;

в vulkan.h. Uint32_t определяется как

typedef unsigned int uint32_t;

в stdint.h.

Мой вопрос: почему имеет смысл выбрасывать 3 байта, если стандартный Bool будет выполнять работу только с одним байтом? Мой маленький Recherche показал, что почти нет разницы в производительности (см. Что быстрее: if (bool) или if (int)?), и сами Khronos сказали, что они хотят минимизировать проблемы совместимости (в данном случае старый C не имеет примитивного логического типа), чтобы сосредоточиться на современном коде.

(См. Цитату Треветта, взятую из Вот)

первоначальный редизайн, мы не совместимы с предыдущими версиями

7

Решение

Попробуйте распечатать sizeof(bool) в вашей системе. Общие ответы — 4 или 1, и значение ни в коем случае не является универсальным. Вы можете получить разные ответы в зависимости от используемых вами флагов компилятора.

Vulkan должен работать одинаково на всех системах и работать правильно, независимо от того, какие флаги компилятора вы используете для компиляции вашей программы. Если Vulkan был скомпилирован с sizeof(bool) == 1 но вы компилируете с sizeof(bool) == 4, интерфейс будет неверным. Я лично был свидетелем этой конкретной ошибки.

9

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]