Module: Glslkit::Rails::ShaderPrograms
- Defined in:
- lib/glslkit/rails/shader_programs.rb
Overview
config.glslkit.paths 配下の .vert/.frag ペアを名前ごとに集める。
ManifestBuilder(静的な precompile)と LiveReload::ProgramsController
(M11c、ポーリング用のエンドポイント)の両方が全く同じ発見ロジックを
必要とするため、ここに1箇所へ集約する。
Class Method Summary collapse
-
.discover(app) ⇒ Object
=> {vertex: "pbr.vert", fragment: "pbr.frag", ...} を返す。 同名の相方が無い .vert/.frag はスキップする(共有partialの可能性が あるため。SPEC.md §2.4/§3の「プログラムは両ステージ必須」の決定)。.
- .roots(app) ⇒ Object
Class Method Details
.discover(app) ⇒ Object
=> {vertex: "pbr.vert", fragment: "pbr.frag", ...} を返す。 同名の相方が無い .vert/.frag はスキップする(共有partialの可能性が あるため。SPEC.md §2.4/§3の「プログラムは両ステージ必須」の決定)。
19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/glslkit/rails/shader_programs.rb', line 19 def discover(app) by_name = Hash.new { |h, k| h[k] = {} } roots(app).each do |root| Dir.glob("**/*.{vert,frag}", base: root).each do |relative| ext = File.extname(relative) stage = (ext == ".vert") ? :vertex : :fragment by_name[relative.delete_suffix(ext)][stage] = relative end end by_name.select { |_, stages| stages.key?(:vertex) && stages.key?(:fragment) } end |
.roots(app) ⇒ Object
12 13 14 |
# File 'lib/glslkit/rails/shader_programs.rb', line 12 def roots(app) app.config.glslkit.paths.map { |path| app.root.join(path).to_s } end |