初识Vulkun(16):顶点缓冲区

本文介绍了Vulkan中顶点缓冲区的概念和使用方法,包括如何修改顶点着色器接收顶点数据,如何创建和分配内存给顶点缓冲区,以及如何将数据传输到缓冲区。此外,还探讨了顶点输入描述、内存类型选择和命令缓冲区的记录过程。
摘要由CSDN通过智能技术生成

08/09/2020

前言

我们将会使用内存顶点缓冲区来替换之前硬编码到顶点着色器中的顶点数据。我们将从最简单的方法开始创建一个CPU可见的缓冲区,并使用memcpy将顶点数据直接复制到缓冲区,之后将会使用暂存缓冲区将顶点数据赋值到高性能的显存中。
着色器使用顶点输入有两个方法,一个由CPU提供内存的顶点缓冲区,还有一个由GPU提供显存的顶点缓冲区,需要用到临时缓冲区。

修改顶点着色器

#version 450
#extension GL_ARB_separate_shader_objects:enable

layout(location = 0) out vec3 fragColor;

layout(location = 0) in vec2 inPosition;			
layout(location = 1) in vec3 inColor;
void main(){
   
	gl_Position = vec4(inPosition,0.0,1.0);
	fragColor = inColor;
}
  • in 关键字,顶点着色器读取顶点缓冲区的顶点输入/数据
  • 描述布局,位置和类型,名字无所谓

准备顶点数据

GLM提供向量和矩阵之类的线性代数数据结构

#include <glm/glm.hpp>
struct Vertex 
{
   
	glm::vec2 pos;
	glm::vec3 color;
}

const std::vector<Vertex> vertices = 
{
   
	{
   {
   0.0f,-0.5f},{
   1.0f,0.0f,0.0f}},
	{
   {
   0.5f,0.5f},{
   0.0f,1.0f,0.0f}},
	{
   {
   -0.5f,0.5f},{
   0.0f,0.0f,1.0f}}
};
  • 确定类型,与顶点着色器中的声明保持一致

顶点输入

一旦数据类型被提交到GPU的显存中,就需要告诉Vulkan传递到顶点着色器中的数据格式。

  • 确定位置(location = 0)
  • 确定类型(vec2)
struct Vertex 
{
   
	glm::vec2 pos;
	glm::vec3 color;

	static VkVertexInputBindingDescription getBindingDescription()
	{
   
		VkVertexInputBindingDescription bindingDescription
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值