不使用基于推送常量的顶点属性
创始人
2024-12-28 22:00:29
0

使用基于推送常量的顶点属性

在OpenGL中,我们可以通过顶点属性将数据传递给着色器。而推送常量则可以在渲染过程中实时改变着色器的属性。如果不使用基于推送常量的顶点属性,将会使得渲染过程变得更加复杂和低效。

以下是一个使用基于推送常量的顶点属性的示例:

// 设置推送常量
struct PushConstants {
    mat4 model_view_projection;
} push_constants;

// 设置管道布局,并将推送常量绑定到管道
VkPushConstantRange push_constant_range = {};
push_constant_range.stageFlags = VK_SHADER_STAGE_VERTEX_BIT;
push_constant_range.offset = 0;
push_constant_range.size = sizeof(PushConstants);

VkPipelineLayoutCreateInfo pipeline_layout_ci = {};
pipeline_layout_ci.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
pipeline_layout_ci.setLayoutCount = 1;
pipeline_layout_ci.pSetLayouts = &descriptor_set_layout;
pipeline_layout_ci.pushConstantRangeCount = 1;
pipeline_layout_ci.pPushConstantRanges = &push_constant_range;

vkCreatePipelineLayout(device, &pipeline_layout_ci, nullptr, &pipeline_layout);

// 定义顶点属性结构体
struct Vertex {
    glm::vec3 position;
    glm::vec3 normal;
    glm::vec2 tex_coord;
};

// 创建顶点缓冲区
VkBuffer vertex_buffer;
VkDeviceMemory vertex_memory;

VkBufferCreateInfo buffer_ci = {};
buffer_ci.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
buffer_ci.size = sizeof(vertices);
buffer_ci.usage = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT;
buffer_ci.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
vkCreateBuffer(device, &buffer_ci, nullptr, &vertex_buffer);

VkMemoryRequirements memory_requirements;
vkGetBufferMemoryRequirements(device, vertex_buffer, &memory_requirements);

VkMemoryAllocateInfo memory_alloc_info = {};
memory_alloc_info.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
memory_alloc_info.allocationSize = memory_requirements.size;
memory_alloc_info.memoryTypeIndex = 0;

vkAllocateMemory(device, &memory_alloc_info, nullptr, &vertex_memory);
vkBindBufferMemory(device, vertex_buffer, vertex_memory, 0);

// 绑定推送常量和顶点缓冲区到着色器
VkDescriptorSet descriptor_sets;
vkAllocateDescriptorSets(descriptor_pool, 1, &descriptor_set, &descriptor_sets);

VkWriteDescriptorSet write_descriptor_set = {};
write_descriptor_set.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
write_descriptor

相关内容

热门资讯

透视科技(aapoker发牌机... 透视科技(aapoker发牌机制)wopoker辅助器ios(详细辅助玩家教程)最初是真的有挂,您好...
微扑克ai辅助!wepooke... 微扑克ai辅助!wepooke系统规律,(WepOke)本来是有挂(详细辅助普及教程)是一款可以让一...
透视玄学(wepoke的确有挂... 透视玄学(wepoke的确有挂)wepoke辅助透(详细辅助解密教程)最初真的是有挂wepoke的确...
智星德州菠萝外挂!wpk辅助插... 智星德州菠萝外挂!wpk辅助插件,(wepOke)从来有挂(详细辅助揭秘教程)准备好在智星德州菠萝外...
透视规律(wpk真的有外挂)w... 透视规律(wpk真的有外挂)wpk到底有没有辅助(详细辅助第三方教程)原本有挂1、金币登录送、破产送...
透视数据(德扑ai助手)wep... 透视数据(德扑ai助手)wepoke辅助真的假的(详细辅助透明挂教程)最初真的有挂;是一款可以让一直...
微扑克辅助挂!德州可能有外挂吗... 微扑克辅助挂!德州可能有外挂吗,(wepOke)一直有挂(详细透视透明挂教程);支持多人共享记分板与...
透视科技(德扑之星ai代打)a... 透视科技(德扑之星ai代打)aapoker软件讲解(详细辅助2025版教程)真是是真的有挂1.德扑之...
wepoke确实有挂!aapo... wepoke确实有挂!aapoker有外挂吗,(AAPOker)起初是有挂(详细辅助科技教程)这是由...
透视工具(德扑之星ai代打)w... 透视工具(德扑之星ai代打)wpk显示有(详细辅助总结教程)一贯是有挂1)德扑之星ai代打辅助挂:进...