Просматривая С ++ Виллем 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 не имеет примитивного логического типа), чтобы сосредоточиться на современном коде.
(См. Цитату Треветта, взятую из Вот)
первоначальный редизайн, мы не совместимы с предыдущими версиями
Попробуйте распечатать sizeof(bool)
в вашей системе. Общие ответы — 4 или 1, и значение ни в коем случае не является универсальным. Вы можете получить разные ответы в зависимости от используемых вами флагов компилятора.
Vulkan должен работать одинаково на всех системах и работать правильно, независимо от того, какие флаги компилятора вы используете для компиляции вашей программы. Если Vulkan был скомпилирован с sizeof(bool) == 1
но вы компилируете с sizeof(bool) == 4
, интерфейс будет неверным. Я лично был свидетелем этой конкретной ошибки.
Других решений пока нет …