Class: RLSL::ShaderBuilder::BuildService

Inherits:
Object
  • Object
show all
Defined in:
lib/rlsl/shader_builder/build_service.rb

Instance Method Summary collapse

Constructor Details

#initialize(name, definition, source_resolver_class: SourceResolver, compiler_factory: nil) ⇒ BuildService

Returns a new instance of BuildService.



6
7
8
9
10
11
# File 'lib/rlsl/shader_builder/build_service.rb', line 6

def initialize(name, definition, source_resolver_class: SourceResolver, compiler_factory: nil)
  @name = name
  @definition = definition
  @source_resolver_class = source_resolver_class
  @compiler_factory = compiler_factory
end

Instance Method Details

#build_glsl_shader(version: "450") ⇒ Object



32
33
34
# File 'lib/rlsl/shader_builder/build_service.rb', line 32

def build_glsl_shader(version: "450")
  GLSL::Translator.new(@definition.uniforms, *translation_sources(:glsl), version: version).translate
end

#build_metal_shaderObject



21
22
23
24
25
26
# File 'lib/rlsl/shader_builder/build_service.rb', line 21

def build_metal_shader
  translator = MSL::Translator.new(@definition.uniforms, *translation_sources(:msl))
  msl_source = translator.translate

  MSL::Shader.new(@name, @definition.uniforms, msl_source)
end

#build_wgsl_shaderObject



28
29
30
# File 'lib/rlsl/shader_builder/build_service.rb', line 28

def build_wgsl_shader
  WGSL::Translator.new(@definition.uniforms, *translation_sources(:wgsl)).translate
end

#compile_and_loadObject



13
14
15
16
17
18
19
# File 'lib/rlsl/shader_builder/build_service.rb', line 13

def compile_and_load
  c_code = generate_c_code
  artifact = native_extension_compiler.build(c_code)

  require artifact.file
  CompiledShader.new(@name, artifact.ext_name, @definition.uniforms)
end

#transpile_fragment(target) ⇒ Object



36
37
38
39
40
# File 'lib/rlsl/shader_builder/build_service.rb', line 36

def transpile_fragment(target)
  return "" unless @definition.fragment_block

  source_resolver.fragment_code(target)
end

#transpile_helpers(target) ⇒ Object



42
43
44
45
46
# File 'lib/rlsl/shader_builder/build_service.rb', line 42

def transpile_helpers(target)
  return "" unless @definition.helpers_block

  source_resolver.helpers_code(target)
end