着色器链接崩溃

问题描述 投票:0回答:2

我在glLink(...)时有一个致命的信号

afficheurShader = GLES30.glCreateProgram();        
GLES30.glAttachShader(afficheurShader, afficheurVertex);  
GLES30.glAttachShader(afficheurShader, afficheurFragment)
GLES30.glLinkProgram(afficheurShader);

致命信号11(SIGSEGV),代码1 ......

afficheurShader.vert:

#version 300 es

precision highp float;
precision highp sampler2D;
precision highp int;

layout(location = 0) in uvec2 position;
layout(location = 1) in uint couleur;
uniform  sampler2D pvTex;
uniform vec2 resolution;
flat out uint vCouleur;

void main() {
    vCouleur = couleur;
    ivec2 ipos = ivec2(position);

    vec4 pos4 = texelFetch(pvTex, ipos,0);  // THIS LINE MAKE CRASH

    gl_Position = vec4(pos4.xy,0.0,1.0);
}

如果我用texelFetch注释该行,则没有崩溃:

    //vec4 pos4 = texelFetch(pvTex, ipos,0);  // THIS LINE MAKE CRASH
    vec4 pos4 = vec4(1.0,1.0,1.0,1.0);

所以我想问题是“texelFetch”......但我的语法出了什么问题?

编辑:

我使用Android Studio,当我在平板电脑上运行项目时会出现问题。但是当我连接手机时做同样的事情也没问题。

编辑2:

它看到问题来自碎片!

#version 300 es
precision highp float;
flat in uint vCouleur;
uniform uint cols[256];
out vec4 outputColor;
void main() {
    int indbase = int(vCouleur*3u);
    float r = float(cols[indbase]);
    float v = float(cols[indbase+1]);
    float b = float(cols[indbase+2]);
    outputColor = vec4( r ,v,b,255.0)/255.0;
}

我在顶点中保留了未触及的texelfetch,但在片段中我评论了对数组的调用:

#version 300 es
precision highp float;
flat in uint vCouleur;
uniform uint cols[256];
out vec4 outputColor;
void main() {
    int indbase = int(vCouleur*3u);
    //float r = float(cols[indbase]);
    //float v = float(cols[indbase+1]);
    //float b = float(cols[indbase+2]);
    float r= 255.0; ///
    float v= 255.0; /// DEBUG TEMPORARY SOLUTION
    float b= 255.0; ///
    outputColor = vec4( r ,v,b,255.0)/255.0;
}

没有崩溃! (好吧,这是全白像素......)

所以,问题来自:

cols[indbase]
android opengl-es
2个回答
0
投票

老实说,这看起来像是一个驱动程序错误。

除非应用程序传入坏指针,否则OpenGL ES驱动程序不应该崩溃;你应该总是得到一个干净利落的错误。什么是平板电脑/ GPU有问题?


-1
投票

我把所有代码都用cols从片段到顶点。

https://www.khronos.org/registry/OpenGL/specs/es/2.0/GLSL_ES_Specification_1.00.pdf

在顶点着色器中,强制支持所有形式的数组索引。在片段着色器中,仅对常量索引表达式强制支持索引。

它的工作!

© www.soinside.com 2019 - 2024. All rights reserved.