加载计算着色器时出错

时间:2017-05-29 09:34:40

标签: opengl

我正在使用计算着色器实现简单的光线跟踪。

但我一直困扰着连接计算着色器的程序对象。

#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;

这是我的计算着色器代码,我可以得到一个"资源不足"错误。 我知道这个错误的原因是三角形的大小,但我需要这个大小。

有没有什么方法可以将大量三角形传递到着色器?

1 个答案:

答案 0 :(得分:1)

着色器可以拥有的制服数量非常有限。如果您需要更多数据,那么适合您的制服,您可以使用Uniform Buffer ObjectsShader Storage Buffer Objects来备份制服。

在这种情况下,您必须定义GLSL Interface Block并将缓冲区绑定到该制服。这意味着,您只需要一个制服就可以存储大量相似的元素。