2016-12-02 5 views
-3

以前はGLFWを使用してUbuntuでOpenGLに問題がありましたが、glfwWindowHints()メソッドを使用して問題を解決しました。参照のためLinkGLFW - フラグメントシェーダをコンパイルできません

今、私はまだ別のエラーが発生しましたが、今回はフラグメントシェーダに関連しています。 #version 450 coreとしての私のシェーダファイルで

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 - padoka PPA 
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 - padoka PPA 
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 - padoka PPA 
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20 
OpenGL ES profile extensions: 

私が定義されているバージョン:ここで

Failed to compile fragment shader! 
0:60(12): error: `gl_FragColor' undeclared 
0:60(2): error: no matching function for call to `mainImage(error, vec2)'; candidates are: 
0:60(2): error: void mainImage(vec4, vec2) 

は、コマンドglxinfo | grep OpenGLの出力です。

0:60(12): error: 'gl_FragColor' undeclaredの(12)はバージョン1.2を表していますが、これが正しいかどうかはわかりません。

shader.frag - PasteBin

shader.vert - PasteBin

答えて

3

gl_FragColorは、OpenGL 3.3コアプロファイルので削除されました。現代的な方法は、フラグメントシェーダーで独自の出力変数を定義することです。 glBindFragDataLocation​メソッドを使用するか、またはレイアウト修飾子を使用して、シェーダの出力変数とフレームバッファのアタッチメント間のマッピングを指定できます。

-1

問題の解決方法が見つかりました。

  1. フラグメントシェーダ内で新しい変数out vec4 color;でGLEW
  2. 置き換えgl_FragColorを初期化する前にglewExperimental = GL_TRUE;を設定します。

私の友人は、NVIDIA GPUを使用してこれを行う必要はありませんでした。

おそらく、これはSkylake用のIntel Integrated Graphicsの現在のドライバにのみ問題がありますか?

関連する問題