2014-09-16 5 views
1

Qt5를 최신 OpenGL에서 실행할 수 있다는 유망한 언급을 보았습니다. QQuickView를 OpenGL 4.1 코어 (MacBook과 함께 OSX 10.9에서 최신 버전 지원)로 설정하려면 다음 코드를 사용하고 있습니다.OpenGL 4.1 및 Qt 5의 심각한 렌더링 문제

QSurfaceFormat sf = g_mainView->format(); 
sf.setProfile(QSurfaceFormat::CoreProfile); 
sf.setVersion(4, 1); 
g_mainView->setFormat(sf); 

주요 문제. 첫째, 텍스트 렌더링을 시도 할 때 앱이 완전히 중단됩니다. QML에 이미지, 사각형 등만 있으면 조각 쉐이더 오류가 발생합니다.

QOpenGLShader::compile(Fragment): ERROR: 0:1: '' : #version required and missing. 
ERROR: 0:5: 'varying' : syntax error syntax error 

*** Problematic Fragment shader source code *** 
#define lowp 
#define mediump 
#define highp 

      varying highp vec2 qt_TexCoord0; 
      uniform highp float qt_Opacity; 
      uniform lowp sampler2D source; 
      uniform lowp sampler2D maskSource; 
      void main(void) { 
       gl_FragColor = texture2D(source, qt_TexCoord0.st) * (texture2D(maskSource, qt_TexCoord0.st).a) * qt_Opacity; 
      } 


*** 
QQuickCustomMaterialShader: Shader compilation failed: 
"ERROR: 0:1: '' : #version required and missing. 
ERROR: 0:5: 'varying' : syntax error syntax error 
" 

Qt5.3은 최신 OpenGL에서 아직 준비되지 않았습니까? 아니면 간단히 잘못 설정하고 있습니까? OpenGL 4를 사용하여 내 자신의 OpenGL 그래픽 창을 임베드하고 싶습니다. 그래서 제 가정은 GL 4에서도 실행중인 응용 프로그램이 필요하다는 것입니다. 다른 방법이 있습니까?

+0

이 코드베이스는 Linux에서 컴파일됩니다. 동일한 표면 포맷 코드를 테스트했습니다. 핵심 프로필을 사용하여 폭탄을 터뜨렸지 만 호환성을 사용하여 작동합니다. Qt 5.2 이상이 코어와 함께 작동해야한다고 생각했습니다. 이 동영상의 Sean의 댓글 https://www.youtube.com/watch?v=YqlaKY0a1hg를 참조하십시오. 내가 무엇을해야 하나? Mac은 현대 gl과 호환성 프로파일을 제공하지 않습니다. – Evan

+0

이 문제는 5.4, Windows가 아닌 Windows에 존재하며 호환성 프로파일을 반환합니다. – emailhy

+0

Mac 및 Linux 상자에서 여전히 QGraphicalEffects로 렌더링 문제가 있습니다. 그것에 관한 버그를 열었습니다 : https://bugreports.qt-project.org/browse/QTBUG-42107 5.3에서 추락 한 컨트롤을 사용할 수 있습니다. 몇 주 전에 게시 된 베타 버전입니다. – Evan

답변

4

버그 보고서에 몇 가지 의견을 추가하고 투표했습니다. 여기에 명시된 바와 같이 실제로는 Qt 버그입니다. https://www.opengl.org/wiki/Core_Language_%28GLSL%29#Version 첫 번째 전처리 지시문은 #version이어야하지만 Qt에서는 lowp, mediump 및 highp에 대한 정의를 추가하여이 요구 사항을 위반합니다. Nvidia 드라이버를 사용하면 문제를 해결할 수 있지만 인텔은 (나는 ATI에 대해 몰라서) 개발자가 서로 다른 하드웨어 구성에서 테스트하지 않았을 수도 있습니다.

그대로, 쉽게 해결할 수있는 방법이 없으며 QT 코드를 변경하여 해당 정의 (배급의 악몽)를 추가하지 않거나 원시 OpenGL 개체를 직접 보관하는 QOpenGLShader 클래스를 사용하지 않을 수 있습니다.

+0

추가 정보를 보내 주셔서 감사합니다. – Evan

+0

문제 없으니 기꺼이 도와 드리겠습니다. –

0

나는 Qt의 버그에 동의하지 않습니다. 붙여 넣은 링크에 명시된 바와 같이 : "#version 지시어가 맨 위에 나타나지 않으면 1.10이라고 가정합니다. 거의 확실하게 원하지 않습니다."

Qt가 원하는 것은 그것이 OpenGL4 컨텍스트가 제공해야하는 것입니다. 인텔 드라이버의 버그입니다. 2.0 컨텍스트가 필요하면 GLSL1.10 버전의 암시 적 대체가 인텔 드라이버에서 작동하지 않습니다.