GLSL 4.60
GLSL 4.60 (#version 460)とは、OpenGL 4.6およびVulkan 1.2 以降、かつGPUドライバの対応状況次第で利用できるGLSL系のシェーディング言語です。
GLSL 4.50 のマイナーチェンジであり、GLSL 4.50と同様に GLSL 1.x系やGLSL 3.x系とはまったく互換性がありません。
恐ろしいことに、GLSL 4.60.xと日々マイナーチェンジを繰り返しております。 現時点で最新仕様は GLSL 4.60.8 です。 よって安定性を求めるなら GLSL 4.50を使いましょう。
主な修正点 編集
新機能はほとんどなく、仕様上のあいまいだった部分が厳格化されました。 大雑把にいうと450では普通にビルドが通っていたものが460ではビルド警告がでるようになりました。
関数のパラメーター修飾子の明示化 編集
in/out/inout を省略すると“暗黙の in”だった挙動を明確化。省略時に警告、あるいはシェーダー間で不整合があるとエラー。
インターフェイス変数(in/out)の型・名前一致ルールの強化 編集
ステージ間で受け渡す変数は、型、配列サイズ、インターポレーション修飾子(smooth, flat など)が完全一致していないとエラー。
未初期化 out パラメーター/変数の禁止 編集
関数の out 引数やグローバルな out 変数は、呼び出し元で必ず初期化されていることを要求。未初期化状態を残すとエラー。
論理演算の適用対象の明確化 編集
論理演算(&&, ||, !)はスカラー型にのみ適用可という記述を厳格化。ベクトルやマトリクスへの適用はコンパイル時エラー。
双曲線逆関数 atanh の定義域修正 編集
atanh(x) の入力範囲を正しい数学的領域に修正。範囲を越えるとランタイムではなくコンパイル警告/エラーになる場合あり。
廃止キーワードの排除強化 編集
Core プロファイルで明示的に廃止されたキーワード(attribute, varying, gl_FragColor 等)を使うとエラー。#version 460 では一切認められません。
配列初期化とサイズ推論の厳密化 編集
多次元配列や interface block 内の配列で、サイズの省略や初期化リストとの不整合はエラーになります。
SPIR-V対応機能の標準化 編集
gl_KHR_vulkan_glsl 相当の機能群を統合。従来はドライバ依存でしか使えなかった拡張が、#version 460 で仕様の一部に。