Vulkan 计算着色器平滑的 uv 坐标

问题描述

我有这个着色器:

#version 450

layout(binding = 0) buffer b0 {
  vec2 src[ ];
};

layout(binding = 1) buffer  b1 {
   vec2 dst[ ];
};

layout(binding = 2) buffer b2 {
  int index[ ];
};

layout (local_size_x = 1,local_size_y = 1,local_size_z = 1) in;


void main()
{
    int ind =int(gl_GlobalInvocationID.x);
    vec2 norm;

    norm=src[index[ind*3+2]]-src[index[ind*3]]+src[index[ind*3+1]]-src[index[ind*3]];
    norm/=2.0;

    dst[index[ind*3]]  +=norm;

    norm=src[index[ind*3+0]]-src[index[ind*3+1]]+src[index[ind*3+2]]-src[index[ind*3+1]];

    dst[index[ind*3+1]]  +=norm;

    norm=src[index[ind*3+1]]-src[index[ind*3+2]]+src[index[ind*3+0]]-src[index[ind*3+2]];
    norm/=2.0;

    dst[index[ind*3+2]]  +=norm;

 }

因为 dst 缓冲区不是“原子的”,所以求和不正确。

有没有办法解决这个问题?我的回答是否定的,但如果我错过了什么。

对于多边形中的每个顶点,我正在计算从顶点到多边形中心的向量。不同的多边形具有相同的顶点。

dst - 是一个顶点缓冲区,是那些从顶点到多边形中心的位移求和的结果。

每次我都有不同的计算结果。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)