parasol 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 2a561d008abe6198982ec891b571cd37d08f6a50ab8b747ff4e4d5bedb370868
4
+ data.tar.gz: e47e7bbe11d07a15ec1e5c3f9e5640e86743c04dcba687b270a59737a0f58388
5
+ SHA512:
6
+ metadata.gz: 7efba5cc150b670af0a59feca739e3b0045d2142b71820d4ec3e35baab33ed10c83f5c527f3d8af46b1afa0221c42a97287c9400b3f37c06cb130126834c2c5a
7
+ data.tar.gz: 83e130d810bacd8c70fc16a389050cd7a5370d907cd509c7d89891a38395c5af5f7553c66fd79789e34ad77d978cff978dfc0434f8ea096cfb637d92de5d2640
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
data/.rubocop.yml ADDED
@@ -0,0 +1,34 @@
1
+ require:
2
+ - rubocop-performance
3
+ - rubocop-rake
4
+ - rubocop-rspec
5
+
6
+ AllCops:
7
+ NewCops: enable
8
+ TargetRubyVersion: 3.1
9
+
10
+ Style/MethodCallWithArgsParentheses:
11
+ Enabled: true
12
+ EnforcedStyle: omit_parentheses
13
+
14
+ Style/MethodDefParentheses:
15
+ Enabled: true
16
+ EnforcedStyle: require_no_parentheses
17
+
18
+ Style/SignalException:
19
+ Enabled: true
20
+ EnforcedStyle: semantic
21
+
22
+ Style/StringLiterals:
23
+ Enabled: true
24
+ EnforcedStyle: double_quotes
25
+
26
+ Style/StringLiteralsInInterpolation:
27
+ Enabled: true
28
+ EnforcedStyle: double_quotes
29
+
30
+ Style/SuperWithArgsParentheses:
31
+ Enabled: false
32
+
33
+ Layout/LineLength:
34
+ Max: 120
data/CHANGELOG.md ADDED
@@ -0,0 +1,5 @@
1
+ ## [Unreleased]
2
+
3
+ ## [0.1.0] - 2024-01-13
4
+
5
+ - Initial release
data/Gemfile ADDED
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ # Specify your gem's dependencies in parasol.gemspec
6
+ gemspec
7
+
8
+ gem "rake", "~> 13.0"
9
+
10
+ gem "rspec", "~> 3.0"
11
+
12
+ gem "rubocop", "~> 1.21"
13
+ gem "rubocop-performance"
14
+ gem "rubocop-rake"
15
+ gem "rubocop-rspec"
16
+
17
+ gem "debug"
18
+ gem "steep", path: "../steep"
data/Gemfile.lock ADDED
@@ -0,0 +1,154 @@
1
+ PATH
2
+ remote: ../steep
3
+ specs:
4
+ steep (1.6.0)
5
+ activesupport (>= 5.1)
6
+ concurrent-ruby (>= 1.1.10)
7
+ csv (>= 3.0.9)
8
+ fileutils (>= 1.1.0)
9
+ json (>= 2.1.0)
10
+ language_server-protocol (>= 3.15, < 4.0)
11
+ listen (~> 3.0)
12
+ logger (>= 1.3.0)
13
+ parser (>= 3.1)
14
+ rainbow (>= 2.2.2, < 4.0)
15
+ rbs (>= 3.1.0)
16
+ securerandom (>= 0.1)
17
+ strscan (>= 1.0.0)
18
+ terminal-table (>= 2, < 4)
19
+
20
+ PATH
21
+ remote: .
22
+ specs:
23
+ parasol (0.1.0)
24
+ opengl-bindings2 (~> 2)
25
+
26
+ GEM
27
+ remote: https://rubygems.org/
28
+ specs:
29
+ abbrev (0.1.2)
30
+ activesupport (7.1.2)
31
+ base64
32
+ bigdecimal
33
+ concurrent-ruby (~> 1.0, >= 1.0.2)
34
+ connection_pool (>= 2.2.5)
35
+ drb
36
+ i18n (>= 1.6, < 2)
37
+ minitest (>= 5.1)
38
+ mutex_m
39
+ tzinfo (~> 2.0)
40
+ ast (2.4.2)
41
+ base64 (0.2.0)
42
+ bigdecimal (3.1.5)
43
+ concurrent-ruby (1.2.2)
44
+ connection_pool (2.4.1)
45
+ csv (3.2.8)
46
+ debug (1.9.1)
47
+ irb (~> 1.10)
48
+ reline (>= 0.3.8)
49
+ diff-lcs (1.5.0)
50
+ drb (2.2.0)
51
+ ruby2_keywords
52
+ ffi (1.16.3)
53
+ fileutils (1.7.2)
54
+ i18n (1.14.1)
55
+ concurrent-ruby (~> 1.0)
56
+ io-console (0.7.1)
57
+ irb (1.11.1)
58
+ rdoc
59
+ reline (>= 0.4.2)
60
+ json (2.7.1)
61
+ language_server-protocol (3.17.0.3)
62
+ listen (3.8.0)
63
+ rb-fsevent (~> 0.10, >= 0.10.3)
64
+ rb-inotify (~> 0.9, >= 0.9.10)
65
+ logger (1.6.0)
66
+ minitest (5.21.1)
67
+ mutex_m (0.2.0)
68
+ opengl-bindings2 (2.0.2)
69
+ parallel (1.24.0)
70
+ parser (3.3.0.3)
71
+ ast (~> 2.4.1)
72
+ racc
73
+ psych (5.1.2)
74
+ stringio
75
+ racc (1.7.3)
76
+ rainbow (3.1.1)
77
+ rake (13.1.0)
78
+ rb-fsevent (0.11.2)
79
+ rb-inotify (0.10.1)
80
+ ffi (~> 1.0)
81
+ rbs (3.4.1)
82
+ abbrev
83
+ rdoc (6.6.2)
84
+ psych (>= 4.0.0)
85
+ regexp_parser (2.9.0)
86
+ reline (0.4.2)
87
+ io-console (~> 0.5)
88
+ rexml (3.2.6)
89
+ rspec (3.12.0)
90
+ rspec-core (~> 3.12.0)
91
+ rspec-expectations (~> 3.12.0)
92
+ rspec-mocks (~> 3.12.0)
93
+ rspec-core (3.12.2)
94
+ rspec-support (~> 3.12.0)
95
+ rspec-expectations (3.12.3)
96
+ diff-lcs (>= 1.2.0, < 2.0)
97
+ rspec-support (~> 3.12.0)
98
+ rspec-mocks (3.12.6)
99
+ diff-lcs (>= 1.2.0, < 2.0)
100
+ rspec-support (~> 3.12.0)
101
+ rspec-support (3.12.1)
102
+ rubocop (1.59.0)
103
+ json (~> 2.3)
104
+ language_server-protocol (>= 3.17.0)
105
+ parallel (~> 1.10)
106
+ parser (>= 3.2.2.4)
107
+ rainbow (>= 2.2.2, < 4.0)
108
+ regexp_parser (>= 1.8, < 3.0)
109
+ rexml (>= 3.2.5, < 4.0)
110
+ rubocop-ast (>= 1.30.0, < 2.0)
111
+ ruby-progressbar (~> 1.7)
112
+ unicode-display_width (>= 2.4.0, < 3.0)
113
+ rubocop-ast (1.30.0)
114
+ parser (>= 3.2.1.0)
115
+ rubocop-capybara (2.20.0)
116
+ rubocop (~> 1.41)
117
+ rubocop-factory_bot (2.25.1)
118
+ rubocop (~> 1.41)
119
+ rubocop-performance (1.20.2)
120
+ rubocop (>= 1.48.1, < 2.0)
121
+ rubocop-ast (>= 1.30.0, < 2.0)
122
+ rubocop-rake (0.6.0)
123
+ rubocop (~> 1.0)
124
+ rubocop-rspec (2.26.1)
125
+ rubocop (~> 1.40)
126
+ rubocop-capybara (~> 2.17)
127
+ rubocop-factory_bot (~> 2.22)
128
+ ruby-progressbar (1.13.0)
129
+ ruby2_keywords (0.0.5)
130
+ securerandom (0.3.1)
131
+ stringio (3.1.0)
132
+ strscan (3.0.8)
133
+ terminal-table (3.0.2)
134
+ unicode-display_width (>= 1.1.1, < 3)
135
+ tzinfo (2.0.6)
136
+ concurrent-ruby (~> 1.0)
137
+ unicode-display_width (2.5.0)
138
+
139
+ PLATFORMS
140
+ arm64-darwin-22
141
+
142
+ DEPENDENCIES
143
+ debug
144
+ parasol!
145
+ rake (~> 13.0)
146
+ rspec (~> 3.0)
147
+ rubocop (~> 1.21)
148
+ rubocop-performance
149
+ rubocop-rake
150
+ rubocop-rspec
151
+ steep!
152
+
153
+ BUNDLED WITH
154
+ 2.4.10
data/README.md ADDED
@@ -0,0 +1,35 @@
1
+ # Parasol
2
+
3
+ TODO: Delete this and the text below, and describe your gem
4
+
5
+ Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/parasol`. To experiment with that code, run `bin/console` for an interactive prompt.
6
+
7
+ ## Installation
8
+
9
+ TODO: Replace `UPDATE_WITH_YOUR_GEM_NAME_PRIOR_TO_RELEASE_TO_RUBYGEMS_ORG` with your gem name right after releasing it to RubyGems.org. Please do not do it earlier due to security reasons. Alternatively, replace this section with instructions to install your gem from git if you don't plan to release to RubyGems.org.
10
+
11
+ Install the gem and add to the application's Gemfile by executing:
12
+
13
+ $ bundle add UPDATE_WITH_YOUR_GEM_NAME_PRIOR_TO_RELEASE_TO_RUBYGEMS_ORG
14
+
15
+ If bundler is not being used to manage dependencies, install the gem by executing:
16
+
17
+ $ gem install UPDATE_WITH_YOUR_GEM_NAME_PRIOR_TO_RELEASE_TO_RUBYGEMS_ORG
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Development
24
+
25
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
26
+
27
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
28
+
29
+ ## Contributing
30
+
31
+ Bug reports and pull requests are welcome on GitHub at https://www.github.com/aesthetikx/parasol.
32
+
33
+ ## License
34
+
35
+ The gem is available as open source under the terms of the [Unlicense](https://opensource.org/licenses/unlicense).
data/Rakefile ADDED
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+
5
+ require "rspec/core/rake_task"
6
+ RSpec::Core::RakeTask.new :spec
7
+
8
+ require "rubocop/rake_task"
9
+ RuboCop::RakeTask.new
10
+
11
+ require "steep/rake_task"
12
+ Steep::RakeTask.new do |t|
13
+ t.check.severity_level = :error
14
+ end
15
+
16
+ task default: %i[spec steep rubocop]
data/Steepfile ADDED
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ target :lib do
4
+ signature "sig"
5
+
6
+ check "lib"
7
+ end
data/UNLICENSE ADDED
@@ -0,0 +1,24 @@
1
+ This is free and unencumbered software released into the public domain.
2
+
3
+ Anyone is free to copy, modify, publish, use, compile, sell, or
4
+ distribute this software, either in source code form or as a compiled
5
+ binary, for any purpose, commercial or non-commercial, and by any
6
+ means.
7
+
8
+ In jurisdictions that recognize copyright laws, the author or authors
9
+ of this software dedicate any and all copyright interest in the
10
+ software to the public domain. We make this dedication for the benefit
11
+ of the public at large and to the detriment of our heirs and
12
+ successors. We intend this dedication to be an overt act of
13
+ relinquishment in perpetuity of all present and future rights to this
14
+ software under copyright law.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19
+ IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20
+ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
+ OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+ For more information, please refer to <http://unlicense.org/>
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Parasol
4
+ class FragmentShader < Parasol::Shader
5
+ def initialize source:
6
+ super source:, type: GL::FRAGMENT_SHADER
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Parasol
4
+ class GeometryShader < Parasol::Shader
5
+ def initialize source:
6
+ super source:, type: GL::GEOMETRY_SHADER
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Parasol
4
+ # :nodoc:
5
+ module OpenGLContext
6
+ def require_opengl_context!
7
+ return unless GLFW.GetCurrentContext.null?
8
+
9
+ fail Parasol::ShaderError, "No OpenGL context available."
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,105 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Parasol
4
+ class Shader
5
+ include OpenGLContext
6
+
7
+ attr_reader :source, :type
8
+
9
+ def initialize source:, type:
10
+ @source = source
11
+ @type = type
12
+ end
13
+
14
+ def handle
15
+ the_shader || compile_the_shader!
16
+ end
17
+
18
+ def delete
19
+ cleanup
20
+ end
21
+
22
+ def compiled?
23
+ !the_shader.nil?
24
+ end
25
+
26
+ private
27
+
28
+ LOG_SIZE = 8192
29
+
30
+ attr_reader :the_shader
31
+
32
+ def compile_the_shader!
33
+ if compiled?
34
+ return the_shader # : Integer
35
+ end
36
+
37
+ require_opengl_context!
38
+
39
+ @the_shader = create_shader!
40
+
41
+ compile_shader!
42
+ end
43
+
44
+ def create_shader!
45
+ GL.CreateShader(type).tap do |pointer|
46
+ fail Parasol::ShaderError, "Unable to create shader." if pointer.zero?
47
+ end
48
+ end
49
+
50
+ def compile_shader!
51
+ GL.ShaderSource the_shader, 1, packed_source, nil
52
+
53
+ GL.CompileShader the_shader
54
+
55
+ if compiled_successfully?
56
+ return the_shader # : Integer
57
+ end
58
+
59
+ message = last_error_message
60
+
61
+ fail Parasol::ShaderError, "Unable to compile shader:\n#{message}"
62
+ rescue Parasol::ShaderError
63
+ cleanup
64
+
65
+ raise
66
+ end
67
+
68
+ def compiled_successfully?
69
+ compile_status == GL::TRUE
70
+ end
71
+
72
+ def packed_source
73
+ [source].pack "p"
74
+ end
75
+
76
+ def compile_status
77
+ status_buffer = " " * 4
78
+
79
+ GL.GetShaderiv the_shader, GL::COMPILE_STATUS, status_buffer
80
+
81
+ status = status_buffer.unpack1 "L"
82
+
83
+ status&.to_i
84
+ end
85
+
86
+ def last_error_message
87
+ length_buffer = " " * 4
88
+ log_buffer = " " * LOG_SIZE
89
+
90
+ GL.GetShaderInfoLog the_shader, LOG_SIZE, length_buffer, log_buffer
91
+
92
+ log_buffer.strip
93
+ end
94
+
95
+ def cleanup
96
+ return unless compiled?
97
+
98
+ require_opengl_context!
99
+
100
+ GL.DeleteShader the_shader
101
+ ensure
102
+ @the_shader = nil
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Parasol
4
+ class ShaderError < Error; end
5
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Parasol
4
+ VERSION = "0.1.0"
5
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Parasol
4
+ class VertexShader < Parasol::Shader
5
+ def initialize source:
6
+ super source:, type: GL::VERTEX_SHADER
7
+ end
8
+ end
9
+ end
data/lib/parasol.rb ADDED
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "opengl"
4
+ require "glfw"
5
+
6
+ require_relative "parasol/version"
7
+
8
+ module Parasol
9
+ class Error < StandardError; end
10
+ # Your code goes here...
11
+ end
12
+
13
+ require_relative "parasol/opengl_context"
14
+ require_relative "parasol/shader"
15
+ require_relative "parasol/shader_error"
16
+ require_relative "parasol/fragment_shader"
17
+ require_relative "parasol/geometry_shader"
18
+ require_relative "parasol/vertex_shader"
data/parasol.gemspec ADDED
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/parasol/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "parasol"
7
+ spec.version = Parasol::VERSION
8
+ spec.authors = ["John DeSilva"]
9
+ spec.email = ["john@aesthetikx.info"]
10
+
11
+ spec.summary = "A Ruby Shader Library"
12
+ spec.description = spec.summary
13
+ spec.homepage = "https://www.github.com/Aesthetikx/parasol"
14
+ spec.license = "Unlicense"
15
+ spec.required_ruby_version = ">= 3.1"
16
+
17
+ spec.metadata["homepage_uri"] = spec.homepage
18
+ spec.metadata["source_code_uri"] = "https://www.github.com/aesthetikx/parasol"
19
+ spec.metadata["changelog_uri"] = "https://www.github.com/aesthetikx/parasol/blob/master/CHANGELOG.md"
20
+ spec.metadata["rubygems_mfa_required"] = "true"
21
+
22
+ # Specify which files should be added to the gem when it is released.
23
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
24
+ spec.files = Dir.chdir __dir__ do
25
+ `git ls-files -z`.split("\x0").reject do |f|
26
+ (File.expand_path(f) == __FILE__) || f.start_with?(*%w[bin/ test/ spec/ features/ .git .circleci appveyor])
27
+ end
28
+ end
29
+ spec.bindir = "exe"
30
+ spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename f }
31
+ spec.require_paths = ["lib"]
32
+
33
+ spec.add_dependency "opengl-bindings2", "~> 2"
34
+
35
+ # For more information and examples about making a new gem, check out our
36
+ # guide at: https://bundler.io/guides/creating_gem.html
37
+ end
@@ -0,0 +1,5 @@
1
+ module Parasol
2
+ class FragmentShader < Parasol::Shader
3
+ def initialize: (source: String) -> void
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ module Parasol
2
+ class GeometryShader < Parasol::Shader
3
+ def initialize: (source: String) -> void
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ module Parasol
2
+ # :nodoc:
3
+ module OpenGLContext
4
+ def require_opengl_context!: () -> nil
5
+ end
6
+ end
@@ -0,0 +1,39 @@
1
+ module Parasol
2
+ class Shader
3
+ include OpenGLContext
4
+
5
+ attr_reader source: String
6
+
7
+ attr_reader type: Integer
8
+
9
+ def initialize: (source: String, type: Integer) -> void
10
+
11
+ def handle: () -> Integer
12
+
13
+ def delete: () -> nil
14
+
15
+ def compiled?: () -> bool
16
+
17
+ private
18
+
19
+ LOG_SIZE: Integer
20
+
21
+ attr_reader the_shader: Integer?
22
+
23
+ def compile_the_shader!: () -> Integer
24
+
25
+ def create_shader!: () -> Integer
26
+
27
+ def compile_shader!: () -> Integer
28
+
29
+ def compiled_successfully?: () -> bool
30
+
31
+ def packed_source: () -> String
32
+
33
+ def compile_status: () -> Integer?
34
+
35
+ def last_error_message: () -> String
36
+
37
+ def cleanup: () -> nil
38
+ end
39
+ end
@@ -0,0 +1,4 @@
1
+ module Parasol
2
+ class ShaderError < Error
3
+ end
4
+ end
@@ -0,0 +1,5 @@
1
+ module Parasol
2
+ class VertexShader < Parasol::Shader
3
+ def initialize: (source: String) -> void
4
+ end
5
+ end
data/sig/parasol.rbs ADDED
@@ -0,0 +1,6 @@
1
+ module Parasol
2
+ VERSION: String
3
+
4
+ class Error < StandardError
5
+ end
6
+ end
metadata ADDED
@@ -0,0 +1,86 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: parasol
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - John DeSilva
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2024-01-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: opengl-bindings2
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2'
27
+ description: A Ruby Shader Library
28
+ email:
29
+ - john@aesthetikx.info
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - ".rspec"
35
+ - ".rubocop.yml"
36
+ - CHANGELOG.md
37
+ - Gemfile
38
+ - Gemfile.lock
39
+ - README.md
40
+ - Rakefile
41
+ - Steepfile
42
+ - UNLICENSE
43
+ - lib/parasol.rb
44
+ - lib/parasol/fragment_shader.rb
45
+ - lib/parasol/geometry_shader.rb
46
+ - lib/parasol/opengl_context.rb
47
+ - lib/parasol/shader.rb
48
+ - lib/parasol/shader_error.rb
49
+ - lib/parasol/version.rb
50
+ - lib/parasol/vertex_shader.rb
51
+ - parasol.gemspec
52
+ - sig/parasol.rbs
53
+ - sig/parasol/fragment_shader.rbs
54
+ - sig/parasol/geometry_shader.rbs
55
+ - sig/parasol/opengl_context.rbs
56
+ - sig/parasol/shader.rbs
57
+ - sig/parasol/shader_error.rbs
58
+ - sig/parasol/vertex_shader.rbs
59
+ homepage: https://www.github.com/Aesthetikx/parasol
60
+ licenses:
61
+ - Unlicense
62
+ metadata:
63
+ homepage_uri: https://www.github.com/Aesthetikx/parasol
64
+ source_code_uri: https://www.github.com/aesthetikx/parasol
65
+ changelog_uri: https://www.github.com/aesthetikx/parasol/blob/master/CHANGELOG.md
66
+ rubygems_mfa_required: 'true'
67
+ post_install_message:
68
+ rdoc_options: []
69
+ require_paths:
70
+ - lib
71
+ required_ruby_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '3.1'
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ requirements: []
82
+ rubygems_version: 3.4.10
83
+ signing_key:
84
+ specification_version: 4
85
+ summary: A Ruby Shader Library
86
+ test_files: []