相关疑难解决方法(0)

金属使用计算着色器模拟几何着色器

我正在尝试在Metal中实现体素锥描图。该算法的步骤之一是使用几何着色器对几何进行体素化。Metal没有几何着色器,因此我一直在考虑使用计算着色器对其进行仿真。我将顶点缓冲区传递到计算着色器中,执行几何着色器通常会执行的操作,然后将结果写入输出缓冲区。我还将绘制命令添加到间接缓冲区。我将输出缓冲区用作我的顶点着色器的顶点缓冲区。这可以正常工作,但是我需要为顶点存储两倍的内存,为顶点缓冲区存储一个,为输出缓冲区存储一个。有什么方法可以将计算着色器的输出直接传递到顶点着色器,而无需将其存储在中间缓冲区中?我不需要保存计算着色器的输出缓冲区的内容。

这可能吗?谢谢

编辑

本质上,我正在尝试从glsl模拟以下着色器:

#version 450

layout(triangles) in;
layout(triangle_strip, max_vertices = 3) out;

layout(location = 0) in vec3 in_position[];
layout(location = 1) in vec3 in_normal[];
layout(location = 2) in vec2 in_uv[];

layout(location = 0) out vec3 out_position;
layout(location = 1) out vec3 out_normal;
layout(location = 2) out vec2 out_uv;

void main()
{
    vec3 p = abs(cross(in_position[1] - in_position[0], in_position[2] - in_position[0]));

    for (uint i = 0; i < 3; ++i)
    {
        out_position = in_position[i];
        out_normal = in_normal[i];
        out_uv = in_uv[i]; …
Run Code Online (Sandbox Code Playgroud)

macos shader metal

5
推荐指数
1
解决办法
1469
查看次数

标签 统计

macos ×1

metal ×1

shader ×1