2011-12-16 14 views
8

GLSL sürümünü belirlemek LWJGL'yi kullanırken bir sözdizimi hatası veriyor. Bu sorunu LWJGL'nin dışında yeniden oluşturmaya çalışmadım. Bu, Lion’ı çalıştıran birden fazla Mac’te gerçekleşiyor.GLSL #version sözdizimi hatası veriyor (Mac üzerinde LWJGL)

#version kullanmadan çalışmak için hem köşe hem de parça gölgelendiricileri aldım. Ama ben #version yönergesine ihtiyaç duyuyor gibi görünen texture işlevini kullanmak üzereyim.

Burada en basit başarısız örnek:

#version 120 

void main() { 
    gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); 
} 

bu shader parçası Derleme ve glGetShaderInfoLog arayarak bu hatayı veriyor:

ERROR: 0:1: '' : syntax error #version 

böyle 110 olarak, aynı zamanda bir hata veriyor, başka bir şeyle 120 değiştirilmesi. Merakla, yine de, 130 veya daha yüksek kullanırsam, aynı hatayı verir ve desteklenmeyen sürüm hakkında bir şikayette bulunur. (Benim sistem GLSL 1.3 yok biliyorum, ama yine de derleyici bunun gibi davranıyor bu hata görüntüler sürüm etiketi anlamıyor garip.) Bir ATI Radeon Mac üzerinde olduğum

HD 4670. GL_VERSION, 2.1 ATI-7.12.9 ve GL_SHADING_LANGUAGE_VERSION, 1.20'dur.

Bunu göz önünde bulundurarak, GLSL 1.20'nin neden kullanılamayacağı konusunda bir neden göremiyorum. Ve desteklenmeyen bir GLSL sürümü hakkında bir şey söylemek yerine, #version bir sözdizimi hatası olduğunu söylüyordum bana göre gerçekten garip.

+0

Gölgelendirici yükleme kodunuz nerede? –

+0

İnternette bir kere bunu yapıştırabilirim. (Telefonumu hemen kullanıyorum.) Thab kaynak kodu yararlı olur mu? – rlkw1024

cevap

17

Çözüldü! OpenGL ile ilgisi yoktu. Dosya okuyucu kodum tüm satır sonlarını düşürüyordu. Bu, noktalı virgül olan gölgelendirici gövdesinde iyiydi. Ancak önişlemci yönergesinin, bu hatadan korumak için noktalı virgül yoktu.

Bu sorunu yaşayan herkes için, aslında glShaderSource'a ilettiğiniz kodun linebreaks olduğundan emin olun.

+1

Çok teşekkürler, gecemi kurtardın! Ben SDL ve C++ ile Mac'tayım, ancak bu açık hata mesajıyla OpenGL bana aynı şeyi anlatmaya çalışıyordu. – zubko

+0

Buna yaklaşmanın bir yolu, burada bulunabilir (http://schabby.de/opengl-shader-example/).BufferedReader, gölgelendirici kaynağını CR/LF karakterlerini atlayarak satır satırında çeker. Daha sonra, StringBuilder kullanarak her satır için bir satırsonu karakterini açıkça yeniden gönderirsiniz (bu sayfanın yaklaşık 2/3'üne bakın). –

+0

Çok teşekkürler. Bu, sahip olduğum tam sorun oldu. Pesky Java IO, satır sonlarını kaldırarak! – Textfield

1

Hem köşe hem de parça gölgelendiricinin aynı sürümüne sahip olması gerekir. Bu nedenle, parça gölgelendiriciye bir #version 120 eklerseniz, onu köşe gölgelendiricisine de eklemelisiniz. Ancak bunun bir sözdizimi hatası olarak rapor edilmesi biraz garip. Belki başka bir hata var, ama her ikisi de kesinlikle aynı sürüm etiketine sahip olmalı.

EDIT: DÜZENLEME: Ayrıca, sürüm etiketinin gölgelendirici kaynak kodundaki ilk satır olması gerektiğini unutmayın (yeni satırlar ve yorumlar belirtime göre Tamam, ancak sürücülerin ne düşündüğünü kim bilir).

+0

Her ikisinde de aynı sürümü kullanmayı denedim, ancak şans yok. Bu derlemede ve bağlantı kurulmadan gerçekleştiğinden, gölgelendiricilerin zaten birbirlerini bilmediklerini sanmıyorum. – rlkw1024

+0

@Jarrett Grafik kartınızın uğursuz satıcısını dikkate alarak, aynı zamanda bir sürücü hatası da olabilir. Bu gerçekten çok basit bir özellik ve destek olmak için sorun olmamasına rağmen, yine de, hala ATI. –

+0

Ben jusy bir GeForce 320M ile aynı sorunu doğruladı. Bu yüzden, her iki tedarikçinin de temel bir özellikte aynı hataya sahip olduğundan şüphe etmeye başladım. – rlkw1024