GLSL SSBO 用于将双精度值数组传递给着色器

问题描述

我试图通过将其作为 SSBO 传递来将双精度数组的二维数组传递给 OpenGLSL 着色器。

着色器代码

#version 430

uniform float time;
uniform vec2 mouse;
uniform vec2 resolution;

const int image_width=960;
const int image_height=540;

layout(std430,binding=0) buffer Tmatrix
{
  double data[image_width][image_height];
} amatrix;

void main()
{
    int pixel_x = int(gl_FragCoord.x);
    int pixel_y = int(gl_FragCoord.y);
    array_value = amatrix.data[pixel_x][pixel_y];
    gl_FragColor=vec4(array_value,array_value,1.0);
}

我用于设置 SSBO 的(Delphi)代码是(ssbo 被声明为 gluint)

procedure SetShaderStorageBufferObject(prognum:integer);
var data:array of double;
    loop:integer;
begin
     ssbo:=0;
     setlength(data,array_width*array_height);
     for loop:=0 to array_width*array_height-1 do data[loop]:=random;
     glGenBuffers(1,@ssbo);
     glBindBuffer(GL_SHADER_STORAGE_BUFFER,ssbo);
     glBufferData(GL_SHADER_STORAGE_BUFFER,sizeof(data),@data,GL_READ_WRITE);
     glBindBufferBase(GL_SHADER_STORAGE_BUFFER,ssbo);
     glBindBuffer(GL_SHADER_STORAGE_BUFFER,0);
     setlength(data,0);
end;

在设置统一值后,我在着色器的每一帧都调用 SetShaderStorageBufferObject。

我希望每次更新都能获得静态图像,因为我将 SSBO 设置为随机双精度值,但它只显示黑色图像。

除了这个 SSBO 之外,我用于处理 GLSL 的其余代码工作正常,我可以运行其他没有 SSBO 的着色器代码而不会出现问题,所以我希望我在上面的代码或着色器代码中遗漏了一些愚蠢的东西.

对可能出错的地方有任何想法吗?

解决方法

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

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

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