imgui-bindings 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,200 +1,200 @@
1
- require 'ffi'
2
- require 'sdl2'
3
- require_relative 'imgui'
4
-
5
- module ImGui
6
-
7
- class ImGui_ImplSDLRenderer_Data < FFI::Struct
8
- layout(
9
- :SDLRenderer, :pointer,
10
- :FontTexture, :pointer
11
- )
12
- end
13
-
14
- def self.ImGui_ImplSDLRenderer_GetBackendData()
15
- if ImGui::GetCurrentContext() != nil
16
- io = ImGuiIO.new(ImGui::GetIO())
17
- instance = ImGui_ImplSDLRenderer_Data.new(io[:BackendRendererUserData])
18
- return instance
19
- else
20
- return nil
21
- end
22
- end
23
-
24
- @@g_BackendRendererName = FFI::MemoryPointer.from_string("imgui_impl_sdlrenderer")
25
- @@g_BackendRendererUserData = nil
26
-
27
- def self.ImplSDLRenderer_Init(renderer)
28
- io = ImGuiIO.new(ImGui::GetIO())
29
-
30
- # Setup backend capabilities flags
31
-
32
- io[:BackendRendererName] = @@g_BackendRendererName
33
-
34
- @@g_BackendRendererUserData = ImGui_ImplSDLRenderer_Data.new
35
- @@g_BackendRendererUserData[:SDLRenderer] = renderer
36
- @@g_BackendRendererUserData[:FontTexture] = nil
37
- io[:BackendRendererUserData] = @@g_BackendRendererUserData
38
-
39
- io[:BackendFlags] |= ImGuiBackendFlags_RendererHasVtxOffset # We can honor the ImDrawCmd::VtxOffset field, allowing for large meshes.
40
-
41
- return true
42
- end
43
-
44
- def self.ImplSDLRenderer_Shutdown()
45
- ImplSDLRenderer_DestroyDeviceObjects()
46
- io = ImGuiIO.new(ImGui::GetIO())
47
- io[:BackendRendererName] = nil
48
- io[:BackendRendererUserData] = nil
49
- @@g_BackendRendererUserData = nil
50
- end
51
-
52
- # [Internal]
53
- def self.ImplSDLRenderer_SetupRenderState()
54
- bd = ImGui_ImplSDLRenderer_GetBackendData()
55
-
56
- # Clear out any viewports and cliprect set by the user
57
- # FIXME: Technically speaking there are lots of other things we could backup/setup/restore during our render process.
58
- SDL.RenderSetViewport(bd[:SDLRenderer], nil)
59
- SDL.RenderSetClipRect(bd[:SDLRenderer], nil)
60
- end
61
-
62
- def self.ImplSDLRenderer_NewFrame()
63
- bd = ImGui_ImplSDLRenderer_GetBackendData()
64
- ImGui::ImplSDLRenderer_CreateDeviceObjects() if bd[:FontTexture] == nil
65
- end
66
-
67
- def self.ImplSDLRenderer_RenderDrawData(draw_data_raw)
68
- draw_data = ImDrawData.new(draw_data_raw)
69
- bd = ImGui_ImplSDLRenderer_GetBackendData()
70
-
71
- # If there's a scale factor set by the user, use that instead
72
- # If the user has specified a scale factor to SDL_Renderer already via SDL_RenderSetScale(), SDL will scale whatever we pass
73
- # to SDL_RenderGeometryRaw() by that scale factor. In that case we don't want to be also scaling it ourselves here.
74
- rsx = FFI::MemoryPointer.new :float
75
- rsy = FFI::MemoryPointer.new :float
76
- SDL.RenderGetScale(bd[:SDLRenderer], rsx, rsy)
77
- render_scale = ImVec2.create(0, 0)
78
- render_scale[:x] = (rsx.read_float() == 1.0) ? draw_data[:FramebufferScale][:x] : 1.0
79
- render_scale[:y] = (rsy.read_float() == 1.0) ? draw_data[:FramebufferScale][:y] : 1.0
80
-
81
- # Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates)
82
- fb_width = (draw_data[:DisplaySize][:x] * render_scale[:x]).to_i
83
- fb_height = (draw_data[:DisplaySize][:y] * render_scale[:y]).to_i
84
- return if fb_width == 0 || fb_height == 0
85
-
86
- # Backup SDL_Renderer state that will be modified to restore it afterwards
87
- oldViewport = SDL::Rect.new
88
- oldClipEnabled = FFI::MemoryPointer.new :bool
89
- oldClipRect = SDL::Rect.new
90
-
91
- oldClipEnabled = (SDL.RenderIsClipEnabled(bd[:SDLRenderer]) == SDL::TRUE)
92
- SDL.RenderGetViewport(bd[:SDLRenderer], oldViewport)
93
- SDL.RenderGetClipRect(bd[:SDLRenderer], oldClipRect)
94
-
95
- # Will project scissor/clipping rectangles into framebuffer space
96
- clip_off = draw_data[:DisplayPos] # (0,0) unless using multi-viewports
97
- clip_scale = render_scale
98
-
99
- # Render command lists
100
- ImplSDLRenderer_SetupRenderState()
101
- draw_data[:CmdListsCount].times do |n|
102
- cmd_list = ImDrawList.new((draw_data[:CmdLists].pointer + FFI.type_size(:pointer) * n).read_pointer)
103
- vtx_buffer = cmd_list[:VtxBuffer][:Data] # const ImDrawVert*
104
- idx_buffer = cmd_list[:IdxBuffer][:Data] # const ImDrawIdx*
105
-
106
- cmd_list[:CmdBuffer][:Size].times do |cmd_i|
107
- pcmd = ImDrawCmd.new(cmd_list[:CmdBuffer][:Data] + ImDrawCmd.size * cmd_i) # const ImDrawCmd*
108
- if pcmd[:UserCallback] != nil
109
- # [TODO] Handle user callback (Ref.: https://github.com/ffi/ffi/wiki/Callbacks )
110
-
111
- # User callback, registered via ImDrawList::AddCallback()
112
- # (ImDrawCallback_ResetRenderState is a special callback value used by the user to request the renderer to reset render state.)
113
- # if pcmd[:UserCallback] == :ImDrawCallback_ResetRenderState
114
- ImGui_ImplSDLRenderer_SetupRenderState()
115
- # else
116
- # pcmd[:UserCallback](cmd_list, pcmd)
117
- # end
118
- else
119
- clip_min = ImVec2.create((pcmd[:ClipRect][:x] - clip_off[:x]) * clip_scale[:x], (pcmd[:ClipRect][:y] - clip_off[:y]) * clip_scale[:y])
120
- clip_max = ImVec2.create((pcmd[:ClipRect][:z] - clip_off[:x]) * clip_scale[:x], (pcmd[:ClipRect][:w] - clip_off[:y]) * clip_scale[:y])
121
-
122
- clip_min[:x] = 0.0 if clip_min[:x] < 0.0
123
- clip_min[:y] = 0.0 if clip_min[:y] < 0.0
124
- clip_max[:x] = fb_width.to_f if clip_max[:x] > fb_width
125
- clip_max[:y] = fb_height.to_f if clip_max[:y] > fb_height
126
- next if (clip_max[:x] <= clip_min[:x] || clip_max[:y] <= clip_min[:y])
127
-
128
- r = SDL::Rect.new
129
- r[:x] = clip_min[:x].to_i
130
- r[:y] = clip_min[:y].to_i
131
- r[:w] = (clip_max[:x] - clip_min[:x]).to_i
132
- r[:h] = (clip_max[:y] - clip_min[:y]).to_i
133
-
134
- SDL.RenderSetClipRect(bd[:SDLRenderer], r.to_ptr)
135
-
136
- xy = vtx_buffer + (pcmd[:VtxOffset] + ImDrawVert.offset_of(:pos))
137
- uv = vtx_buffer + (pcmd[:VtxOffset] + ImDrawVert.offset_of(:uv))
138
- color = vtx_buffer + (pcmd[:VtxOffset] + ImDrawVert.offset_of(:col))
139
-
140
- SDL.RenderGeometryRaw(bd[:SDLRenderer], pcmd[:TextureId],
141
- xy, ImDrawVert.size,
142
- color, ImDrawVert.size,
143
- uv, ImDrawVert.size,
144
- cmd_list[:VtxBuffer][:Size] - pcmd[:VtxOffset],
145
- idx_buffer + FFI.type_size(:ImDrawIdx) * pcmd[:IdxOffset], pcmd[:ElemCount], FFI.type_size(:ImDrawIdx)) # FFI.type_size(:ImDrawIdx) == FFI::Type::UINT16.size
146
-
147
- # Restore modified SDL_Renderer state
148
- SDL.RenderSetViewport(bd[:SDLRenderer], oldViewport)
149
- SDL.RenderSetClipRect(bd[:SDLRenderer], oldClipEnabled ? oldClipRect : nil)
150
- end
151
- end
152
- end
153
- end
154
-
155
- # Called by Init/NewFrame/Shutdown
156
- def self.ImplSDLRenderer_CreateFontsTexture()
157
- io = ImGuiIO.new(ImGui::GetIO())
158
- bd = ImGui_ImplSDLRenderer_GetBackendData()
159
-
160
- # Build texture atlas
161
- pixels = FFI::MemoryPointer.new :pointer
162
- width = FFI::MemoryPointer.new :int
163
- height = FFI::MemoryPointer.new :int
164
- io[:Fonts].GetTexDataAsRGBA32(pixels, width, height, nil) # Load as RGBA 32-bits (75% of the memory is wasted, but default font is so small) because it is more likely to be compatible with user's existing shaders. If your ImTextureId represent a higher-level concept than just a GL texture id, consider calling GetTexDataAsAlpha8() instead to save on GPU memory.
165
-
166
- # Upload texture to graphics system
167
- bd[:FontTexture] = SDL.CreateTexture(bd[:SDLRenderer], SDL::PIXELFORMAT_ABGR8888, SDL::TEXTUREACCESS_STATIC, width.read_int, height.read_int)
168
- if bd[:FontTexture] == nil
169
- SDL.Log("error creating texture")
170
- return false
171
- end
172
-
173
- SDL.UpdateTexture(bd[:FontTexture], nil, pixels.read_pointer, 4 * width.read_int)
174
- SDL.SetTextureBlendMode(bd[:FontTexture], SDL::BLENDMODE_BLEND)
175
-
176
- # Store our identifier
177
- io[:Fonts].SetTexID(bd[:FontTexture])
178
-
179
- return true
180
- end
181
-
182
- def self.ImplSDLRenderer_DestroyFontsTexture()
183
- io = ImGuiIO.new(ImGui::GetIO())
184
- bd = ImGui_ImplSDLRenderer_GetBackendData()
185
- if bd[:FontTexture] != nil
186
- io[:Fonts].SetTexID(nil)
187
- SDL.DestroyTexture(bd[:FontTexture])
188
- bd[:FontTexture] = nil
189
- end
190
- end
191
-
192
- def self.ImplSDLRenderer_CreateDeviceObjects()
193
- return ImGui::ImplSDLRenderer_CreateFontsTexture()
194
- end
195
-
196
- def self.ImplSDLRenderer_DestroyDeviceObjects()
197
- ImGui::ImplSDLRenderer_DestroyFontsTexture()
198
- end
199
-
200
- end
1
+ require 'ffi'
2
+ require 'sdl2'
3
+ require_relative 'imgui'
4
+
5
+ module ImGui
6
+
7
+ class ImGui_ImplSDLRenderer_Data < FFI::Struct
8
+ layout(
9
+ :SDLRenderer, :pointer,
10
+ :FontTexture, :pointer
11
+ )
12
+ end
13
+
14
+ def self.ImGui_ImplSDLRenderer_GetBackendData()
15
+ if ImGui::GetCurrentContext() != nil
16
+ io = ImGuiIO.new(ImGui::GetIO())
17
+ instance = ImGui_ImplSDLRenderer_Data.new(io[:BackendRendererUserData])
18
+ return instance
19
+ else
20
+ return nil
21
+ end
22
+ end
23
+
24
+ @@g_BackendRendererName = FFI::MemoryPointer.from_string("imgui_impl_sdlrenderer")
25
+ @@g_BackendRendererUserData = nil
26
+
27
+ def self.ImplSDLRenderer_Init(renderer)
28
+ io = ImGuiIO.new(ImGui::GetIO())
29
+
30
+ # Setup backend capabilities flags
31
+
32
+ io[:BackendRendererName] = @@g_BackendRendererName
33
+
34
+ @@g_BackendRendererUserData = ImGui_ImplSDLRenderer_Data.new
35
+ @@g_BackendRendererUserData[:SDLRenderer] = renderer
36
+ @@g_BackendRendererUserData[:FontTexture] = nil
37
+ io[:BackendRendererUserData] = @@g_BackendRendererUserData
38
+
39
+ io[:BackendFlags] |= ImGuiBackendFlags_RendererHasVtxOffset # We can honor the ImDrawCmd::VtxOffset field, allowing for large meshes.
40
+
41
+ return true
42
+ end
43
+
44
+ def self.ImplSDLRenderer_Shutdown()
45
+ ImplSDLRenderer_DestroyDeviceObjects()
46
+ io = ImGuiIO.new(ImGui::GetIO())
47
+ io[:BackendRendererName] = nil
48
+ io[:BackendRendererUserData] = nil
49
+ @@g_BackendRendererUserData = nil
50
+ end
51
+
52
+ # [Internal]
53
+ def self.ImplSDLRenderer_SetupRenderState()
54
+ bd = ImGui_ImplSDLRenderer_GetBackendData()
55
+
56
+ # Clear out any viewports and cliprect set by the user
57
+ # FIXME: Technically speaking there are lots of other things we could backup/setup/restore during our render process.
58
+ SDL.RenderSetViewport(bd[:SDLRenderer], nil)
59
+ SDL.RenderSetClipRect(bd[:SDLRenderer], nil)
60
+ end
61
+
62
+ def self.ImplSDLRenderer_NewFrame()
63
+ bd = ImGui_ImplSDLRenderer_GetBackendData()
64
+ ImGui::ImplSDLRenderer_CreateDeviceObjects() if bd[:FontTexture] == nil
65
+ end
66
+
67
+ def self.ImplSDLRenderer_RenderDrawData(draw_data_raw)
68
+ draw_data = ImDrawData.new(draw_data_raw)
69
+ bd = ImGui_ImplSDLRenderer_GetBackendData()
70
+
71
+ # If there's a scale factor set by the user, use that instead
72
+ # If the user has specified a scale factor to SDL_Renderer already via SDL_RenderSetScale(), SDL will scale whatever we pass
73
+ # to SDL_RenderGeometryRaw() by that scale factor. In that case we don't want to be also scaling it ourselves here.
74
+ rsx = FFI::MemoryPointer.new :float
75
+ rsy = FFI::MemoryPointer.new :float
76
+ SDL.RenderGetScale(bd[:SDLRenderer], rsx, rsy)
77
+ render_scale = ImVec2.create(0, 0)
78
+ render_scale[:x] = (rsx.read_float() == 1.0) ? draw_data[:FramebufferScale][:x] : 1.0
79
+ render_scale[:y] = (rsy.read_float() == 1.0) ? draw_data[:FramebufferScale][:y] : 1.0
80
+
81
+ # Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates)
82
+ fb_width = (draw_data[:DisplaySize][:x] * render_scale[:x]).to_i
83
+ fb_height = (draw_data[:DisplaySize][:y] * render_scale[:y]).to_i
84
+ return if fb_width == 0 || fb_height == 0
85
+
86
+ # Backup SDL_Renderer state that will be modified to restore it afterwards
87
+ oldViewport = SDL::Rect.new
88
+ oldClipEnabled = FFI::MemoryPointer.new :bool
89
+ oldClipRect = SDL::Rect.new
90
+
91
+ oldClipEnabled = (SDL.RenderIsClipEnabled(bd[:SDLRenderer]) == SDL::TRUE)
92
+ SDL.RenderGetViewport(bd[:SDLRenderer], oldViewport)
93
+ SDL.RenderGetClipRect(bd[:SDLRenderer], oldClipRect)
94
+
95
+ # Will project scissor/clipping rectangles into framebuffer space
96
+ clip_off = draw_data[:DisplayPos] # (0,0) unless using multi-viewports
97
+ clip_scale = render_scale
98
+
99
+ # Render command lists
100
+ ImplSDLRenderer_SetupRenderState()
101
+ draw_data[:CmdListsCount].times do |n|
102
+ cmd_list = ImDrawList.new((draw_data[:CmdLists].pointer + FFI.type_size(:pointer) * n).read_pointer)
103
+ vtx_buffer = cmd_list[:VtxBuffer][:Data] # const ImDrawVert*
104
+ idx_buffer = cmd_list[:IdxBuffer][:Data] # const ImDrawIdx*
105
+
106
+ cmd_list[:CmdBuffer][:Size].times do |cmd_i|
107
+ pcmd = ImDrawCmd.new(cmd_list[:CmdBuffer][:Data] + ImDrawCmd.size * cmd_i) # const ImDrawCmd*
108
+ if pcmd[:UserCallback] != nil
109
+ # [TODO] Handle user callback (Ref.: https://github.com/ffi/ffi/wiki/Callbacks )
110
+
111
+ # User callback, registered via ImDrawList::AddCallback()
112
+ # (ImDrawCallback_ResetRenderState is a special callback value used by the user to request the renderer to reset render state.)
113
+ # if pcmd[:UserCallback] == :ImDrawCallback_ResetRenderState
114
+ ImGui_ImplSDLRenderer_SetupRenderState()
115
+ # else
116
+ # pcmd[:UserCallback](cmd_list, pcmd)
117
+ # end
118
+ else
119
+ clip_min = ImVec2.create((pcmd[:ClipRect][:x] - clip_off[:x]) * clip_scale[:x], (pcmd[:ClipRect][:y] - clip_off[:y]) * clip_scale[:y])
120
+ clip_max = ImVec2.create((pcmd[:ClipRect][:z] - clip_off[:x]) * clip_scale[:x], (pcmd[:ClipRect][:w] - clip_off[:y]) * clip_scale[:y])
121
+
122
+ clip_min[:x] = 0.0 if clip_min[:x] < 0.0
123
+ clip_min[:y] = 0.0 if clip_min[:y] < 0.0
124
+ clip_max[:x] = fb_width.to_f if clip_max[:x] > fb_width
125
+ clip_max[:y] = fb_height.to_f if clip_max[:y] > fb_height
126
+ next if (clip_max[:x] <= clip_min[:x] || clip_max[:y] <= clip_min[:y])
127
+
128
+ r = SDL::Rect.new
129
+ r[:x] = clip_min[:x].to_i
130
+ r[:y] = clip_min[:y].to_i
131
+ r[:w] = (clip_max[:x] - clip_min[:x]).to_i
132
+ r[:h] = (clip_max[:y] - clip_min[:y]).to_i
133
+
134
+ SDL.RenderSetClipRect(bd[:SDLRenderer], r.to_ptr)
135
+
136
+ xy = vtx_buffer + (pcmd[:VtxOffset] + ImDrawVert.offset_of(:pos))
137
+ uv = vtx_buffer + (pcmd[:VtxOffset] + ImDrawVert.offset_of(:uv))
138
+ color = vtx_buffer + (pcmd[:VtxOffset] + ImDrawVert.offset_of(:col))
139
+
140
+ SDL.RenderGeometryRaw(bd[:SDLRenderer], pcmd[:TextureId],
141
+ xy, ImDrawVert.size,
142
+ color, ImDrawVert.size,
143
+ uv, ImDrawVert.size,
144
+ cmd_list[:VtxBuffer][:Size] - pcmd[:VtxOffset],
145
+ idx_buffer + FFI.type_size(:ImDrawIdx) * pcmd[:IdxOffset], pcmd[:ElemCount], FFI.type_size(:ImDrawIdx)) # FFI.type_size(:ImDrawIdx) == FFI::Type::UINT16.size
146
+
147
+ # Restore modified SDL_Renderer state
148
+ SDL.RenderSetViewport(bd[:SDLRenderer], oldViewport)
149
+ SDL.RenderSetClipRect(bd[:SDLRenderer], oldClipEnabled ? oldClipRect : nil)
150
+ end
151
+ end
152
+ end
153
+ end
154
+
155
+ # Called by Init/NewFrame/Shutdown
156
+ def self.ImplSDLRenderer_CreateFontsTexture()
157
+ io = ImGuiIO.new(ImGui::GetIO())
158
+ bd = ImGui_ImplSDLRenderer_GetBackendData()
159
+
160
+ # Build texture atlas
161
+ pixels = FFI::MemoryPointer.new :pointer
162
+ width = FFI::MemoryPointer.new :int
163
+ height = FFI::MemoryPointer.new :int
164
+ io[:Fonts].GetTexDataAsRGBA32(pixels, width, height, nil) # Load as RGBA 32-bits (75% of the memory is wasted, but default font is so small) because it is more likely to be compatible with user's existing shaders. If your ImTextureId represent a higher-level concept than just a GL texture id, consider calling GetTexDataAsAlpha8() instead to save on GPU memory.
165
+
166
+ # Upload texture to graphics system
167
+ bd[:FontTexture] = SDL.CreateTexture(bd[:SDLRenderer], SDL::PIXELFORMAT_ABGR8888, SDL::TEXTUREACCESS_STATIC, width.read_int, height.read_int)
168
+ if bd[:FontTexture] == nil
169
+ SDL.Log("error creating texture")
170
+ return false
171
+ end
172
+
173
+ SDL.UpdateTexture(bd[:FontTexture], nil, pixels.read_pointer, 4 * width.read_int)
174
+ SDL.SetTextureBlendMode(bd[:FontTexture], SDL::BLENDMODE_BLEND)
175
+
176
+ # Store our identifier
177
+ io[:Fonts].SetTexID(bd[:FontTexture])
178
+
179
+ return true
180
+ end
181
+
182
+ def self.ImplSDLRenderer_DestroyFontsTexture()
183
+ io = ImGuiIO.new(ImGui::GetIO())
184
+ bd = ImGui_ImplSDLRenderer_GetBackendData()
185
+ if bd[:FontTexture] != nil
186
+ io[:Fonts].SetTexID(nil)
187
+ SDL.DestroyTexture(bd[:FontTexture])
188
+ bd[:FontTexture] = nil
189
+ end
190
+ end
191
+
192
+ def self.ImplSDLRenderer_CreateDeviceObjects()
193
+ return ImGui::ImplSDLRenderer_CreateFontsTexture()
194
+ end
195
+
196
+ def self.ImplSDLRenderer_DestroyDeviceObjects()
197
+ ImGui::ImplSDLRenderer_DestroyFontsTexture()
198
+ end
199
+
200
+ end
@@ -1,49 +1,49 @@
1
- # imgui-bindings : Yet another ImGui wrapper for Ruby
2
- #
3
- # * https://github.com/vaiorabbit/ruby-imgui
4
-
5
- require 'ffi'
6
-
7
- module ImGui
8
-
9
- extend FFI::Library
10
-
11
- @@imgui_import_internal_done = false
12
-
13
- def self.import_internal_symbols(output_error = false)
14
-
15
- symbols = [
16
- :igFocusWindow,
17
- :igGetCurrentWindow,
18
- ]
19
-
20
- args = {
21
- :igFocusWindow => [:pointer],
22
- :igGetCurrentWindow => [],
23
- }
24
-
25
- retvals = {
26
- :igFocusWindow => :void,
27
- :igGetCurrentWindow => :pointer,
28
- }
29
-
30
- symbols.each do |sym|
31
- begin
32
- attach_function sym, args[sym], retvals[sym]
33
- rescue FFI::NotFoundError
34
- $stderr.puts("[Warning] Failed to import #{sym}.\n") if output_error
35
- end
36
- end
37
-
38
- @@imgui_import_internal_done = true
39
- end # self.import_internal_symbols
40
-
41
- def self.GetCurrentWindow()
42
- igGetCurrentWindow()
43
- end
44
-
45
- def self.FocusWindow(window)
46
- igFocusWindow(window)
47
- end
48
-
49
- end # module ImGui
1
+ # imgui-bindings : Yet another ImGui wrapper for Ruby
2
+ #
3
+ # * https://github.com/vaiorabbit/ruby-imgui
4
+
5
+ require 'ffi'
6
+
7
+ module ImGui
8
+
9
+ extend FFI::Library
10
+
11
+ @@imgui_import_internal_done = false
12
+
13
+ def self.import_internal_symbols(output_error = false)
14
+
15
+ symbols = [
16
+ :igFocusWindow,
17
+ :igGetCurrentWindow,
18
+ ]
19
+
20
+ args = {
21
+ :igFocusWindow => [:pointer],
22
+ :igGetCurrentWindow => [],
23
+ }
24
+
25
+ retvals = {
26
+ :igFocusWindow => :void,
27
+ :igGetCurrentWindow => :pointer,
28
+ }
29
+
30
+ symbols.each do |sym|
31
+ begin
32
+ attach_function sym, args[sym], retvals[sym]
33
+ rescue FFI::NotFoundError
34
+ $stderr.puts("[Warning] Failed to import #{sym}.\n") if output_error
35
+ end
36
+ end
37
+
38
+ @@imgui_import_internal_done = true
39
+ end # self.import_internal_symbols
40
+
41
+ def self.GetCurrentWindow()
42
+ igGetCurrentWindow()
43
+ end
44
+
45
+ def self.FocusWindow(window)
46
+ igFocusWindow(window)
47
+ end
48
+
49
+ end # module ImGui
Binary file
data/lib/imnodes.dll CHANGED
Binary file
data/lib/imnodes.dylib CHANGED
Binary file