rays 0.3.2 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 47cd1902082249b45167251a81932376ab40d2026963bb9161ed41a8036701b4
4
- data.tar.gz: 0a455ed272895e558e0adebffe42dfd539192942d9a3e7658ba49c6b8feef331
3
+ metadata.gz: 269385a45e74eaf01c182cbc322b720d22d34b5c7e0642918bd7f6bed05839bc
4
+ data.tar.gz: 52a94c5e763dbc4a4453ea1c119ea49933c8e6940c5e3a2455c935bbacfd64b8
5
5
  SHA512:
6
- metadata.gz: ca5b45d58945bcfce469f1f01fc31073bf7ea548fab008493da1d254833cb49cf4dd3d038f8d67ae8ea55803ba8627a0dd8b6b7b252751b3831b76d27b499fe8
7
- data.tar.gz: 14f66b8b7ca66c4a2d7fdaac16d45930fc345c58abc529656c59167534e17ca4ac1a7fd330c5ff241d9743b01da8c1b11b6ca6c354bcca73614656c3d8f426e3
6
+ metadata.gz: '01789a502f4c6fd31c76ea275f2f73ee2afe60d254e9efdf340b1a443216a3c310e3620606c170c7c55b470310f4c8b8550af1ead0f658fd589407ef6e1e8ffd'
7
+ data.tar.gz: 24be83763d29af1b5e10ead9b2963eb53468320d721ddfd632e786071851abf7fda46db14eab5458569aad60d006f9d62b242d9f93f069d7c586036c83b26bf2
@@ -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);
data/ChangeLog.md CHANGED
@@ -1,6 +1,14 @@
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
+
4
12
  ## [v0.3.2] - 2025-01-14
5
13
 
6
14
  - Update workflow files
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.2
1
+ 0.3.3
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_dependency 'xot', '~> 0.3.2', '>= 0.3.2'
29
- s.add_dependency 'rucy', '~> 0.3.2', '>= 0.3.2'
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.2
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-13 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,40 +16,40 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.3.2
19
+ version: 0.3.3
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 0.3.2
22
+ version: 0.3.3
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: 0.3.2
29
+ version: 0.3.3
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 0.3.2
32
+ version: 0.3.3
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: rucy
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: 0.3.2
39
+ version: 0.3.3
40
40
  - - ">="
41
41
  - !ruby/object:Gem::Version
42
- version: 0.3.2
42
+ version: 0.3.3
43
43
  type: :runtime
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
46
46
  requirements:
47
47
  - - "~>"
48
48
  - !ruby/object:Gem::Version
49
- version: 0.3.2
49
+ version: 0.3.3
50
50
  - - ">="
51
51
  - !ruby/object:Gem::Version
52
- version: 0.3.2
52
+ version: 0.3.3
53
53
  description: This library helps you to develop graphics application with OpenGL.
54
54
  email: xordog@gmail.com
55
55
  executables: []