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

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