首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌入式spv着色器在运行程序时抛出错误

嵌入式spv着色器在运行程序时抛出错误
EN

Stack Overflow用户
提问于 2021-04-21 16:01:34
回答 1查看 42关注 0票数 0

我试图在可执行文件中包括我的hello三角形程序的spv着色器,方法是添加类似那里。当我运行该程序时,我会得到以下断言,从debug_heap.cpp中抛出:

表达式:is_block_type_valid(头->块_use)

这是我的密码:

阴影h:

代码语言:javascript
复制
#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:

代码语言:javascript
复制
#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;
}

那么,在我的可执行文件中嵌入着色器并引用它们的正确方法是什么呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-21 16:28:51

您正在delete[]中使用静态变量。这样做是无效的。

传递一个arr[]就像传递一个指针。如果您对C数组感到困惑(这是可以理解的),那么尝试使用std::arrays。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67199413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档