2016-11-13 30 views
5

Şu anda Ubuntu 16.04'te OpenGL kullanarak bir proje üzerinde çalışıyorum ve büyük bir sorunla karşılaştım. Bu noktada, bunu düzeltmek için herşeyi denediğim gibi ne yapacağımı bilmiyorum. Ben olmadan herhangi bir şans gölgelendirici dosyasında sürümünü ayarladıktanC++ OpenGL gölgeleme sürümü hatası - GLSL x desteklenmiyor [Ubuntu 16.04]

Failed to compile vertex shader! 
0:1(10): error: GLSL 4.50 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, 3.00 ES, 3.10 ES, and 3.20 ES` 

: my Shader sadece derlemek ve aşağıdaki hata verir vermez Nedense

. #version 450 core vb. Ama aynı sonucu almaya devam ediyorum.

OpenGL vendor string: Intel Open Source Technology Center 
OpenGL renderer string: Mesa DRI Intel(R) HD Graphics 520 (Skylake GT2) 
OpenGL core profile version string: 4.5 (Core Profile) Mesa 13.1.0-devel 
OpenGL core profile shading language version string: 4.50 
OpenGL core profile context flags: (none) 
OpenGL core profile profile mask: core profile 
OpenGL core profile extensions: 
OpenGL version string: 3.0 Mesa 13.1.0-devel 
OpenGL shading language version string: 1.30 
OpenGL context flags: (none) 
OpenGL extensions: 
OpenGL ES profile version string: OpenGL ES 3.2 Mesa 13.1.0-devel 
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20 
OpenGL ES profile extensions: 
glxinfo çıktısı OpenGL çekirdek 4.5 yüklü gösterir

, neden bu

desteklenmez: Referans olarak

, burada sudo glxinfo | grep "OpenGL" çıktı mı?

Ayrıca, projede kullanılan OpenGL'nin şu anki sürümünü bulmaya çalıştım: std::cout << "OpenGL version: " << glGetString(GL_VERSION) << std::endl; boş bir sonuçla sonuçlanıyor.

Bugüne kadar bu konuya 10 saat harcadım, bu sayede herhangi bir yardım takdir ediliyor!

Düzenleme: proje zorlamak için bir yol var/Ubuntu OpenGL kullanmak yani (bu kısmı) tamamen GLSL kaldırarak glsl değil?

OpenGL ES profile version string: OpenGL ES 3.2 Mesa 13.1.0-devel 
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20 
OpenGL ES profile extensions: 
+0

göre [bu] (https://en.wikipedia.org/wiki/OpenGL_Shading_Language#Versions) tablo o? –

cevap

7

ile gölgelendiricileri derleme emin olun çekirdek kullanmak için

, bu çalıştı çözüm oldu ben:

glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); 
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0); 
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 
+1

Sorununuzu çözdünüze sevindim, bir sonraki sefere mahsus bir öneri olarak: ya tam kodu gönderin ya da daha fazla ayrıntı ekleyin (glfw kullandığını düşünmeyin) –

+1

Geri bildiriminiz için teşekkür ederiz. Bunu yaptığından emin olmalıyım.Eğer bu yardımcı olacaktır neden hakkında biraz açıklama eklerseniz –

-2

GLSL, iki sürüm numarası her zaman eşleşmese de OpenGL tarafından kullanılan gölgelendirici dildir. Bizim işimize göre, Chip Chip GPU'yu kullanıyor gibisiniz. Bu çipin sürücüsü, bildiğim kadarıyla henüz OpenGL 4'ü desteklemeyen Mesa üzerinden ilerliyor.

Nvidia kartınız varsa, OpenGL'nin en son sürümünü destekleyen tescilli NVidia sürücüsünü yükleyebilirsiniz. Aksi takdirde, gölgelerinizi dilin eski bir sürümünü kullanacak şekilde değiştirmeniz gerekecektir.

+0

teşekkür ederiz yüklü ben OpenGL iki farklı sürümü var gibi görünüyor Yanıt için: Nvidia kartım yok, çünkü bu entegre Intel grafikli dizüstü bilgisayarım (i7 Core/Skylake) - Bu da Intel'den bildiğim kadarıyla en yeni sürümdür. OpenGL çekirdek profil sürüm dizesi: 4.5 (Çekirdek Profil) Mesa 13.1.0-devel' dize sahip olduğu gibi OpenGL 4 destekler gibi görünüyor ama dürüst olamadığından emin değilim –

3

Açıkça bir çekirdek profili bağlamı istemiyor gibi görünüyor. Kişisel glxinfo çıkış gösterileri, yani uyumluluk profili bağlamlarda (OpenGL-3.0 öncesi hiçbir "uyumluluk" profiller vardı, ama o bunun için tartışmalı bir konu) desteklenmez: Bu sizi anlatıyor

o çekirdek profili yılında açıkça çekirdek işaretli değil yüksek sürüm OpenGL-3.0 olacak yani,

OpenGL core profile version string: 4.5 (Core Profile) Mesa 13.1.0-devel 
OpenGL core profile shading language version string: 4.50 
OpenGL core profile profile mask: core profile 

... ve bu sana ne anlatıyor: v4.5 kadar desteklenir

OpenGL version string: 3.0 Mesa 13.1.0-devel 
OpenGL shading language version string: 1.30 

Bu nedenle, ya çekirdek numaralı bir profili isteyin ya da GL-3.0 ve altına yapıştığınızı kabul edin.


Sadece karşılaştırma için, işte OpenGL-4 destekliyor bir OpenGL uygulaması (NVidia) arar nasıl.x hatta bir çekirdek profilinin dışında:

OpenGL core profile version string: 4.4.0 NVIDIA 367.27 
OpenGL core profile shading language version string: 4.40 NVIDIA via Cg compiler 
OpenGL core profile context flags: (none) 
OpenGL core profile profile mask: core profile 
OpenGL version string: 4.5.0 NVIDIA 367.27 
OpenGL shading language version string: 4.50 NVIDIA 
+0

Yanıt için teşekkür ederiz. tanımlı # shader dosyalarımda iyon 450 çekirdekli, demek istediğim buysa yine de aynı sonucu elde ediyorum. –

+0

@NicolaiPrebensen: Bu demek istediğim şey değil: OpenGL bağlamını oluştururken bir çekirdek profil bağlamı talep etmeniz gerektiğini kastediyorum. Bize OpenGL bağlamını nasıl oluşturduğunuzu (hangi kütüphaneleri/çerçeveyi kullandığınızı) söylemediniz. GLUT, GLFW, SLMF, SDL, GTK, Qt düz Xlib/GLX mi? Bize nasıl yaptığınızı söylerseniz, bir çekirdek profil bağlamını nasıl seçebileceğinizi size söyleyebiliriz. – datenwolf

0

Eğer bir çekirdek profiline ihtiyacınız 4.5 yeteneklerini kullanmayı düşünüyorsanız ve bu çıkış hattı

OpenGL core profile version string: 4.5 (Core Profile) Mesa 13.1.0-devel 

diğer çıkış hattı göre sisteminizde desteklenir

OpenGL version string: 3.0 Mesa 13.1.0-devel 

, iki farklı openGL sürücüsüne sahip olduğunuz anlamına gelmez, ancak OpenGL 3.0 üstlerini çekirdek profili olmadan karşılayabileceğiniz anlamına gelir. profil yetenekleri etkinleştirmek yanı sıra başkasının aynı sorunları yaşıyor İçin Doğru önişlemci direktifi

// Example using glut for context initialization 
glutInitContextVersion(4, 5); 
glutInitContextProfile(GLUT_CORE_PROFILE); 
glutInit(&argc, argv); 

// Shaders 
#version 450 
... 
+0

Hmm. Bu işlevleri bulamadığım için bazı kütüphaneleri kaçırıyor gibiyim. –

+0

@NicolaiPrebensen Bağlam oluşturma ve bağlama kodu, platforma özeldir, [bu gönderiye bir göz atın] (http://stackoverflow.com/a/879128/1938163) –

+0

@NicolaiPrebensen Ayrıca bunu yapmayı deneyebilirsiniz X11/Xlib'i [bu örnekte datenwolf] 'da olduğu gibi (http://stackoverflow.com/a/17608618/1938163) kendimi hiç denemedim. –

-1

sizin gölgelendiricideki sonraki kod deneyin:

"#Version 320 es

hassas mediump float;

... kodunuzu "

+2

Bu cevap daha iyi olurdu. – DaveyDaveDave