주 창에 QOpenGLWidget을 사용하는 Qt 앱이 있습니다. QOpenGLFunctions를 사용하여 OpenGL 기능을 해결하는 OpenGL ES 2.0을 사용하여 그립니다. 모든 것은 Windows와 Linux에서 완벽하게 작동합니다 (동일한 Qt 앱 사용). Qt 5와 Qt Creator를 3 가지 플랫폼 모두에서 사용합니다.OpenGL ES 2.0은 Windows 및 Linux에서 작동하지만 Mac에서는 작동하지 않습니다.
그러나 Mac에서는 그래픽 그리기가 작동하지 않습니다. 처음으로 응용 프로그램을 실행하면 셰이더 프로그램을 컴파일 할 수 없어 추락했습니다. '정밀도'키워드가 구문 상 올바르지 않다고 불평했습니다. 이것은 셰이더 컴파일러가 셰이더 언어의 다른 버전을 기대하고 있음을 나타냅니다.
셰이더 프로그램의 시작 부분에 '#version 100'을 삽입하려고 시도했지만 도움이되지 않았습니다. 이번에는 버전 100이 지원되지 않았습니다.
셰이더에서 '정밀도'문을 삭제하면 디스플레이에 그래픽이 표시 될 수 있습니다. 그러나 디스플레이가 잘못되었습니다 - 일부 그래픽이 누락되었습니다. 투명도가없는 픽셀 (알파 = 1) 만 그렸습니다.
OpenGL ES 2.0 사용의 정확성을 확신합니다. Windows 및 Linux에서 Qt로 작업하는 것 외에도 동일한 코드가 Android (원시 코드) 및 iOS의 Qt 외부에서 완벽하게 작동하기 때문에 OpenGL ES 2.0 사용의 정확성을 확신합니다.
Qt 문서에 따르면 QOpenGLFunctions '는 OpenGL ES 2.0 API에 대한 교차 플랫폼 액세스를 제공합니다. 그건 사실이 아닌 것 같습니다.
이 문제를 해결할 수 있습니까? 나는 몇 시간을 찾아서 아무것도 찾지 못했다.
QSurfaceFormat :: setProfile()을 사용하고 있습니까? (애플은 win/linux와 같은 프로파일을 사용하지 않는다.) 만약 당신이'Qt 5.1'을 사용하지 않는다면, QOpenGLContext :: versionFunctions()는이 시나리오에 관계없이 당신을 도울 것입니다.'Qt 5.1 '을 사용한다면'QAbstractOpenGLFunctions'이 도움이 될 수 있습니다. http://qt.apidoc.info/5.1.1/qtgui/qabstractopenglfunctions.html#details –
나는 그것을 시도했다. 도움이되지 않았다. OpenGL ES 2.0 컨텍스트를 명시 적으로 요구하면 검은 색 화면과 '컨텍스트 생성 실패'오류가 발생했습니다. 현재 셰이더에서 '정밀도'를 제거하여 위에서 언급 한 것처럼 픽셀 투명도를 제외한 모든 작업을 수행 할 수 있습니다. –
이 시점에서 나의 다른 제안은 어쩌면이 문제를 살펴 보는 것입니다 (저자는 자신의 문제에 대한 해결책을 게시합니다). https://stackoverflow.com/q/23779357/499581 –