我正在使用计算着色器实现简单的光线跟踪。
但我一直困扰着连接计算着色器的程序对象。
#version 440
struct triangle {
vec3 points[3];
};
struct sphere {
vec3 pos;
float r;
};
struct hitinfo {
vec2 lambda;
int idx;
};
layout(binding = 0, rgba32f) uniform image2D framebuffer;
// wrriten by compute shader
layout (local_size_x = 1, local_size_y = 1) in;
uniform triangle triangles[2500];
uniform sphere spheres[2500];
uniform int num_triangles;
uniform int num_spheres;
uniform vec3 eye;
uniform vec3 ray00;
uniform vec3 ray10;
uniform vec3 ray01;
uniform vec3 ray11;
这是我的计算着色器代码,我可以得到一个"资源不足"错误。 我知道这个错误的原因是三角形的大小,但我需要这个大小。
有没有什么方法可以将大量三角形传递到着色器?
答案 0 :(得分:1)
着色器可以拥有的制服数量非常有限。如果您需要更多数据,那么适合您的制服,您可以使用Uniform Buffer Objects或Shader Storage Buffer Objects来备份制服。
在这种情况下,您必须定义GLSL Interface Block并将缓冲区绑定到该制服。这意味着,您只需要一个制服就可以存储大量相似的元素。