2013-06-30 4 views
2
내가 Qt를 함께 OpenGL을 사용에 밖으로 시작하고, 쉐이더 (I OpenGL을 경험을 가지고 있지만 아직 쉐이더)에있어

나는이 자습서 다음있어Qt5의 OpenGL GLSL 버전 오류

: http://releases.qt-project.org/learning/developerguides/qtopengltutorial/OpenGLTutorial.pdf (공식 Qt5를 OpenGL 튜토리얼).

문제는 내가 내 프로그램을 실행하려고 할 때, 나는 검은 화면이 다음과 같은 오류 메시지를 얻을입니다 :

내 프로그램은 일부 검색에와 QGLWidget

을 기반으로

QGLShader::compile(Vertex): ERROR: 0:1: '' : version '130' is not supported 

QGLShader::compile(Fragment): ERROR: 0:1: '' : version '130' is not supported 

인터 웹은 내가는 OpenGL 3.2 컨텍스트를 사용할 필요가 있음을 발견하지만, Qt는 OpenGL을 2.X를 사용하여 좋아하는

내 컴퓨터 :

    후반
  • 맥북 프로 망막 '15 2012
  • 인텔 HD 4000
  • 엔비디아 지포스 그래서 650M

, 어떻게이 일을 할 수 있습니까?

EDIT :

내 버전 3.2 지정된 형식없이 2.0

fragmentShader.frag 사용 (QGLFormat 통해 설정)된다

#version 130 

uniform vec4 color; 

out vec4 fragColor; 

void main(void) 
{ 
    fragColor = color; 
} 

vertexShader.vert :

#version 130 

uniform mat4 mvpMatrix; 

in vec4 vertex; 

void main(void) 
{ 
    gl_Position = mvpMatrix * vertex; 
} 

오류 (형식 : OpenGL 3.2) :

(형식없이, OpenGL을 2.0) 617,451,515,
QGLShaderProgram: shader programs are not supported 
QGLShaderProgram::uniformLocation(mvpMatrix): shader program is not linked 
The program has unexpectedly finished. 

오류 :

QGLShader::compile(Vertex): ERROR: 0:1: '' : version '130' is not supported 

QGLShader::compile(Fragment): ERROR: 0:1: '' : version '130' is not supported 
+0

메시지에 이러한 오류를 발생시키는 셰이더를 추가 할 수 있습니까?(물론, 셰이더의 소스에서 '#version 130'을 그냥 놓아도 작동하지 않는다고 가정하면) – peppe

+0

셰이더에는 이미 '#version 130'이 포함되어있어 작동하지 않는 이유입니다. – Dirk

+0

여전히 좋겠습니까? 사용중인 셰이더 소스를 게시물에 추가 하시겠습니까? 또한, 사용중인 Qt 버전을 명시하고, OpenGL 컨텍스트의 정확한 버전을 덤프 할 수 있습니까? ('glwidget-> context() -> format(). majorVersion()'과'minorVersion'을 통해). – peppe

답변

2

당신은 QGLFormat 개체를 만들고 생성자 매개 변수로 QGLWidget에 전달한다. QGLFormat 개체는 아래 코드와 같이 만들어야합니다.

QGLFormat glFormat; 
glFormat.setVersion(3, 2); 
glFormat.setProfile(QGLFormat::CoreProfile); 
+0

그 오류를 해결할 수 있지만이 오류가 발생합니다. QGLShaderProgram : 쉐이더 프로그램이 지원되지 않습니다. – Dirk

+0

QGLShaderProgram은 기본적으로 작업을 좀 더 쉽게 해주는 작은 래퍼입니다. 그것은 실제로 필요하지 않습니다. Github에서 영감을 얻기 위해 사용할 수있는 간단한 OpenGL 3.2 Qt 예제를 만들었습니다. https://github.com/mortennobel/QtOpenGL3.2Core – Mortennobel

+0

하지만 왜 작동할까요? QGLShaderProgram은 아닙니까? – Dirk

0

제 맥북 (2011 년 초)에 동일한 오류가 발생했으며 this answer은 저를 도와줍니다. 기본적으로 버전 120으로 비추천합니다.

3

Newer QOpenGLWidgetQGLFormat 인 생성자를 지원하지 않습니다. 대신, main.cpp에, 다음과 같은 모든 QOpenGLWidgetQOpenGLContext의 기본 QSurfaceFormat을 지정

// main.cpp 
QSurfaceFormat glFormat; 
glFormat.setVersion(3, 3); 
glFormat.setProfile(QSurfaceFormat::CoreProfile); 
QSurfaceFormat::setDefaultFormat(glFormat); 

지금 당신은 당신의 쉐이더에서 #version 330 core 같은 것을 사용할 수 있어야합니다.