Module: Stagecraft::Renderer::Features
- Defined in:
- lib/stagecraft/renderer/features.rb
Constant Summary collapse
- ORDER =
%i[ HAS_UV HAS_NORMAL HAS_TANGENT HAS_VERTEX_COLOR HAS_BASECOLOR_MAP HAS_MR_MAP HAS_NORMAL_MAP HAS_OCCLUSION_MAP HAS_EMISSIVE_MAP SKINNED ALPHA_MASK DOUBLE_SIDED ].freeze
- ATTRIBUTE_FEATURES =
{ uv: :HAS_UV, uv1: :HAS_UV1, normal: :HAS_NORMAL, tangent: :HAS_TANGENT, color: :HAS_VERTEX_COLOR }.freeze
Class Method Summary collapse
Class Method Details
.bits(features) ⇒ Object
32 33 34 |
# File 'lib/stagecraft/renderer/features.rb', line 32 def bits(features) ORDER.each_with_index.sum { |feature, index| features.include?(feature) ? (1 << index) : 0 } end |
.for(mesh) ⇒ Object
22 23 24 25 26 27 28 29 30 |
# File 'lib/stagecraft/renderer/features.rb', line 22 def for(mesh) values = Set.new ATTRIBUTE_FEATURES.each { |attribute, feature| values << feature if mesh.geometry.attribute(attribute) } color = mesh.geometry.attribute(:color) values << :COLOR_VEC3 if color && color.components == 3 material_features(mesh.material, values) values << :SKINNED if mesh.skin values.freeze end |
.vertex_layout_id(geometry) ⇒ Object
36 37 38 39 40 41 42 |
# File 'lib/stagecraft/renderer/features.rb', line 36 def vertex_layout_id(geometry) [ geometry.topology, geometry.index&.format, geometry.attributes.sort_by(&:first).map { |name, attribute| [name, attribute.format] } ].hash end |