VulkanSceneGraph —— PushConstant

PushConstant

本篇内容主要介绍了VulkanSceneGraph使用PushConstants实现类似OpenGL中uniform的方法。在vsgExamples中仅有使用descriptorset相关的传递uniform变量的方法,希望本篇能为大家在VSG中使用PushContants一点小小的帮助。
全部代码示例看这里

debuglayer

在进入主题之前,先说VSG提供的调试功能。
VSG集成了Vulkan的debugLayer,这对于在写程序时查找错误有着重要的作用。
在vsgExamples官方仓库中,大多示例均有下面的代码。可以在程序的命令行中加入相应的参数开启该功能。

    windowTraits->debugLayer = arguments.read({ "--debug", "-d" });

VSG内部直接就集成了深度测试的相关模块,因此在构建管线时应当添加对应部分,否则debuglayer会有对应的提示信息。

    vsg::GraphicsPipelineStates pipelineStates{
        vsg::VertexInputState::create(vertexBindingsDescriptions, vertexAttributeDescriptions),
        vsg::InputAssemblyState::create(),
        vsg::RasterizationState::create(),
        vsg::MultisampleState::create(),
        vsg::ColorBlendState::create(), 
        vsg::DepthStencilState::create()
    };

pushConstant的使用

VSG中对于场景的MVP矩阵的传递使用了vulkan的PushConstant方式,当我们想用该方式传递自己的uniform变量时,需要考虑到这个因素。
VSG内部保障了我们不使用任何(包含其内置的MVP相关矩阵)PushConstants可以保证程序不会有任何的错误信息,但想要传递自己的uniform时,VSG会自动把MVP矩阵传递,因此,需要将暂时没用到的MVP相关的设置做好。

vertexShader中

要添加对应的定义

layout(push_constant) uniform PushConstants {
    mat4 projection;
    mat4 modelView;
} pc;

fragmentShader中

添加我自己的uniform,这里我传入了一个颜色值。注意这里的layout,这个offset数值为vertexShader中PushConstants 的大小(即为两个mat4)。offset设置正确是正确使用pushConstants的关键

layout(push_constant) uniform PushColor {
    layout(offset = 128)vec4 color;
} uColor;

场景图节点

要在场景图节点中加入对应的节点,相当于可以在渲染过程中加入了对应的vulkan command

    auto colorData = vsg::vec4Array::create({ {1.0, 0.0, 0.0, 1.0} });
    auto pushConstant = vsg::PushConstants::create(VK_SHADER_STAGE_FRAGMENT_BIT,128, colorData);

    // setup geometry
    auto drawCommands = vsg::Commands::create();
    drawCommands->addChild(pushConstant);

颜色值修改

这里只需要修改节点中的数据即可,传递过程还是相对简单的。

    while (viewer->advanceToNextFrame())
    {
        viewer->handleEvents();

        float time = std::chrono::duration<float, std::chrono::seconds::period>(viewer->getFrameStamp()->time - viewer->start_point()).count();
        colorData->at(0).r = 0.5f * sin(time) + 0.5f;

        viewer->update();

        viewer->recordAndSubmit();

        viewer->present();
    }
} ;

小结

VSG在根本上还是Vulkan,各种功能的使用方式还是需要参考Vulkan的使用。在实现本篇内容的过程中,在Vulkan的文档中读了又读还是不太明白,最后还是在官方例子查找了类似的实现。

希望我能够时常有为使用VSG的朋友提供一些简明的教程,但愿这些教程在未来也能够在工作等方面对我自己有所反馈吧。

  • 18
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亮微尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值