| 152 | } |
| 153 | |
| 154 | class CppBuilder |
| 155 | { |
| 156 | |
| 157 | private $header_functions = []; |
| 158 | private $vk_header_version = null; |
| 159 | |
| 160 | function __construct($vk_header_version) |
| 161 | { |
| 162 | $this->vk_header_version = $vk_header_version; |
| 163 | } |
| 164 | |
| 165 | public function generateFeatures2CodeBlock($extension) |
| 166 | { |
| 167 | $sType = TypeContainer::getsType($extension->features2); |
| 168 | $res = "\tif (extensionSupported(\"{$extension->name}\")) {\n"; |
| 169 | $res .= "\t\tconst char* extension(\"{$extension->name}\");\n"; |
| 170 | $res .= "\t\t{$extension->features2['name']}* extFeatures = new {$extension->features2['name']}{};\n"; |
| 171 | $res .= "\t\textFeatures->sType = $sType;\n"; |
| 172 | $res .= "\t\tdeviceFeatures2 = initDeviceFeatures2(extFeatures);\n"; |
| 173 | $res .= "\t\tvulkanContext.vkGetPhysicalDeviceFeatures2KHR(device, &deviceFeatures2);\n"; |
| 174 | foreach ($extension->features2->member as $member) { |
| 175 | // Skip types that are not related to feature details |
| 176 | $type = (string)$member->type; |
| 177 | if (in_array($type, ['VkStructureType', 'void'])) { |
| 178 | continue; |
| 179 | } |
| 180 | $name = (string)$member->name; |
| 181 | $res .= "\t\tpushFeature2(extension, \"$name\", extFeatures->$name);\n"; |
| 182 | } |
| 183 | $res .= "\t\tdelete extFeatures;\n"; |
| 184 | $res .= "\t}\n"; |
| 185 | return $res; |
| 186 | } |
| 187 | |
| 188 | public function generateProperties2CodeBlock($extension) |
| 189 | { |
| 190 | $sType = TypeContainer::getsType($extension->properties2); |
| 191 | $res = "\tif (extensionSupported(\"{$extension->name}\")) {\n"; |
| 192 | $res .= "\t\tconst char* extension(\"{$extension->name}\");\n"; |
| 193 | $res .= "\t\t{$extension->properties2['name']}* extProps = new {$extension->properties2['name']}{};\n"; |
| 194 | $res .= "\t\textProps->sType = $sType;\n"; |
| 195 | $res .= "\t\tdeviceProps2 = initDeviceProperties2(extProps);\n"; |
| 196 | $res .= "\t\tvulkanContext.vkGetPhysicalDeviceProperties2KHR(device, &deviceProps2);\n"; |
| 197 | // @todo: QVariant vs. QVariant::fromValue |
| 198 | foreach ($extension->properties2->member as $member) { |
| 199 | // Skip types that are not related to feature details |
| 200 | $type = (string)$member->type; |
| 201 | if (in_array($type, ['VkStructureType', 'void'])) { |
| 202 | continue; |
| 203 | } |
| 204 | $name = (string)$member->name; |
| 205 | $vktype = (string)$member->type; |
| 206 | if ($type == "VkExtent2D") { |
| 207 | $res .= "\t\tpushProperty2(extension, \"$name\", QVariant::fromValue(QVariantList({ extProps->$name.width, extProps->$name.height })));\n"; |
| 208 | continue; |
| 209 | } |
| 210 | if ($type == "size_t") { |
| 211 | $res .= "\t\tpushProperty2(extension, \"$name\", QVariant::fromValue(extProps->$name));\n"; |
nothing calls this directly
no outgoing calls
no test coverage detected