ruby_rpg 0.1.2 → 0.1.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 +4 -4
- data/ext/gl_native/gl_native.c +7 -0
- data/lib/engine/debug.rb +21 -0
- data/lib/engine/gl.rb +5 -0
- data/lib/engine/rendering/debug_draw.rb +135 -0
- data/lib/engine/rendering/render_pipeline.rb +4 -0
- data/lib/engine/shaders/debug_composite_frag.glsl +38 -0
- data/lib/engine/shaders/debug_line_frag.glsl +10 -0
- data/lib/engine/shaders/debug_line_vertex.glsl +14 -0
- data/lib/ruby_rpg.rb +2 -0
- metadata +6 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2af1c7ed1b41fa5eaabfdf70e7b3ba0edb82c2af7bf03f5c376e23d8ed16efd1
|
|
4
|
+
data.tar.gz: fb36bef8b832479b05401c0eb90522bd255ee40d8ad6357caf75bf40e685322a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b7976e4dae17174f3483a0ecd4da0fb9ad49a40943d2ad54a31381be28ced45d39c58f5683468f115c37a40d5762603a78121342a44dd16e6b56f87508b6ec94
|
|
7
|
+
data.tar.gz: aec55a9871b095a867397b9fe6d78ea0ecf21064c2bc41ec36841818ead2890334ee7faf327942370331f2213c7fb96862898b965e1abfe13cb04045e9a2338e
|
data/ext/gl_native/gl_native.c
CHANGED
|
@@ -224,6 +224,12 @@ static VALUE rb_gl_depth_func(VALUE self, VALUE func) {
|
|
|
224
224
|
return Qnil;
|
|
225
225
|
}
|
|
226
226
|
|
|
227
|
+
/* LineWidth(width) */
|
|
228
|
+
static VALUE rb_gl_line_width(VALUE self, VALUE width) {
|
|
229
|
+
glLineWidth((GLfloat)NUM2DBL(width));
|
|
230
|
+
return Qnil;
|
|
231
|
+
}
|
|
232
|
+
|
|
227
233
|
/* DrawBuffer(mode) */
|
|
228
234
|
static VALUE rb_gl_draw_buffer(VALUE self, VALUE mode) {
|
|
229
235
|
glDrawBuffer((GLenum)NUM2INT(mode));
|
|
@@ -521,6 +527,7 @@ void Init_gl_native(void) {
|
|
|
521
527
|
rb_define_module_function(mGLNative, "create_shader", rb_gl_create_shader, 1);
|
|
522
528
|
rb_define_module_function(mGLNative, "cull_face", rb_gl_cull_face, 1);
|
|
523
529
|
rb_define_module_function(mGLNative, "depth_func", rb_gl_depth_func, 1);
|
|
530
|
+
rb_define_module_function(mGLNative, "line_width", rb_gl_line_width, 1);
|
|
524
531
|
rb_define_module_function(mGLNative, "draw_buffer", rb_gl_draw_buffer, 1);
|
|
525
532
|
rb_define_module_function(mGLNative, "draw_buffers", rb_gl_draw_buffers, 2);
|
|
526
533
|
rb_define_module_function(mGLNative, "enable_vertex_attrib_array", rb_gl_enable_vertex_attrib_array, 1);
|
data/lib/engine/debug.rb
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Engine
|
|
4
|
+
module Debug
|
|
5
|
+
@lines = []
|
|
6
|
+
|
|
7
|
+
class << self
|
|
8
|
+
def line(from, to, color: [1, 1, 1])
|
|
9
|
+
@lines << { from: from, to: to, color: color }
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def lines
|
|
13
|
+
@lines
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def clear
|
|
17
|
+
@lines.clear
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
data/lib/engine/gl.rb
CHANGED
|
@@ -232,6 +232,10 @@ module Engine
|
|
|
232
232
|
GLNative.get_uniform_location(program, name)
|
|
233
233
|
end
|
|
234
234
|
|
|
235
|
+
def self.LineWidth(width)
|
|
236
|
+
GLNative.line_width(width)
|
|
237
|
+
end
|
|
238
|
+
|
|
235
239
|
def self.LinkProgram(program)
|
|
236
240
|
GLNative.link_program(program)
|
|
237
241
|
end
|
|
@@ -360,6 +364,7 @@ module Engine
|
|
|
360
364
|
KEEP = 0x1E00
|
|
361
365
|
LESS = 0x0201
|
|
362
366
|
LINEAR = 0x2601
|
|
367
|
+
LINES = 0x0001
|
|
363
368
|
LINK_STATUS = 0x8B82
|
|
364
369
|
NEAREST = 0x2600
|
|
365
370
|
NONE = 0
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Rendering
|
|
4
|
+
module DebugDraw
|
|
5
|
+
SCALE_FACTOR = 3 # Render at 1/3 resolution for thicker lines
|
|
6
|
+
|
|
7
|
+
class << self
|
|
8
|
+
def draw(target_framebuffer)
|
|
9
|
+
lines = Engine::Debug.lines
|
|
10
|
+
return if lines.empty?
|
|
11
|
+
|
|
12
|
+
update_render_texture_size
|
|
13
|
+
|
|
14
|
+
# Draw lines to low-res texture
|
|
15
|
+
render_texture.bind
|
|
16
|
+
Engine::GL.ClearColor(0.0, 0.0, 0.0, 0.0)
|
|
17
|
+
Engine::GL.Clear(Engine::GL::COLOR_BUFFER_BIT)
|
|
18
|
+
Engine::GL.Disable(Engine::GL::DEPTH_TEST)
|
|
19
|
+
|
|
20
|
+
line_shader.use
|
|
21
|
+
line_shader.set_mat4('camera', camera_matrix)
|
|
22
|
+
|
|
23
|
+
update_vertex_data(lines)
|
|
24
|
+
draw_lines(lines.size * 2)
|
|
25
|
+
|
|
26
|
+
# Composite onto main framebuffer
|
|
27
|
+
Engine::GL.BindFramebuffer(Engine::GL::FRAMEBUFFER, target_framebuffer)
|
|
28
|
+
Engine::GL.Viewport(0, 0, Engine::Window.framebuffer_width, Engine::Window.framebuffer_height)
|
|
29
|
+
Engine::GL.Enable(Engine::GL::BLEND)
|
|
30
|
+
|
|
31
|
+
composite_material.set_runtime_texture('debugTexture', render_texture.color_texture)
|
|
32
|
+
composite_material.set_vec2('texelSize', [1.0 / render_texture.width, 1.0 / render_texture.height])
|
|
33
|
+
screen_quad.draw_with_material(composite_material)
|
|
34
|
+
|
|
35
|
+
Engine::Debug.clear
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
private
|
|
39
|
+
|
|
40
|
+
def update_render_texture_size
|
|
41
|
+
width = Engine::Window.framebuffer_width / SCALE_FACTOR
|
|
42
|
+
height = Engine::Window.framebuffer_height / SCALE_FACTOR
|
|
43
|
+
width = [width, 1].max
|
|
44
|
+
height = [height, 1].max
|
|
45
|
+
|
|
46
|
+
if @render_texture.nil?
|
|
47
|
+
@render_texture = RenderTexture.new(width, height)
|
|
48
|
+
else
|
|
49
|
+
@render_texture.resize(width, height)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def render_texture
|
|
54
|
+
@render_texture
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def update_vertex_data(lines)
|
|
58
|
+
vertex_data = []
|
|
59
|
+
|
|
60
|
+
lines.each do |line|
|
|
61
|
+
vertex_data << line[:from][0] << line[:from][1] << line[:from][2]
|
|
62
|
+
vertex_data << line[:color][0] << line[:color][1] << line[:color][2]
|
|
63
|
+
|
|
64
|
+
vertex_data << line[:to][0] << line[:to][1] << line[:to][2]
|
|
65
|
+
vertex_data << line[:color][0] << line[:color][1] << line[:color][2]
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
Engine::GL.BindVertexArray(vao)
|
|
69
|
+
Engine::GL.BindBuffer(Engine::GL::ARRAY_BUFFER, vbo)
|
|
70
|
+
|
|
71
|
+
data = vertex_data.pack('f*')
|
|
72
|
+
Engine::GL.BufferData(Engine::GL::ARRAY_BUFFER, data.bytesize, data, Engine::GL::DYNAMIC_DRAW)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def draw_lines(vertex_count)
|
|
76
|
+
Engine::GL.BindVertexArray(vao)
|
|
77
|
+
Engine::GL.DrawArrays(Engine::GL::LINES, 0, vertex_count)
|
|
78
|
+
Engine::GL.BindVertexArray(0)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def camera_matrix
|
|
82
|
+
Engine::Camera.instance&.matrix || Matrix.identity(4)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def line_shader
|
|
86
|
+
@line_shader ||= Engine::Shader.for('debug_line_vertex.glsl', 'debug_line_frag.glsl', source: :engine)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def composite_shader
|
|
90
|
+
@composite_shader ||= Engine::Shader.for('fullscreen_vertex.glsl', 'debug_composite_frag.glsl', source: :engine)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def composite_material
|
|
94
|
+
@composite_material ||= Engine::Material.create(shader: composite_shader)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def screen_quad
|
|
98
|
+
@screen_quad ||= ScreenQuad.new
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def vao
|
|
102
|
+
setup_buffers unless @vao
|
|
103
|
+
@vao
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def vbo
|
|
107
|
+
setup_buffers unless @vbo
|
|
108
|
+
@vbo
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def setup_buffers
|
|
112
|
+
vao_buf = ' ' * 4
|
|
113
|
+
Engine::GL.GenVertexArrays(1, vao_buf)
|
|
114
|
+
@vao = vao_buf.unpack1('L')
|
|
115
|
+
|
|
116
|
+
vbo_buf = ' ' * 4
|
|
117
|
+
Engine::GL.GenBuffers(1, vbo_buf)
|
|
118
|
+
@vbo = vbo_buf.unpack1('L')
|
|
119
|
+
|
|
120
|
+
Engine::GL.BindVertexArray(@vao)
|
|
121
|
+
Engine::GL.BindBuffer(Engine::GL::ARRAY_BUFFER, @vbo)
|
|
122
|
+
|
|
123
|
+
stride = 6 * 4
|
|
124
|
+
|
|
125
|
+
Engine::GL.VertexAttribPointer(0, 3, Engine::GL::FLOAT, Engine::GL::FALSE, stride, 0)
|
|
126
|
+
Engine::GL.EnableVertexAttribArray(0)
|
|
127
|
+
|
|
128
|
+
Engine::GL.VertexAttribPointer(1, 3, Engine::GL::FLOAT, Engine::GL::FALSE, stride, 3 * 4)
|
|
129
|
+
Engine::GL.EnableVertexAttribArray(1)
|
|
130
|
+
|
|
131
|
+
Engine::GL.BindVertexArray(0)
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
end
|
|
@@ -30,6 +30,10 @@ module Rendering
|
|
|
30
30
|
|
|
31
31
|
current_texture = PostProcessingEffect.apply_all(render_texture_a, render_texture_b, screen_quad, normal_buffer, start_index: 1)
|
|
32
32
|
|
|
33
|
+
GpuTimer.measure(:debug) do
|
|
34
|
+
DebugDraw.draw(current_texture.framebuffer)
|
|
35
|
+
end
|
|
36
|
+
|
|
33
37
|
GpuTimer.measure(:ui) do
|
|
34
38
|
disable_depth_test
|
|
35
39
|
current_texture.bind
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#version 330 core
|
|
2
|
+
|
|
3
|
+
in vec2 TexCoords;
|
|
4
|
+
out vec4 FragColor;
|
|
5
|
+
|
|
6
|
+
uniform sampler2D debugTexture;
|
|
7
|
+
uniform vec2 texelSize; // 1.0 / textureSize
|
|
8
|
+
|
|
9
|
+
void main()
|
|
10
|
+
{
|
|
11
|
+
// Sample center and 8 neighbors for dilation
|
|
12
|
+
vec4 center = texture(debugTexture, TexCoords);
|
|
13
|
+
|
|
14
|
+
vec4 n = texture(debugTexture, TexCoords + vec2( 0.0, 1.0) * texelSize);
|
|
15
|
+
vec4 s = texture(debugTexture, TexCoords + vec2( 0.0, -1.0) * texelSize);
|
|
16
|
+
vec4 e = texture(debugTexture, TexCoords + vec2( 1.0, 0.0) * texelSize);
|
|
17
|
+
vec4 w = texture(debugTexture, TexCoords + vec2(-1.0, 0.0) * texelSize);
|
|
18
|
+
vec4 ne = texture(debugTexture, TexCoords + vec2( 1.0, 1.0) * texelSize);
|
|
19
|
+
vec4 nw = texture(debugTexture, TexCoords + vec2(-1.0, 1.0) * texelSize);
|
|
20
|
+
vec4 se = texture(debugTexture, TexCoords + vec2( 1.0, -1.0) * texelSize);
|
|
21
|
+
vec4 sw = texture(debugTexture, TexCoords + vec2(-1.0, -1.0) * texelSize);
|
|
22
|
+
|
|
23
|
+
// Weighted dilation - center has full weight, neighbors contribute
|
|
24
|
+
float cardinalWeight = 0.7;
|
|
25
|
+
float diagonalWeight = 0.5;
|
|
26
|
+
|
|
27
|
+
vec4 dilated = center;
|
|
28
|
+
dilated = max(dilated, n * cardinalWeight);
|
|
29
|
+
dilated = max(dilated, s * cardinalWeight);
|
|
30
|
+
dilated = max(dilated, e * cardinalWeight);
|
|
31
|
+
dilated = max(dilated, w * cardinalWeight);
|
|
32
|
+
dilated = max(dilated, ne * diagonalWeight);
|
|
33
|
+
dilated = max(dilated, nw * diagonalWeight);
|
|
34
|
+
dilated = max(dilated, se * diagonalWeight);
|
|
35
|
+
dilated = max(dilated, sw * diagonalWeight);
|
|
36
|
+
|
|
37
|
+
FragColor = dilated;
|
|
38
|
+
}
|
data/lib/ruby_rpg.rb
CHANGED
|
@@ -20,6 +20,7 @@ require_relative 'engine/serialization/graph_serializer'
|
|
|
20
20
|
require_relative 'engine/serialization/yaml_persistence'
|
|
21
21
|
require_relative 'engine/matrix_helpers'
|
|
22
22
|
require_relative "engine/debugging"
|
|
23
|
+
require_relative "engine/debug"
|
|
23
24
|
require_relative 'engine/rendering/render_texture'
|
|
24
25
|
require_relative 'engine/rendering/shadow_map_array'
|
|
25
26
|
require_relative 'engine/rendering/cubemap_shadow_map_array'
|
|
@@ -36,6 +37,7 @@ require_relative 'engine/rendering/post_processing/ssao_effect'
|
|
|
36
37
|
require_relative 'engine/rendering/skybox_cubemap'
|
|
37
38
|
require_relative 'engine/rendering/skybox_renderer'
|
|
38
39
|
require_relative 'engine/rendering/gpu_timer'
|
|
40
|
+
require_relative 'engine/rendering/debug_draw'
|
|
39
41
|
require_relative 'engine/rendering/render_pipeline'
|
|
40
42
|
require_relative 'engine/rendering/ui/stencil_manager'
|
|
41
43
|
require_relative 'engine/rendering/instance_renderer'
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ruby_rpg
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Max Hatfull
|
|
@@ -179,6 +179,7 @@ files:
|
|
|
179
179
|
- lib/engine/compute_shader.rb
|
|
180
180
|
- lib/engine/compute_texture.rb
|
|
181
181
|
- lib/engine/cursor.rb
|
|
182
|
+
- lib/engine/debug.rb
|
|
182
183
|
- lib/engine/debugging.rb
|
|
183
184
|
- lib/engine/engine.rb
|
|
184
185
|
- lib/engine/font.rb
|
|
@@ -207,6 +208,7 @@ files:
|
|
|
207
208
|
- lib/engine/polygon_mesh.rb
|
|
208
209
|
- lib/engine/quaternion.rb
|
|
209
210
|
- lib/engine/rendering/cubemap_shadow_map_array.rb
|
|
211
|
+
- lib/engine/rendering/debug_draw.rb
|
|
210
212
|
- lib/engine/rendering/gpu_timer.rb
|
|
211
213
|
- lib/engine/rendering/instance_renderer.rb
|
|
212
214
|
- lib/engine/rendering/post_processing/bloom_effect.rb
|
|
@@ -233,6 +235,9 @@ files:
|
|
|
233
235
|
- lib/engine/shader.rb
|
|
234
236
|
- lib/engine/shaders/colour_frag.glsl
|
|
235
237
|
- lib/engine/shaders/colour_vertex.glsl
|
|
238
|
+
- lib/engine/shaders/debug_composite_frag.glsl
|
|
239
|
+
- lib/engine/shaders/debug_line_frag.glsl
|
|
240
|
+
- lib/engine/shaders/debug_line_vertex.glsl
|
|
236
241
|
- lib/engine/shaders/fullscreen_frag.glsl
|
|
237
242
|
- lib/engine/shaders/fullscreen_vertex.glsl
|
|
238
243
|
- lib/engine/shaders/instanced_sprite_frag.glsl
|