2013-10-06 1 views
5

다른 OpenGL ES 드라이버 오류가 발생합니다. 이번에는 내가 다음 줄을 컴파일하기 위해 노력하고있어 :LG Nexus 4 프로그램을 연결할 때 OpenGL이 충돌 함

precision mediump float; 
varying highp vec2 textureCoordinate; 


void main() { 
highp vec4 color = texture2D(input0, textureCoordinate); 


vec3 color3 = color.rgb; 

vec2 tc = (2.0 * textureCoordinate) - 1.0; 
float d = dot(tc, tc); 
vec2 lookup = vec2(d, color3.r); 

.. 
.. 
} 

을하지만 난 줄 뒤에 받고 있어요 :

GLES20.glLinkProgram(program); 

기본 충돌 "치명적인 신호 (11) (SIGDEV) 0x00000060 (코드 = 1), thread 1231 " LG 넥서스 4가 GPU Adreno를 사용하고 있기 때문에 추측하고 있습니다. 또한 너무 많은 매크로를 사용하여 다른 충돌에서 14 번 오류 코드로 나를 추락시킵니다.

+0

쉐이더 코드에서 버그를 찾으려면 _complete_ 쉐이더 코드를 포함해야합니다. 모든 변수 선언이 누락되었습니다. 마지막에 물건을 남겨 두었다고 가정합니다. 또한 일부 응용 프로그램 코드가 도움이 될 수 있습니다. –

+0

아마도 쉐이더 코드가 컴파일되지 않아서 프로그램이 연결되지 않을 수 있습니다. OpenGL ES에는 셰이더가 없으므로 여기에 OpenGL ES 태그를 추가하는 것은 중요하지 않습니다. – eozgonul

+0

전체 쉐이더 코드를 제공하십시오. – keaukraine

답변

2

셰이더를 컴파일 한 후 glGetShaderiv을 사용하여 셰이더 컴파일 상태를 가져옵니다. 마찬가지로 : 0으로 반환되는 컴파일 된 경우

GLint compiled; 
glGetShaderiv(index, GL_COMPILE_STATUS, &compiled); //index is the shader value 

다음, 먼저 정보의 길이를 얻고, 다음 오류 메시지가 다음과 같이

GLint infoLen = 0; 
glGetShaderiv(index, GL_INFO_LOG_LENGTH, &infoLen); 

if(infoLen > 1) 
{ 
    char* infoLog = new char(infoLen); 
    glGetShaderInfoLog(index, infoLen, NULL, infoLog); 
} 

확인 infoLog을 마지막으로 반환 된 오류 메시지를 볼 수 셰이더 컴파일. 원래 게시물의 세그먼트 오류 메시지는 문제를 해결하는 데 유용한 정보를 제공하지 않습니다.

+1

프로그램을 연결하는 동안이 네이티브 크래시가 발생하기 때문에이 수표를받을 수 없습니다. 네이티브가 아닌 다른 링크 문제에 대한 정보를 사용했습니다. – Nativ

+1

프로그램을 연결하기 전에 쉐이더를 컴파일해야 정보를 얻을 수 있습니다. Android 로그에 정보를 인쇄 할 수 있습니다. – eozgonul

1

조각 쉐이더의 짧은 코드 발췌에서 볼 수 있듯이 float 정밀도를 지정하지 않았습니다. ES 2.0에서는 float 정밀도를 명시 적으로 지정해야합니다.

precision mediump float; 

이 내용을 읽으십시오. in specs, p. 4.5.3 기본 정밀도 한정자. Shader는 특정 OpenGL ES 드라이버에서 float 정밀도를 지정하지 않고 작동하고 다른 드라이버에서 컴파일하지 못할 수 있습니다.

그러나 문제의 정확한 원인을 찾으려면 전체 소스 코드가 필요합니다.

올바르게 컴파일되기 전까지 셰이더 코드의 일부를 주석으로 처리하는 것이 좋습니다. 이렇게하면 문제가있는 줄을 좁힐 수 있습니다 (나는 여기에서 대답을 기다리는 것보다 더 빨리 믿는다).

+1

안녕하세요, 위의 정밀도 선을 추가했습니다. 그것은 문제가되지 않았습니다. – Nativ

+0

원인을 찾을 때까지 계속해서 차분히 주석으로 처리하십시오. – keaukraine