1e41f4b71Sopenharmony_ci# Vulkan支持能力 2e41f4b71Sopenharmony_ci 3e41f4b71Sopenharmony_ci[Vulkan](https://www.vulkan.org/)是一套2D和3D绘图应用程序接口,具有跨平台、高性能的特点。OpenHarmony现已支持Vulkan v1.3.231版本。 4e41f4b71Sopenharmony_ci 5e41f4b71Sopenharmony_ci## 支持的标准库接口列表 6e41f4b71Sopenharmony_ci 7e41f4b71Sopenharmony_ci支持Vulkan v1.3.231版本的部分接口能力,具体请见下表。 8e41f4b71Sopenharmony_ci 9e41f4b71Sopenharmony_ci|符号类型|符号名| 10e41f4b71Sopenharmony_ci| --- | --- | 11e41f4b71Sopenharmony_ci|FUNC|vkAcquireNextImage2KHR| 12e41f4b71Sopenharmony_ci|FUNC|vkAcquireNextImageKHR| 13e41f4b71Sopenharmony_ci|FUNC|vkAllocateCommandBuffers| 14e41f4b71Sopenharmony_ci|FUNC|vkAllocateDescriptorSets| 15e41f4b71Sopenharmony_ci|FUNC|vkAllocateMemory| 16e41f4b71Sopenharmony_ci|FUNC|vkBeginCommandBuffer| 17e41f4b71Sopenharmony_ci|FUNC|vkBindBufferMemory| 18e41f4b71Sopenharmony_ci|FUNC|vkBindBufferMemory2| 19e41f4b71Sopenharmony_ci|FUNC|vkBindImageMemory| 20e41f4b71Sopenharmony_ci|FUNC|vkBindImageMemory2| 21e41f4b71Sopenharmony_ci|FUNC|vkCmdBeginQuery| 22e41f4b71Sopenharmony_ci|FUNC|vkCmdBeginRendering| 23e41f4b71Sopenharmony_ci|FUNC|vkCmdBeginRenderPass| 24e41f4b71Sopenharmony_ci|FUNC|vkCmdBeginRenderPass2| 25e41f4b71Sopenharmony_ci|FUNC|vkCmdBindDescriptorSets| 26e41f4b71Sopenharmony_ci|FUNC|vkCmdBindIndexBuffer| 27e41f4b71Sopenharmony_ci|FUNC|vkCmdBindPipeline| 28e41f4b71Sopenharmony_ci|FUNC|vkCmdBindVertexBuffers| 29e41f4b71Sopenharmony_ci|FUNC|vkCmdBindVertexBuffers2| 30e41f4b71Sopenharmony_ci|FUNC|vkCmdBlitImage| 31e41f4b71Sopenharmony_ci|FUNC|vkCmdBlitImage2| 32e41f4b71Sopenharmony_ci|FUNC|vkCmdClearAttachments| 33e41f4b71Sopenharmony_ci|FUNC|vkCmdClearColorImage| 34e41f4b71Sopenharmony_ci|FUNC|vkCmdClearDepthStencilImage| 35e41f4b71Sopenharmony_ci|FUNC|vkCmdCopyBuffer| 36e41f4b71Sopenharmony_ci|FUNC|vkCmdCopyBuffer2| 37e41f4b71Sopenharmony_ci|FUNC|vkCmdCopyBufferToImage| 38e41f4b71Sopenharmony_ci|FUNC|vkCmdCopyBufferToImage2| 39e41f4b71Sopenharmony_ci|FUNC|vkCmdCopyImage| 40e41f4b71Sopenharmony_ci|FUNC|vkCmdCopyImage2| 41e41f4b71Sopenharmony_ci|FUNC|vkCmdCopyImageToBuffer| 42e41f4b71Sopenharmony_ci|FUNC|vkCmdCopyImageToBuffer2| 43e41f4b71Sopenharmony_ci|FUNC|vkCmdCopyQueryPoolResults| 44e41f4b71Sopenharmony_ci|FUNC|vkCmdDispatch| 45e41f4b71Sopenharmony_ci|FUNC|vkCmdDispatchBase| 46e41f4b71Sopenharmony_ci|FUNC|vkCmdDispatchIndirect| 47e41f4b71Sopenharmony_ci|FUNC|vkCmdDraw| 48e41f4b71Sopenharmony_ci|FUNC|vkCmdDrawIndexed| 49e41f4b71Sopenharmony_ci|FUNC|vkCmdDrawIndexedIndirect| 50e41f4b71Sopenharmony_ci|FUNC|vkCmdDrawIndexedIndirectCount| 51e41f4b71Sopenharmony_ci|FUNC|vkCmdDrawIndirect| 52e41f4b71Sopenharmony_ci|FUNC|vkCmdDrawIndirectCount| 53e41f4b71Sopenharmony_ci|FUNC|vkCmdEndQuery| 54e41f4b71Sopenharmony_ci|FUNC|vkCmdEndRendering| 55e41f4b71Sopenharmony_ci|FUNC|vkCmdEndRenderPass| 56e41f4b71Sopenharmony_ci|FUNC|vkCmdEndRenderPass2| 57e41f4b71Sopenharmony_ci|FUNC|vkCmdExecuteCommands| 58e41f4b71Sopenharmony_ci|FUNC|vkCmdFillBuffer| 59e41f4b71Sopenharmony_ci|FUNC|vkCmdNextSubpass| 60e41f4b71Sopenharmony_ci|FUNC|vkCmdNextSubpass2| 61e41f4b71Sopenharmony_ci|FUNC|vkCmdPipelineBarrier| 62e41f4b71Sopenharmony_ci|FUNC|vkCmdPipelineBarrier2| 63e41f4b71Sopenharmony_ci|FUNC|vkCmdPushConstants| 64e41f4b71Sopenharmony_ci|FUNC|vkCmdResetEvent| 65e41f4b71Sopenharmony_ci|FUNC|vkCmdResetEvent2| 66e41f4b71Sopenharmony_ci|FUNC|vkCmdResetQueryPool| 67e41f4b71Sopenharmony_ci|FUNC|vkCmdResolveImage| 68e41f4b71Sopenharmony_ci|FUNC|vkCmdResolveImage2| 69e41f4b71Sopenharmony_ci|FUNC|vkCmdSetBlendConstants| 70e41f4b71Sopenharmony_ci|FUNC|vkCmdSetCullMode| 71e41f4b71Sopenharmony_ci|FUNC|vkCmdSetDepthBias| 72e41f4b71Sopenharmony_ci|FUNC|vkCmdSetDepthBiasEnable| 73e41f4b71Sopenharmony_ci|FUNC|vkCmdSetDepthBounds| 74e41f4b71Sopenharmony_ci|FUNC|vkCmdSetDepthBoundsTestEnable| 75e41f4b71Sopenharmony_ci|FUNC|vkCmdSetDepthCompareOp| 76e41f4b71Sopenharmony_ci|FUNC|vkCmdSetDepthTestEnable| 77e41f4b71Sopenharmony_ci|FUNC|vkCmdSetDepthWriteEnable| 78e41f4b71Sopenharmony_ci|FUNC|vkCmdSetDeviceMask| 79e41f4b71Sopenharmony_ci|FUNC|vkCmdSetEvent| 80e41f4b71Sopenharmony_ci|FUNC|vkCmdSetEvent2| 81e41f4b71Sopenharmony_ci|FUNC|vkCmdSetFrontFace| 82e41f4b71Sopenharmony_ci|FUNC|vkCmdSetLineWidth| 83e41f4b71Sopenharmony_ci|FUNC|vkCmdSetPrimitiveRestartEnable| 84e41f4b71Sopenharmony_ci|FUNC|vkCmdSetPrimitiveTopology| 85e41f4b71Sopenharmony_ci|FUNC|vkCmdSetRasterizerDiscardEnable| 86e41f4b71Sopenharmony_ci|FUNC|vkCmdSetScissor| 87e41f4b71Sopenharmony_ci|FUNC|vkCmdSetScissorWithCount| 88e41f4b71Sopenharmony_ci|FUNC|vkCmdSetStencilCompareMask| 89e41f4b71Sopenharmony_ci|FUNC|vkCmdSetStencilOp| 90e41f4b71Sopenharmony_ci|FUNC|vkCmdSetStencilReference| 91e41f4b71Sopenharmony_ci|FUNC|vkCmdSetStencilTestEnable| 92e41f4b71Sopenharmony_ci|FUNC|vkCmdSetStencilWriteMask| 93e41f4b71Sopenharmony_ci|FUNC|vkCmdSetViewport| 94e41f4b71Sopenharmony_ci|FUNC|vkCmdSetViewportWithCount| 95e41f4b71Sopenharmony_ci|FUNC|vkCmdUpdateBuffer| 96e41f4b71Sopenharmony_ci|FUNC|vkCmdWaitEvents| 97e41f4b71Sopenharmony_ci|FUNC|vkCmdWaitEvents2| 98e41f4b71Sopenharmony_ci|FUNC|vkCmdWriteTimestamp| 99e41f4b71Sopenharmony_ci|FUNC|vkCmdWriteTimestamp2| 100e41f4b71Sopenharmony_ci|FUNC|vkCreateBuffer| 101e41f4b71Sopenharmony_ci|FUNC|vkCreateBufferView| 102e41f4b71Sopenharmony_ci|FUNC|vkCreateCommandPool| 103e41f4b71Sopenharmony_ci|FUNC|vkCreateComputePipelines| 104e41f4b71Sopenharmony_ci|FUNC|vkCreateDescriptorPool| 105e41f4b71Sopenharmony_ci|FUNC|vkCreateDescriptorSetLayout| 106e41f4b71Sopenharmony_ci|FUNC|vkCreateDescriptorUpdateTemplate| 107e41f4b71Sopenharmony_ci|FUNC|vkCreateDevice| 108e41f4b71Sopenharmony_ci|FUNC|vkCreateDisplayModeKHR| 109e41f4b71Sopenharmony_ci|FUNC|vkCreateDisplayPlaneSurfaceKHR| 110e41f4b71Sopenharmony_ci|FUNC|vkCreateEvent| 111e41f4b71Sopenharmony_ci|FUNC|vkCreateFence| 112e41f4b71Sopenharmony_ci|FUNC|vkCreateFramebuffer| 113e41f4b71Sopenharmony_ci|FUNC|vkCreateGraphicsPipelines| 114e41f4b71Sopenharmony_ci|FUNC|vkCreateImage| 115e41f4b71Sopenharmony_ci|FUNC|vkCreateImageView| 116e41f4b71Sopenharmony_ci|FUNC|vkCreateInstance| 117e41f4b71Sopenharmony_ci|FUNC|vkCreatePipelineCache| 118e41f4b71Sopenharmony_ci|FUNC|vkCreatePipelineLayout| 119e41f4b71Sopenharmony_ci|FUNC|vkCreatePrivateDataSlot| 120e41f4b71Sopenharmony_ci|FUNC|vkCreateQueryPool| 121e41f4b71Sopenharmony_ci|FUNC|vkCreateRenderPass| 122e41f4b71Sopenharmony_ci|FUNC|vkCreateRenderPass2| 123e41f4b71Sopenharmony_ci|FUNC|vkCreateSampler| 124e41f4b71Sopenharmony_ci|FUNC|vkCreateSamplerYcbcrConversion| 125e41f4b71Sopenharmony_ci|FUNC|vkCreateSemaphore| 126e41f4b71Sopenharmony_ci|FUNC|vkCreateShaderModule| 127e41f4b71Sopenharmony_ci|FUNC|vkCreateSharedSwapchainsKHR| 128e41f4b71Sopenharmony_ci|FUNC|vkCreateSwapchainKHR| 129e41f4b71Sopenharmony_ci|FUNC|vkDestroyBuffer| 130e41f4b71Sopenharmony_ci|FUNC|vkDestroyBufferView| 131e41f4b71Sopenharmony_ci|FUNC|vkDestroyCommandPool| 132e41f4b71Sopenharmony_ci|FUNC|vkDestroyDescriptorPool| 133e41f4b71Sopenharmony_ci|FUNC|vkDestroyDescriptorSetLayout| 134e41f4b71Sopenharmony_ci|FUNC|vkDestroyDescriptorUpdateTemplate| 135e41f4b71Sopenharmony_ci|FUNC|vkDestroyDevice| 136e41f4b71Sopenharmony_ci|FUNC|vkDestroyEvent| 137e41f4b71Sopenharmony_ci|FUNC|vkDestroyFence| 138e41f4b71Sopenharmony_ci|FUNC|vkDestroyFramebuffer| 139e41f4b71Sopenharmony_ci|FUNC|vkDestroyImage| 140e41f4b71Sopenharmony_ci|FUNC|vkDestroyImageView| 141e41f4b71Sopenharmony_ci|FUNC|vkDestroyInstance| 142e41f4b71Sopenharmony_ci|FUNC|vkDestroyPipeline| 143e41f4b71Sopenharmony_ci|FUNC|vkDestroyPipelineCache| 144e41f4b71Sopenharmony_ci|FUNC|vkDestroyPipelineLayout| 145e41f4b71Sopenharmony_ci|FUNC|vkDestroyPrivateDataSlot| 146e41f4b71Sopenharmony_ci|FUNC|vkDestroyQueryPool| 147e41f4b71Sopenharmony_ci|FUNC|vkDestroyRenderPass| 148e41f4b71Sopenharmony_ci|FUNC|vkDestroySampler| 149e41f4b71Sopenharmony_ci|FUNC|vkDestroySamplerYcbcrConversion| 150e41f4b71Sopenharmony_ci|FUNC|vkDestroySemaphore| 151e41f4b71Sopenharmony_ci|FUNC|vkDestroyShaderModule| 152e41f4b71Sopenharmony_ci|FUNC|vkDestroySurfaceKHR| 153e41f4b71Sopenharmony_ci|FUNC|vkDestroySwapchainKHR| 154e41f4b71Sopenharmony_ci|FUNC|vkDeviceWaitIdle| 155e41f4b71Sopenharmony_ci|FUNC|vkEndCommandBuffer| 156e41f4b71Sopenharmony_ci|FUNC|vkEnumerateDeviceExtensionProperties| 157e41f4b71Sopenharmony_ci|FUNC|vkEnumerateDeviceLayerProperties| 158e41f4b71Sopenharmony_ci|FUNC|vkEnumerateInstanceExtensionProperties| 159e41f4b71Sopenharmony_ci|FUNC|vkEnumerateInstanceLayerProperties| 160e41f4b71Sopenharmony_ci|FUNC|vkEnumerateInstanceVersion| 161e41f4b71Sopenharmony_ci|FUNC|vkEnumeratePhysicalDeviceGroups| 162e41f4b71Sopenharmony_ci|FUNC|vkEnumeratePhysicalDevices| 163e41f4b71Sopenharmony_ci|FUNC|vkFlushMappedMemoryRanges| 164e41f4b71Sopenharmony_ci|FUNC|vkFreeCommandBuffers| 165e41f4b71Sopenharmony_ci|FUNC|vkFreeDescriptorSets| 166e41f4b71Sopenharmony_ci|FUNC|vkFreeMemory| 167e41f4b71Sopenharmony_ci|FUNC|vkGetBufferDeviceAddress| 168e41f4b71Sopenharmony_ci|FUNC|vkGetBufferMemoryRequirements| 169e41f4b71Sopenharmony_ci|FUNC|vkGetBufferMemoryRequirements2| 170e41f4b71Sopenharmony_ci|FUNC|vkGetBufferOpaqueCaptureAddress| 171e41f4b71Sopenharmony_ci|FUNC|vkGetDescriptorSetLayoutSupport| 172e41f4b71Sopenharmony_ci|FUNC|vkGetDeviceBufferMemoryRequirements| 173e41f4b71Sopenharmony_ci|FUNC|vkGetDeviceGroupPeerMemoryFeatures| 174e41f4b71Sopenharmony_ci|FUNC|vkGetDeviceGroupPresentCapabilitiesKHR| 175e41f4b71Sopenharmony_ci|FUNC|vkGetDeviceGroupSurfacePresentModesKHR| 176e41f4b71Sopenharmony_ci|FUNC|vkGetDeviceImageMemoryRequirements| 177e41f4b71Sopenharmony_ci|FUNC|vkGetDeviceImageSparseMemoryRequirements| 178e41f4b71Sopenharmony_ci|FUNC|vkGetDeviceMemoryCommitment| 179e41f4b71Sopenharmony_ci|FUNC|vkGetDeviceMemoryOpaqueCaptureAddress| 180e41f4b71Sopenharmony_ci|FUNC|vkGetDeviceProcAddr| 181e41f4b71Sopenharmony_ci|FUNC|vkGetDeviceQueue| 182e41f4b71Sopenharmony_ci|FUNC|vkGetDeviceQueue2| 183e41f4b71Sopenharmony_ci|FUNC|vkGetDisplayModeProperties2KHR| 184e41f4b71Sopenharmony_ci|FUNC|vkGetDisplayModePropertiesKHR| 185e41f4b71Sopenharmony_ci|FUNC|vkGetDisplayPlaneCapabilities2KHR| 186e41f4b71Sopenharmony_ci|FUNC|vkGetDisplayPlaneCapabilitiesKHR| 187e41f4b71Sopenharmony_ci|FUNC|vkGetDisplayPlaneSupportedDisplaysKHR| 188e41f4b71Sopenharmony_ci|FUNC|vkGetEventStatus| 189e41f4b71Sopenharmony_ci|FUNC|vkGetFenceStatus| 190e41f4b71Sopenharmony_ci|FUNC|vkGetImageMemoryRequirements| 191e41f4b71Sopenharmony_ci|FUNC|vkGetImageMemoryRequirements2| 192e41f4b71Sopenharmony_ci|FUNC|vkGetImageSparseMemoryRequirements| 193e41f4b71Sopenharmony_ci|FUNC|vkGetImageSparseMemoryRequirements2| 194e41f4b71Sopenharmony_ci|FUNC|vkGetImageSubresourceLayout| 195e41f4b71Sopenharmony_ci|FUNC|vkGetInstanceProcAddr| 196e41f4b71Sopenharmony_ci|FUNC|vkGetPhysicalDeviceDisplayPlaneProperties2KHR| 197e41f4b71Sopenharmony_ci|FUNC|vkGetPhysicalDeviceDisplayPlanePropertiesKHR| 198e41f4b71Sopenharmony_ci|FUNC|vkGetPhysicalDeviceDisplayProperties2KHR| 199e41f4b71Sopenharmony_ci|FUNC|vkGetPhysicalDeviceDisplayPropertiesKHR| 200e41f4b71Sopenharmony_ci|FUNC|vkGetPhysicalDeviceExternalBufferProperties| 201e41f4b71Sopenharmony_ci|FUNC|vkGetPhysicalDeviceExternalFenceProperties| 202e41f4b71Sopenharmony_ci|FUNC|vkGetPhysicalDeviceExternalSemaphoreProperties| 203e41f4b71Sopenharmony_ci|FUNC|vkGetPhysicalDeviceFeatures| 204e41f4b71Sopenharmony_ci|FUNC|vkGetPhysicalDeviceFeatures2| 205e41f4b71Sopenharmony_ci|FUNC|vkGetPhysicalDeviceFormatProperties| 206e41f4b71Sopenharmony_ci|FUNC|vkGetPhysicalDeviceFormatProperties2| 207e41f4b71Sopenharmony_ci|FUNC|vkGetPhysicalDeviceImageFormatProperties| 208e41f4b71Sopenharmony_ci|FUNC|vkGetPhysicalDeviceImageFormatProperties2| 209e41f4b71Sopenharmony_ci|FUNC|vkGetPhysicalDeviceMemoryProperties| 210e41f4b71Sopenharmony_ci|FUNC|vkGetPhysicalDeviceMemoryProperties2| 211e41f4b71Sopenharmony_ci|FUNC|vkGetPhysicalDevicePresentRectanglesKHR| 212e41f4b71Sopenharmony_ci|FUNC|vkGetPhysicalDeviceProperties| 213e41f4b71Sopenharmony_ci|FUNC|vkGetPhysicalDeviceProperties2| 214e41f4b71Sopenharmony_ci|FUNC|vkGetPhysicalDeviceQueueFamilyProperties| 215e41f4b71Sopenharmony_ci|FUNC|vkGetPhysicalDeviceQueueFamilyProperties2| 216e41f4b71Sopenharmony_ci|FUNC|vkGetPhysicalDeviceSparseImageFormatProperties| 217e41f4b71Sopenharmony_ci|FUNC|vkGetPhysicalDeviceSparseImageFormatProperties2| 218e41f4b71Sopenharmony_ci|FUNC|vkGetPhysicalDeviceSurfaceCapabilities2KHR| 219e41f4b71Sopenharmony_ci|FUNC|vkGetPhysicalDeviceSurfaceCapabilitiesKHR| 220e41f4b71Sopenharmony_ci|FUNC|vkGetPhysicalDeviceSurfaceFormats2KHR| 221e41f4b71Sopenharmony_ci|FUNC|vkGetPhysicalDeviceSurfaceFormatsKHR| 222e41f4b71Sopenharmony_ci|FUNC|vkGetPhysicalDeviceSurfacePresentModesKHR| 223e41f4b71Sopenharmony_ci|FUNC|vkGetPhysicalDeviceSurfaceSupportKHR| 224e41f4b71Sopenharmony_ci|FUNC|vkGetPhysicalDeviceToolProperties| 225e41f4b71Sopenharmony_ci|FUNC|vkGetPipelineCacheData| 226e41f4b71Sopenharmony_ci|FUNC|vkGetPrivateData| 227e41f4b71Sopenharmony_ci|FUNC|vkGetQueryPoolResults| 228e41f4b71Sopenharmony_ci|FUNC|vkGetRenderAreaGranularity| 229e41f4b71Sopenharmony_ci|FUNC|vkGetSemaphoreCounterValue| 230e41f4b71Sopenharmony_ci|FUNC|vkGetSwapchainImagesKHR| 231e41f4b71Sopenharmony_ci|FUNC|vkInvalidateMappedMemoryRanges| 232e41f4b71Sopenharmony_ci|FUNC|vkMapMemory| 233e41f4b71Sopenharmony_ci|FUNC|vkMergePipelineCaches| 234e41f4b71Sopenharmony_ci|FUNC|vkQueueBindSparse| 235e41f4b71Sopenharmony_ci|FUNC|vkQueuePresentKHR| 236e41f4b71Sopenharmony_ci|FUNC|vkQueueSubmit| 237e41f4b71Sopenharmony_ci|FUNC|vkQueueSubmit2| 238e41f4b71Sopenharmony_ci|FUNC|vkQueueWaitIdle| 239e41f4b71Sopenharmony_ci|FUNC|vkResetCommandBuffer| 240e41f4b71Sopenharmony_ci|FUNC|vkResetCommandPool| 241e41f4b71Sopenharmony_ci|FUNC|vkResetDescriptorPool| 242e41f4b71Sopenharmony_ci|FUNC|vkResetEvent| 243e41f4b71Sopenharmony_ci|FUNC|vkResetFences| 244e41f4b71Sopenharmony_ci|FUNC|vkResetQueryPool| 245e41f4b71Sopenharmony_ci|FUNC|vkSetEvent| 246e41f4b71Sopenharmony_ci|FUNC|vkSetPrivateData| 247e41f4b71Sopenharmony_ci|FUNC|vkSignalSemaphore| 248e41f4b71Sopenharmony_ci|FUNC|vkTrimCommandPool| 249e41f4b71Sopenharmony_ci|FUNC|vkUnmapMemory| 250e41f4b71Sopenharmony_ci|FUNC|vkUpdateDescriptorSets| 251e41f4b71Sopenharmony_ci|FUNC|vkUpdateDescriptorSetWithTemplate| 252e41f4b71Sopenharmony_ci|FUNC|vkWaitForFences| 253e41f4b71Sopenharmony_ci|FUNC|vkWaitSemaphores| 254e41f4b71Sopenharmony_ci 255e41f4b71Sopenharmony_ci## OpenHarmony新增的扩展接口列表 256e41f4b71Sopenharmony_ci 257e41f4b71Sopenharmony_ci除了标准能力,还提供了OpenHarmony平台扩展的Vulkan能力,扩展了使用OHNativeWindow创建Vulkan Surface的能力,以及获取OH_NativeBuffer和OH_NativeBuffer属性的能力。 258e41f4b71Sopenharmony_ci 259e41f4b71Sopenharmony_ci|符号类型|符号名| 260e41f4b71Sopenharmony_ci| --- | --- | 261e41f4b71Sopenharmony_ci|FUNC|vkCreateSurfaceOHOS| 262e41f4b71Sopenharmony_ci|FUNC|vkGetNativeBufferPropertiesOHOS| 263e41f4b71Sopenharmony_ci|FUNC|vkGetMemoryNativeBufferOHOS| 264e41f4b71Sopenharmony_ci 265e41f4b71Sopenharmony_ci新增接口的详细介绍请见[Vulkan模块](_vulkan.md)。