我试图在可执行文件中包括我的hello三角形程序的spv着色器,方法是添加类似那里。当我运行该程序时,我会得到以下断言,从debug_heap.cpp中抛出:
表达式:is_block_type_valid(头->块_use)
这是我的密码:
阴影h:
#pragma once
const unsigned char triangle_frag_spv[] = {/* shader code */};
const unsigned triangle_frag_spv_size = sizeof(triangle_frag_spv);
const unsigned char triangle_vert_spv[] = {/* shader code */};
const unsigned triangle_vert_spv_size = sizeof(triangle_vert_spv);Note:我删除了着色器的代码,因为它很长。
如果您希望看到它转到Sascha Willems‘Vulkan样本并复制SPVs的十六进制值。
main.cpp:
#include <vulkan/vulkan.h>
#include "shaders.h"
extern "C" const unsigned char triangle_vert_spv[];
extern "C" const unsigned char triangle_frag_spv[];
extern "C" const unsigned triangle_vert_spv_size;
extern "C" const unsigned triangle_frag_spv_size;
...
std::array<VkPipelineShaderStageCreateInfo, 2> shaderStages{};
shaderStages[0].module = loadSPIRVShader(triangle_vert_spv, triangle_vert_spv_size);
shaderStages[1].module = loadSPIRVShader(triangle_frag_spv, triangle_frag_spv_size);
...
VkShaderModule loadSPIRVShader(const unsigned char shaderCode[], const unsigned shaderSize)
{
VkShaderModuleCreateInfo moduleCreateInfo{};
moduleCreateInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
moduleCreateInfo.codeSize = shaderSize;
moduleCreateInfo.pCode = (uint32_t *) shaderCode;
VkShaderModule shaderModule;
VK_CHECK_RESULT(vkCreateShaderModule(device, &moduleCreateInfo, NULL, &shaderModule));
delete[] shaderCode;
return shaderModule;
}那么,在我的可执行文件中嵌入着色器并引用它们的正确方法是什么呢?
发布于 2021-04-21 16:28:51
您正在delete[]中使用静态变量。这样做是无效的。
传递一个arr[]就像传递一个指针。如果您对C数组感到困惑(这是可以理解的),那么尝试使用std::arrays。
https://stackoverflow.com/questions/67199413
复制相似问题