rays 0.3.2 → 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: 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: []