使用GL_SHADER_STORAGE_BUFFER将数组传递给片段着色器

4ttempt

我想将一个类传递给包含一些数据的片段着色器。问题是我无法传递大小为100的数组。

我将类作为数据传递:

struct MetaData {
    int rows;
    int columns;

    float cellSizeX;
    float cellSizeY;

    int mask[10][10];
}metaData;

glGenBuffers(1, &ssbo);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, ssbo);
glBufferData(GL_SHADER_STORAGE_BUFFER, sizeof(metaData), &metaData, GL_DYNAMIC_COPY);
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 3, ssbo);

glBindBuffer(GL_SHADER_STORAGE_BUFFER, ssbo);
GLvoid* p = glMapBuffer(GL_SHADER_STORAGE_BUFFER, GL_WRITE_ONLY);
memcpy(p, &metaData, sizeof(metaData));
glUnmapBuffer(GL_SHADER_STORAGE_BUFFER);

在着色器中,将其在顶点着色器中接受为:

layout (std430, binding=3) buffer shader_data
{ 
    int rows;
    int columns;

    float cellSizeX;
    float cellSizeY;

    int mask[10][10];
};

flat out int Mask[10][10];

int main(){
    ...some code...

    Mask = mask;

    ...some code...
}

并在片段着色器中接受它,但显示以下错误,我不知道该如何解决。

cannot locate suitable resource to bind variable "Mask". Possibly large array.

据我从互联网上的搜索得知,的数量有一定的限制glGet(GL_MAX_VARYING_FLOATS_ARB)有什么办法可以避免这种情况?

抢劫

嗯,您知道您可以在着色器中访问着色器存储缓冲区吗?“片段着色器”属于术语“着色器”,因此与其复制每个顶点的结构,不如将以下内容添加到片段着色器中并直接访问数据?:p


// Add to the fragment shader source..... 
layout (std430, binding=3) buffer shader_data
{ 
    int rows;
    int columns;

    float cellSizeX;
    float cellSizeY;

    int mask[10][10];
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

GL_SHADER_STORAGE_BUFFER位置是否与其他着色器位置发生冲突?

OpenGL将颜色传递给片段着色器

将float数组作为3D纹理传递给GLSL片段着色器

使用变化的Webgl将属性传递给片段着色器

将数组传递给镶嵌评估着色器

将向量数组传递给着色器

如何将结构数组传递给着色器

使用ThreeJS将Vec3数组传递给顶点着色器

在glsl 3.3中将浮点数组从顶点着色器传递到片段着色器

three.js-将顶点颜色传递给片段着色器

将统一值传递给顶点和片段着色器

如何将属性直接传递给OpenGL中的片段着色器?

如何在Metal中将数组从顶点着色器传递到片段着色器

如何通过顶点着色器将数据从顶点着色器传递到片段着色器

OpenGL:如何将顶点位置从几何着色器传递到片段着色器?

您可以将数组作为输入传递给几何着色器吗?

PyOpenGL将变量传递给顶点着色器

如何正确地将texture2d_array <float>传递给片段着色器?

将纹理传递给GLSL着色器而不使用统一?

如何使用Swift将Float制服传递给iOS Metal着色器?

如何使用qt和qglwidget将两个纹理传递给opengl着色器

Unity将多个纹理(数组)传递到着色器?

合并GL_TEXTURE_BUFFER和GL_TEXTURE_1D后,片段着色器似乎失败

如何将可变数量的MTLTextures传递给片段着色器?

GLSL ES1.0并将纹理单元索引传递给片段着色器?

金属中的SCN着色器修改器-将统一传递给着色器

如果几何着色器处于活动状态,如何将信息从顶点着色器传递到片段着色器?

vtk错误:片段着色器不支持扩展名“ GL_EXT_gpu_shader4”

将顶点位置从顶点传递到片段着色器-仅在使用Nsight进行调试时有效