问题描述
我试图通过将其作为 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 (将#修改为@)