2013-10-06 11 views
5

Başka bir OpenGL ES sürücü hatası yaşıyorum. Bu sefer aşağıdaki satırları derlemek çalışıyorum:OpenGL programı bağlarken kilitleniyor, LG Nexus 4

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); 

.. 
.. 
} 

ama satırdan sonra alıyorum:

GLES20.glLinkProgram(program); 

yerli kazası: "Ölümcül sinyali 11 (SIGDEV) 0x00000060 (koda = 1), iş parçacığı 1231 " Ben sanırım, LG nexus 4, GPU Adreno kullanıyor ve aynı zamanda çok fazla makro kullanarak, farklı bir kilitlenme hatası kodu 14 ile benim için çöker.

+0

Gölgelendirici kodunuzda hata arıyorsanız, _complete_ shader kodunu eklemelisiniz. Bu, tüm değişken bildirimleri kaçırıyor ve sonunda bir şeyler bıraktığını farz ediyorum. Ayrıca bazı uygulama kodları yardımcı olabilir. –

+0

Muhtemelen gölgelendirici kodunuz derlenmiyor ve bu nedenle programınız bağlantı kuramıyor. Bu arada OpenGL ES'de shader yok, bu yüzden OpenGL ES etiketini buraya eklemek ilgisiz. – eozgonul

+0

Lütfen tam gölgelendirici kodunu sağlayın. – keaukraine

cevap

2

Gölgelendirici derledikten sonra, glGetShaderiv kullanarak gölgelendirici derlemesinin durumunu öğrenin. Gibi: sıfır olarak döndürülür derlenmiş eğer

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

Ardından, ilk bilgi uzunluğunu almak ve sonra hata mesajı aşağıdaki gibi:

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

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

kontrol infoLog nihayet döndü hata mesajı görmek için shader derlemesi. Orijinal postanızda segmentasyon hatası mesajı sorunu çözmek için yararlı bir şey vermez.

+1

Bu bağlantıya, bu bağlantıyı program bağlantısı sırasında aldığımdan beri alamıyorum. Ben, – Nativ

+1

yerli olmayan diğer bazı bağlantı sorunları için bilgi kullandım Bu yüzden bilgi almak mümkün olmalıdır böylece program bağlama önce gölgelendiriciler derlemesi gerekir. Bilgiyi sadece Android günlüğüne yazdırabilirsiniz. – eozgonul

1

Parça kod gölgenizdeki kısa koddan alıntı yaptığım kadarıyla, float kesinliğini belirlemediniz. ES 2.0'da açıkça float kesinliğini belirtmeniz gerekir.

precision mediump float; 

Lütfen bu konuyla ilgili in specs, s. 4.5.3 Varsayılan Hassas Kalifikasyonlar. Shader, belirli OpenGL ES sürücülerinde float hassaslık belirtmeden çalışabilir ve başka bir dizide derlenemez. Bununla birlikte, sorununuzun tam olarak nedenini bulmak için tam kaynak kodu gereklidir.

Doğru bir şekilde derlemeye başlayana kadar gölgelendirici kod bölümlerini yorumlamaya başlamanızı öneririm. Böylelikle problemli bir çizgiyi daraltacaktır (Bence SO'da cevap beklemekten daha hızlı olduğuna inanıyorum).

+1

Merhaba, yukarıdaki hassas çizgileri ekledim. Sorun bu değildi. – Nativ

+0

Nedeni buluncaya kadar sakin olun ve satır satırını yorumlayın. – keaukraine