roglew 0.2.3 → 0.2.4

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.
@@ -20,7 +20,7 @@ module Roglew
20
20
  singleton_class.send(:include, @deferred ? DeferredContext : ImmediateContext)
21
21
  mod = self.class.instance_variable_get(@deferred ? :@deferred_mod : :@immediate_mod)
22
22
  singleton_class.send(:include, mod) if mod
23
- run(&block) if block_given? && respond_to?(:run, true)
23
+ run(&block) if respond_to?(:run, true)
24
24
  end
25
25
 
26
26
  def self.included(c)
@@ -7,14 +7,14 @@ module Roglew
7
7
  def initialize(context)
8
8
  @context = context
9
9
  @id = context.gen_framebuffers
10
- self.class.finalize(self, @context, @id)
10
+ ObjectSpace.define_finalizer(self, self.class.finalize(@context, @id))
11
11
  end
12
12
 
13
- def self.finalize(obj, ctx, id)
14
- ObjectSpace.define_finalizer(obj, proc do
13
+ def self.finalize(ctx, id)
14
+ proc do
15
15
  puts "releasing framebuffer #{id}"
16
16
  ctx.delete_framebuffers(id)
17
- end)
17
+ end
18
18
  end
19
19
 
20
20
  #target: one of GL::DRAW_FRAMEBUFFER, GL::READ_FRAMEBUFFER or GL::FRAMEBUFFER
@@ -7,14 +7,14 @@ module Roglew
7
7
  def initialize(context)
8
8
  @context = context
9
9
  @id = context.gen_renderbuffers
10
- self.class.finalize(self, @context, @id)
10
+ ObjectSpace.define_finalizer(self, self.class.finalize(@context, @id))
11
11
  end
12
12
 
13
- def self.finalize(obj, ctx, id)
14
- ObjectSpace.define_finalizer(obj, proc do
13
+ def self.finalize(ctx, id)
14
+ proc do
15
15
  puts "releasing renderbuffer #{id}"
16
16
  ctx.delete_renderbuffers(id)
17
- end)
17
+ end
18
18
  end
19
19
 
20
20
  def bind(deferred = nil, &block)
@@ -6,14 +6,14 @@ module Roglew
6
6
  def initialize(context)
7
7
  @context = context
8
8
  @id = context.gen_vertex_arrays
9
- self.class.finalize(self, @context, @id)
9
+ ObjectSpace.define_finalizer(self, self.class.finalize(@context, @id))
10
10
  end
11
11
 
12
- def self.finalize(obj, ctx, id)
13
- ObjectSpace.define_finalizer(obj, proc do
12
+ def self.finalize(ctx, id)
13
+ proc do
14
14
  puts "releasing vertex array #{id}"
15
15
  ctx.delete_vertex_arrays(id)
16
- end)
16
+ end
17
17
  end
18
18
 
19
19
  def bind
@@ -7,14 +7,14 @@ module Roglew
7
7
  def initialize(context)
8
8
  @context = context
9
9
  @id = context.gen_framebuffersEXT
10
- self.class.finalize(self, @context, @id)
10
+ ObjectSpace.define_finalizer(self, self.class.finalize(@context, @id))
11
11
  end
12
12
 
13
- def self.finalize(obj, ctx, id)
14
- ObjectSpace.define_finalizer(obj, proc do
13
+ def self.finalize(ctx, id)
14
+ proc do
15
15
  puts "releasing framebuffer #{id}"
16
16
  ctx.delete_framebuffersEXT(id)
17
- end)
17
+ end
18
18
  end
19
19
 
20
20
  #target: one of GL::DRAW_FRAMEBUFFER_EXT, GL::READ_FRAMEBUFFER_EXT or GL::FRAMEBUFFER_EXT
@@ -7,14 +7,14 @@ module Roglew
7
7
  def initialize(context)
8
8
  @context = context
9
9
  @id = context.gen_renderbuffersEXT
10
- self.class.finalize(self, @context, @id)
10
+ ObjectSpace.define_finalizer(self, self.class.finalize(@context, @id))
11
11
  end
12
12
 
13
- def self.finalize(obj, ctx, id)
14
- ObjectSpace.define_finalizer(obj, proc do
13
+ def self.finalize(ctx, id)
14
+ proc do
15
15
  puts "releasing renderbuffer #{id}"
16
16
  ctx.delete_renderbuffersEXT(id)
17
- end)
17
+ end
18
18
  end
19
19
 
20
20
  def bind(deferred = nil, &block)
@@ -8,14 +8,14 @@ module Roglew
8
8
  @context = context
9
9
  @id = context.gen_buffers
10
10
 
11
- self.class.finalize(self, @context, @id)
11
+ ObjectSpace.define_finalizer(self, self.class.finalize(@context, @id))
12
12
  end
13
13
 
14
- def self.finalize(obj, ctx, id)
15
- ObjectSpace.define_finalizer(obj, proc do
14
+ def self.finalize(ctx, id)
15
+ proc do
16
16
  puts "releasing buffer #{id}"
17
17
  ctx.delete_buffers(id)
18
- end)
18
+ end
19
19
  end
20
20
 
21
21
  def bind(target, deferred = nil, &block)
@@ -7,8 +7,12 @@ module Roglew
7
7
  super(buffer, deferred, &block)
8
8
  end
9
9
 
10
- def data(usage, type = nil, buffer = nil)
11
- make_call(:buffer_data, @target, usage, type, buffer)
10
+ def data(usage, buffer = nil, type = nil)
11
+ make_call(:buffer_data, @target, usage, buffer, type)
12
+ end
13
+
14
+ def sub_data(offset, type, buffer)
15
+ make_call(:buffer_sub_data, @target, offset, type, buffer)
12
16
  end
13
17
 
14
18
  private
@@ -6,14 +6,14 @@ module Roglew
6
6
  def initialize(context)
7
7
  @context = context
8
8
  @id = context.gen_queries
9
- self.class.finalize(self, @context, @id)
9
+ ObjectSpace.define_finalizer(self, self.class.finalize(@context, @id))
10
10
  end
11
11
 
12
- def self.finalize(obj, ctx, id)
13
- ObjectSpace.define_finalizer(obj, proc do
12
+ def self.finalize(ctx, id)
13
+ proc do
14
14
  puts "releasing query #{id}"
15
15
  ctx.delete_queries(id)
16
- end)
16
+ end
17
17
  end
18
18
  end
19
19
  end
@@ -87,15 +87,29 @@ module GL_VERSION_1_5
87
87
  def_object :Buffers
88
88
  def_object :Queries
89
89
 
90
- def buffer_data(target, usage, type = nil, buffer = nil)
91
- glBufferData(target, *if buffer && buffer.size > 0
90
+ def buffer_data(target, usage, buffer = nil, type = nil)
91
+ glBufferData(target, *if buffer.is_a?(Array) && buffer.size > 0
92
92
  p = FFI::MemoryPointer.new(type, buffer.size)
93
- p.write_array_of_float(buffer)
93
+ p.send("write_array_of_#{type}", buffer)
94
94
  [p.size, p]
95
95
  else
96
- [0, nil]
96
+ size = buffer.respond_to?(:to_i) ? buffer.to_i : 0
97
+ size *= if size > 0 && type
98
+ type = FFI.find_type(type) if type.is_a?(Symbol)
99
+ type.size
100
+ else
101
+ 1
102
+ end
103
+
104
+ [size, nil]
97
105
  end, usage)
98
106
  end
107
+
108
+ def buffer_sub_data(target, offset, type, buffer)
109
+ pointer = FFI::MemoryPointer.new(type, buffer.size)
110
+ pointer.send("write_array_of_#{type}", buffer)
111
+ glBufferSubData(target, offset, buffer.size, pointer)
112
+ end
99
113
  end
100
114
  end
101
115
 
@@ -13,13 +13,14 @@ module Roglew
13
13
  compile(src)
14
14
  end
15
15
 
16
- self.class.finalize(self, @id, @context)
16
+ ObjectSpace.define_finalizer(self, self.class.finalize(@id, @context))
17
17
  end
18
18
 
19
- def self.finalize(obj, id, ctx)
20
- ObjectSpace.define_finalizer(obj, proc do
19
+ def self.finalize(id, ctx)
20
+ proc do
21
+ puts "releasing shader #{id}"
21
22
  ctx.glDeleteShader(id)
22
- end)
23
+ end
23
24
  end
24
25
 
25
26
  def compile(src)
@@ -7,14 +7,16 @@ module Roglew
7
7
  def initialize(context)
8
8
  @context = context
9
9
  @id = context.glCreateProgram()
10
+ @attribs, @uniforms = {}, {}
10
11
 
11
- self.class.finalize(self, @id, @context)
12
+ ObjectSpace.define_finalizer(self, self.class.finalize(@id, @context))
12
13
  end
13
14
 
14
- def self.finalize(obj, id, ctx)
15
- ObjectSpace.define_finalizer(obj, proc do
15
+ def self.finalize(id, ctx)
16
+ proc do
17
+ puts "releasing program #{id}"
16
18
  ctx.glDeleteProgram(id)
17
- end)
19
+ end
18
20
  end
19
21
 
20
22
  def attach(*shaders)
@@ -34,10 +36,36 @@ module Roglew
34
36
 
35
37
  def use_program
36
38
  @context.glUseProgram(@id)
39
+ if block_given?
40
+ yield
41
+ @context.glUseProgram(0)
42
+ end
43
+ end
44
+
45
+ def attrib_location(name)
46
+ name = name.to_sym
47
+ loc = @attribs[name]
48
+ return loc if loc
49
+ loc = @context.glGetAttribLocation(@id, name.to_s)
50
+ return nil if loc < 0
51
+ @attribs[name] = loc
52
+ end
53
+
54
+ def attrib_locations(*names)
55
+ names.map { |name| attrib_location(name) }
56
+ end
57
+
58
+ def uniform_location(name)
59
+ name = name.to_sym
60
+ loc = @uniforms[name]
61
+ return loc if loc
62
+ loc = @context.glGetUniformLocation(@id, name.to_s)
63
+ return nil if loc < 0
64
+ @uniforms[name] = loc
37
65
  end
38
66
 
39
67
  def uniform_locations(*names)
40
- names.map { |name| @context.glGetUniformLocation(@id, name) }
68
+ names.map { |name| uniform_location(name) }
41
69
  end
42
70
 
43
71
  alias_method :link, :link_program
@@ -17,8 +17,8 @@ module Roglew
17
17
  end)
18
18
  end
19
19
 
20
- def bind(deferred = nil, &block)
21
- create_binding(deferred, GL::TEXTURE_2D, &block)
20
+ def bind(level = 0, deferred = nil, &block)
21
+ create_binding(deferred, GL::TEXTURE_2D, level, &block)
22
22
  end
23
23
  end
24
24
  end
@@ -2,8 +2,10 @@ module Roglew
2
2
  class TextureContext
3
3
  include Roglew::BaseContext(:texture)
4
4
 
5
- def initialize(texture, deferred, target, &block)
6
- @target = target
5
+ attr_accessor :level
6
+
7
+ def initialize(texture, deferred, target, level, &block)
8
+ @target, @level = target, level
7
9
  super(texture, deferred, &block)
8
10
  end
9
11
 
@@ -30,8 +32,12 @@ module Roglew
30
32
  make_call(:tex_parameter, @target, GL::TEXTURE_BORDER_COLOR, r, g, b, a)
31
33
  end
32
34
 
33
- def tex_image_2d(width, height, internalFormat, format, type, data)
34
- make_call(:glTexImage2D, @target, 0, internalFormat, width, height, 0, format, type, data)
35
+ def tex_image_2d(width, height, internalFormat, format, type, data = nil)
36
+ make_call(:glTexImage2D, @target, @level, internalFormat, width, height, 0, format, type, data)
37
+ end
38
+
39
+ def tex_subimage_2d(x, y, width, height, format, type, data = nil)
40
+ make_call(:glTexSubImage2D, @target, @level, x, y, width, height, format, type, data)
35
41
  end
36
42
 
37
43
  private
data/lib/roglew.rb CHANGED
@@ -10,7 +10,7 @@
10
10
  '.each { |f| require f }
11
11
 
12
12
  module Roglew
13
- VERSION = '0.2.3'
13
+ VERSION = '0.2.4'
14
14
 
15
15
  PLATFORM = case
16
16
  when Platform.local.windows? then 'windows'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roglew
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-12-22 00:00:00.000000000 Z
13
+ date: 2012-12-28 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: facets
@@ -607,12 +607,20 @@ files:
607
607
  - README.md
608
608
  homepage: https://github.com/SilverPhoenix99/roglew
609
609
  licenses: []
610
- post_install_message: ! "+---------------------------------------------------+\n Thanks
611
- for choosing Roglew.\n\n =================================================\n 0.2.3
612
- Changes:\n - Removed parameter `border` from\n TextureContext#tex_image_2d.\n
613
- \ =================================================\n\n If you like what you see,
614
- support us on Pledgie:\n http://www.pledgie.com/campaigns/18830\n\n If you find
615
- any bugs, please report them on\n https://github.com/SilverPhoenix99/roglew/issues\n\n+---------------------------------------------------+\n"
610
+ post_install_message: ! "+----------------------------------------------------------------------------+\n
611
+ \ Thanks for choosing Roglew.\n\n ==========================================================================\n
612
+ \ 0.2.4 Changes:\n - Corrected a bug where contexts weren't calling the run method.\n
613
+ \ - Corrected the calls to ObjectSpace::define_finalizer.\n - Changed RenderContext#buffer_data
614
+ method to accept ffi instance types\n (e.g., Struct) as a parameter and calculates
615
+ the size automatically.\n - ShaderProgram#use_program can act as a bind method.\n
616
+ \ - Optional level parameter for Texture2d#bind.\n - Data parameter is now
617
+ optional for TextureContext#tex_image_2d.\n - The level can now be changed in
618
+ TextureContext at any point.\n - Added the methods:\n RenderContext#buffer_sub_data\n
619
+ \ BufferContext#sub_data methods\n ShaderProgram#attrib_location\n
620
+ \ ShaderProgram#attrib_locations\n ShaderProgram#uniform_location\n
621
+ \ TextureContext#tex_subimage_2d\n ==========================================================================\n\n
622
+ \ If you like what you see, support us on Pledgie:\n http://www.pledgie.com/campaigns/18830\n\n
623
+ \ If you find any bugs, please report them on\n https://github.com/SilverPhoenix99/roglew/issues\n\n+----------------------------------------------------------------------------+\n"
616
624
  rdoc_options: []
617
625
  require_paths:
618
626
  - lib