rays 0.3.1 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9afd571fda027a889bb3d2ba60886e08ee8de5b825690d28838d10e729e5097d
4
- data.tar.gz: 2bd0652be52c0f2f135cad35abe6b1b7140e90185ef9ec725e673aec2563f041
3
+ metadata.gz: 269385a45e74eaf01c182cbc322b720d22d34b5c7e0642918bd7f6bed05839bc
4
+ data.tar.gz: 52a94c5e763dbc4a4453ea1c119ea49933c8e6940c5e3a2455c935bbacfd64b8
5
5
  SHA512:
6
- metadata.gz: 94278334d219aebbaa3bd11b51f87555b230e8cd296115ccc06476b76f4240c0d5c4d976949b7bd04ce4b11aa056b738e7c9e5247dec8d75d14d36d5c7e388a0
7
- data.tar.gz: 9ffd24082a1f0f37d6fbbb5ce016395069de981ba3c1ff0538392de790029f7ed69d50b739fa6a0debe7b5461b8624704c46b5e36967342c22250f8c655bbf0e
6
+ metadata.gz: '01789a502f4c6fd31c76ea275f2f73ee2afe60d254e9efdf340b1a443216a3c310e3620606c170c7c55b470310f4c8b8550af1ead0f658fd589407ef6e1e8ffd'
7
+ data.tar.gz: 24be83763d29af1b5e10ead9b2963eb53468320d721ddfd632e786071851abf7fda46db14eab5458569aad60d006f9d62b242d9f93f069d7c586036c83b26bf2
@@ -26,7 +26,7 @@ VALUE initialize(VALUE self, VALUE args, VALUE pixel_density, VALUE smooth)
26
26
  RUCY_CHECK_OBJ(Rays::Image, self);
27
27
 
28
28
  size_t argc = args.size();
29
- check_arg_count(__FILE__, __LINE__, "Image#initialize", argc, 1, 2, 3);
29
+ check_arg_count(__FILE__, __LINE__, "Image#initialize!", argc, 1, 2, 3);
30
30
 
31
31
  float pd = to<float>(pixel_density);
32
32
  if (args[0].is_a(Rays::bitmap_class()))
@@ -70,6 +70,12 @@ VALUE fin(VALUE self)
70
70
  return self;
71
71
  }
72
72
 
73
+ static
74
+ VALUE renderer_info(VALUE self)
75
+ {
76
+ return value(Rays::get_renderer_info());
77
+ }
78
+
73
79
 
74
80
  static Module mRays;
75
81
 
@@ -80,6 +86,7 @@ Init_rays ()
80
86
 
81
87
  mRays.define_singleton_method("init!", init);
82
88
  mRays.define_singleton_method("fin!", fin);
89
+ rb_define_singleton_method(mRays, "renderer_info", RUBY_METHOD_FUNC(renderer_info), 0);
83
90
 
84
91
  for (auto it = CAP_TYPES.begin(); it != CAP_TYPES.end(); ++it)
85
92
  mRays.define_const(it->name, it->value);
@@ -20,7 +20,7 @@ def setup_dependencies(build: true, only: nil)
20
20
 
21
21
  exts.each do |ext|
22
22
  gem = RENAMES[ext.to_sym].then {|s| s || ext}
23
- ver = gemspec[/add_runtime_dependency.*['"]#{gem}['"].*['"]\s*~>\s*([\d\.]+)\s*['"]/, 1]
23
+ ver = gemspec[/add_dependency.*['"]#{gem}['"].*['"]\s*>=\s*([\d\.]+)\s*['"]/, 1]
24
24
  opts = '-c advice.detachedHead=false --depth 1'
25
25
  clone = "git clone #{opts} https://github.com/xord/#{ext}.git ../#{ext}"
26
26
 
data/ChangeLog.md CHANGED
@@ -1,6 +1,20 @@
1
1
  # rays ChangeLog
2
2
 
3
3
 
4
+ ## [v0.3.3] - 2025-01-23
5
+
6
+ - Add '#version 120' line to shader source
7
+ - Add Rays.renderer_info
8
+
9
+ - Fix shader error on Intel GPU
10
+
11
+
12
+ ## [v0.3.2] - 2025-01-14
13
+
14
+ - Update workflow files
15
+ - Set minumum version for runtime dependency
16
+
17
+
4
18
  ## [v0.3.1] - 2025-01-13
5
19
 
6
20
  - Update LICENSE
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.1
1
+ 0.3.3
data/ext/rays/image.cpp CHANGED
@@ -27,7 +27,7 @@ RUCY_DEF3(initialize, args, pixel_density, smooth)
27
27
  RUCY_CHECK_OBJ(Rays::Image, self);
28
28
 
29
29
  size_t argc = args.size();
30
- check_arg_count(__FILE__, __LINE__, "Image#initialize", argc, 1, 2, 3);
30
+ check_arg_count(__FILE__, __LINE__, "Image#initialize!", argc, 1, 2, 3);
31
31
 
32
32
  float pd = to<float>(pixel_density);
33
33
  if (args[0].is_a(Rays::bitmap_class()))
data/ext/rays/rays.cpp CHANGED
@@ -72,6 +72,13 @@ RUCY_DEF0(fin)
72
72
  }
73
73
  RUCY_END
74
74
 
75
+ static
76
+ RUCY_DEF0(renderer_info)
77
+ {
78
+ return value(Rays::get_renderer_info());
79
+ }
80
+ RUCY_END
81
+
75
82
 
76
83
  static Module mRays;
77
84
 
@@ -82,6 +89,7 @@ Init_rays ()
82
89
 
83
90
  mRays.define_singleton_method("init!", init);
84
91
  mRays.define_singleton_method("fin!", fin);
92
+ mRays.define_singleton_method("renderer_info", renderer_info);
85
93
 
86
94
  for (auto it = CAP_TYPES.begin(); it != CAP_TYPES.end(); ++it)
87
95
  mRays.define_const(it->name, it->value);
data/include/rays/rays.h CHANGED
@@ -23,6 +23,8 @@ namespace Rays
23
23
 
24
24
  void activate_offscreen_context ();
25
25
 
26
+ String get_renderer_info ();
27
+
26
28
 
27
29
  }// Rays
28
30
 
data/rays.gemspec CHANGED
@@ -25,8 +25,8 @@ Gem::Specification.new do |s|
25
25
  s.platform = Gem::Platform::RUBY
26
26
  s.required_ruby_version = '>= 3.0.0'
27
27
 
28
- s.add_runtime_dependency 'xot', '~> 0.3.1'
29
- s.add_runtime_dependency 'rucy', '~> 0.3.1'
28
+ s.add_dependency 'xot', '~> 0.3.3', '>= 0.3.3'
29
+ s.add_dependency 'rucy', '~> 0.3.3', '>= 0.3.3'
30
30
 
31
31
  s.files = `git ls-files`.split $/
32
32
  s.executables = s.files.grep(%r{^bin/}) {|f| File.basename f}
data/src/opengl.cpp CHANGED
@@ -56,4 +56,16 @@ namespace Rays
56
56
  }
57
57
 
58
58
 
59
+ String
60
+ get_renderer_info ()
61
+ {
62
+ return Xot::stringf(
63
+ "{\"OpenGL Version\":\"%s\",\"GLSL Version\":\"%s\",\"Renderer\":\"%s\",\"Vendor\":\"%s\"}",
64
+ glGetString(GL_VERSION),
65
+ glGetString(GL_SHADING_LANGUAGE_VERSION),
66
+ glGetString(GL_RENDERER),
67
+ glGetString(GL_VENDOR));
68
+ }
69
+
70
+
59
71
  }// Rays
data/src/shader.cpp CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
 
4
4
  #include <assert.h>
5
- #include <regex>
6
5
  #include "rays/exception.h"
7
6
  #include "opengl.h"
8
7
  #include "image.h"
@@ -50,7 +49,7 @@ namespace Rays
50
49
 
51
50
  program.reset(new ShaderProgram(
52
51
  make_vertex_shader_source(vertex_shader_source),
53
- make_fragment_shader_source(fragment_shader_source),
52
+ ShaderSource(GL_FRAGMENT_SHADER, fragment_shader_source),
54
53
  env_ ? ShaderEnv_get_flags(*env_) : 0));
55
54
  }
56
55
 
@@ -65,21 +64,6 @@ namespace Rays
65
64
  }
66
65
  }
67
66
 
68
- ShaderSource make_fragment_shader_source (const char* source)
69
- {
70
- #ifdef IOS
71
- static const String SHARED_HEADER = "precision highp float;\n";
72
- static const std::regex PRECISION(R"(^\s*precision\s+\w+p\s+float\s*;)");
73
-
74
- if (!std::regex_search(source, PRECISION))
75
- return ShaderSource(GL_FRAGMENT_SHADER, SHARED_HEADER + source);
76
- else
77
- return ShaderSource(GL_FRAGMENT_SHADER, source);
78
- #else
79
- return ShaderSource(GL_FRAGMENT_SHADER, source);
80
- #endif
81
- }
82
-
83
67
  };// Shader::Data
84
68
 
85
69
 
@@ -110,12 +94,12 @@ namespace Rays
110
94
  "uniform sampler2D " + U_TEXTURE + ";\n"
111
95
  "void main ()\n"
112
96
  "{\n"
113
- " vec2 texcoord__ = clamp(" +
97
+ " vec2 _rays_texcoord = clamp(" +
114
98
  V_TEXCOORD + ".xy, " +
115
99
  U_TEXCOORD_MIN + ".xy, " +
116
100
  U_TEXCOORD_MAX + ".xy - " + U_TEXCOORD_OFFSET + ".xy);\n"
117
- " vec4 color__ = texture2D(" + U_TEXTURE + ", texcoord__);\n"
118
- " gl_FragColor = " + V_COLOR + " * color__;\n"
101
+ " vec4 _rays_color = texture2D(" + U_TEXTURE + ", _rays_texcoord);\n"
102
+ " gl_FragColor = " + V_COLOR + " * _rays_color;\n"
119
103
  "}\n");
120
104
  }
121
105
 
@@ -132,11 +116,11 @@ namespace Rays
132
116
  "uniform sampler2D " + U_TEXTURE + ";\n"
133
117
  "void main ()\n"
134
118
  "{\n"
135
- " vec2 min__ = " + U_TEXCOORD_MIN + ".xy;\n"
136
- " vec2 len__ = " + U_TEXCOORD_MAX + ".xy - min__;\n"
137
- " vec2 texcoord__ = mod(" + V_TEXCOORD + ".xy - min__, len__) + min__;\n"
138
- " vec4 color__ = texture2D(" + U_TEXTURE + ", texcoord__);\n"
139
- " gl_FragColor = " + V_COLOR + " * color__;\n"
119
+ " vec2 _rays_min = " + U_TEXCOORD_MIN + ".xy;\n"
120
+ " vec2 _rays_len = " + U_TEXCOORD_MAX + ".xy - _rays_min;\n"
121
+ " vec2 _rays_texcoord = mod(" + V_TEXCOORD + ".xy - _rays_min, _rays_len) + _rays_min;\n"
122
+ " vec4 _rays_color = texture2D(" + U_TEXTURE + ", _rays_texcoord);\n"
123
+ " gl_FragColor = " + V_COLOR + " * _rays_color;\n"
140
124
  "}\n");
141
125
  }
142
126
 
@@ -151,16 +135,16 @@ namespace Rays
151
135
  "uniform sampler2D " + U_TEXTURE + ";\n"
152
136
  "void main ()\n"
153
137
  "{\n"
154
- " vec4 col__ = texture2D(" + U_TEXTURE + ", " + V_TEXCOORD + ".xy);\n"
138
+ " vec4 _rays_col = texture2D(" + U_TEXTURE + ", " + V_TEXCOORD + ".xy);\n"
155
139
  #if defined(OSX) || defined(IOS)
156
140
  // restore premultiplied rgb values
157
- " vec3 rgb__ = col__.a != 0.0 ? col__.rgb / col__.a : col__.rgb;\n"
158
- " gl_FragColor = " + V_COLOR + " * vec4(rgb__, col__.a);\n"
141
+ " vec3 _rays_rgb = _rays_col.a != 0.0 ? _rays_col.rgb / _rays_col.a : _rays_col.rgb;\n"
142
+ " gl_FragColor = " + V_COLOR + " * vec4(_rays_rgb, _rays_col.a);\n"
159
143
  #elif defined(WIN32)
160
- " float a__ = (col__.r + col__.g + col__.b) / 3.0;\n"
161
- " gl_FragColor = " + V_COLOR + " * vec4(1.0, 1.0, 1.0, a__);\n"
144
+ " float _rays_a = (_rays_col.r + _rays_col.g + _rays_col.b) / 3.0;\n"
145
+ " gl_FragColor = " + V_COLOR + " * vec4(1.0, 1.0, 1.0, _rays_a);\n"
162
146
  #else
163
- " gl_FragColor = " + V_COLOR + " * col__;\n"
147
+ " gl_FragColor = " + V_COLOR + " * _rays_col;\n"
164
148
  #endif
165
149
  "}\n");
166
150
  }
@@ -422,12 +406,12 @@ namespace Rays
422
406
  "uniform mat4 " + U_TEXCOORD_MATRIX + ";\n"
423
407
  "void main ()\n"
424
408
  "{\n"
425
- " vec4 pos__ = vec4(" + A_POSITION + ", 1.0);\n"
426
- " vec4 texcoord__ = vec4(" + A_TEXCOORD + ", 1.0);\n"
427
- " " + V_POSITION + " = pos__;\n"
428
- " " + V_TEXCOORD + " = " + U_TEXCOORD_MATRIX + " * texcoord__;\n"
409
+ " vec4 _rays_pos = vec4(" + A_POSITION + ", 1.0);\n"
410
+ " vec4 _rays_texcoord = vec4(" + A_TEXCOORD + ", 1.0);\n"
411
+ " " + V_POSITION + " = _rays_pos;\n"
412
+ " " + V_TEXCOORD + " = " + U_TEXCOORD_MATRIX + " * _rays_texcoord;\n"
429
413
  " " + V_COLOR + " = " + A_COLOR + ";\n"
430
- " gl_Position = " + U_POSITION_MATRIX + " * pos__;\n"
414
+ " gl_Position = " + U_POSITION_MATRIX + " * _rays_pos;\n"
431
415
  "}\n";
432
416
  }
433
417
 
@@ -1,6 +1,7 @@
1
1
  #include "shader_source.h"
2
2
 
3
3
 
4
+ #include <regex>
4
5
  #include "rays/exception.h"
5
6
  #include "rays/debug.h"
6
7
 
@@ -39,8 +40,11 @@ namespace Rays
39
40
  if (is_valid())
40
41
  invalid_state_error(__FILE__, __LINE__);
41
42
 
43
+ String buffer;
44
+ const char* src = add_headers(type_, source_, &buffer);
45
+
42
46
  id = glCreateShader(type_);
43
- glShaderSource(id, 1, &source_, NULL);
47
+ glShaderSource(id, 1, &src, NULL);
44
48
  glCompileShader(id);
45
49
 
46
50
  GLint status = GL_FALSE;
@@ -52,6 +56,32 @@ namespace Rays
52
56
  source = source_;
53
57
  }
54
58
 
59
+ const char* add_headers (GLenum type, const char* source, String* buffer)
60
+ {
61
+ #ifdef IOS
62
+ if (type == GL_FRAGMENT_SHADER)
63
+ {
64
+ static const std::regex PRECISION(R"(^\s*precision\s+\w+p\s+float\s*;)");
65
+ if (!std::regex_search(source, PRECISION))
66
+ {
67
+ static const String PRECISION_HEADER = "precision highp float;\n";
68
+ *buffer = PRECISION_HEADER + source;
69
+ source = buffer->c_str();
70
+ }
71
+ }
72
+ #endif
73
+
74
+ static const std::regex VERSION(R"(^\s*#\s*version\s+\d+)");
75
+ if (!std::regex_search(source, VERSION))
76
+ {
77
+ static const String VERSION_HEADER = "#version 120\n";
78
+ *buffer = VERSION_HEADER + source;
79
+ source = buffer->c_str();
80
+ }
81
+
82
+ return source;
83
+ }
84
+
55
85
  String get_compile_log () const
56
86
  {
57
87
  GLsizei len = 0;
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rays
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - xordog
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-01-12 00:00:00.000000000 Z
11
+ date: 2025-01-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: xot
@@ -16,28 +16,40 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.3.1
19
+ version: 0.3.3
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.3.3
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - "~>"
25
28
  - !ruby/object:Gem::Version
26
- version: 0.3.1
29
+ version: 0.3.3
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 0.3.3
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: rucy
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
37
  - - "~>"
32
38
  - !ruby/object:Gem::Version
33
- version: 0.3.1
39
+ version: 0.3.3
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 0.3.3
34
43
  type: :runtime
35
44
  prerelease: false
36
45
  version_requirements: !ruby/object:Gem::Requirement
37
46
  requirements:
38
47
  - - "~>"
39
48
  - !ruby/object:Gem::Version
40
- version: 0.3.1
49
+ version: 0.3.3
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 0.3.3
41
53
  description: This library helps you to develop graphics application with OpenGL.
42
54
  email: xordog@gmail.com
43
55
  executables: []