texplay 0.2.1-x86-mswin32-60

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.
Files changed (72) hide show
  1. data/CHANGELOG +68 -0
  2. data/README +21 -0
  3. data/README1st +9 -0
  4. data/Rakefile +85 -0
  5. data/examples/basic.rb +48 -0
  6. data/examples/basic2.rb +37 -0
  7. data/examples/benchmark.rb +299 -0
  8. data/examples/common.rb +8 -0
  9. data/examples/example_alpha_blend.rb +31 -0
  10. data/examples/example_bezier.rb +51 -0
  11. data/examples/example_color_control.rb +68 -0
  12. data/examples/example_color_transform.rb +29 -0
  13. data/examples/example_dup.rb +52 -0
  14. data/examples/example_each.rb +42 -0
  15. data/examples/example_effect.rb +35 -0
  16. data/examples/example_fill.rb +49 -0
  17. data/examples/example_fill_old.rb +49 -0
  18. data/examples/example_fluent.rb +31 -0
  19. data/examples/example_gen_eval.rb +34 -0
  20. data/examples/example_hash_arguments.rb +47 -0
  21. data/examples/example_melt.rb +27 -0
  22. data/examples/example_polyline.rb +43 -0
  23. data/examples/example_simple.rb +35 -0
  24. data/examples/example_sync.rb +60 -0
  25. data/examples/example_turtle.rb +40 -0
  26. data/examples/media/empty2.png +0 -0
  27. data/examples/media/gosu.png +0 -0
  28. data/examples/media/maria.png +0 -0
  29. data/examples/media/rose.bmp +0 -0
  30. data/examples/media/sand1.png +0 -0
  31. data/examples/media/sunset.png +0 -0
  32. data/examples/media/texplay.png +0 -0
  33. data/examples/specs.rb +240 -0
  34. data/examples/test.rb +70 -0
  35. data/examples/test2.rb +72 -0
  36. data/lib/ctexplay.18.so +0 -0
  37. data/lib/ctexplay.19.so +0 -0
  38. data/lib/texplay-contrib.rb +77 -0
  39. data/lib/texplay.rb +134 -0
  40. data/src/Makefile +181 -0
  41. data/src/TAGS +286 -0
  42. data/src/actions.c +1306 -0
  43. data/src/actions.h +52 -0
  44. data/src/actions.obj +0 -0
  45. data/src/bindings.c +1081 -0
  46. data/src/bindings.h +45 -0
  47. data/src/bindings.obj +0 -0
  48. data/src/cache.c +132 -0
  49. data/src/cache.h +24 -0
  50. data/src/cache.obj +0 -0
  51. data/src/compat.h +23 -0
  52. data/src/ctexplay-i386-mswin32.def +2 -0
  53. data/src/ctexplay-i386-mswin32.exp +0 -0
  54. data/src/ctexplay-i386-mswin32.lib +0 -0
  55. data/src/ctexplay-i386-mswin32.pdb +0 -0
  56. data/src/ctexplay.so +0 -0
  57. data/src/extconf.rb +18 -0
  58. data/src/gen_eval.c +209 -0
  59. data/src/gen_eval.h +20 -0
  60. data/src/gen_eval.obj +0 -0
  61. data/src/mkmf.log +18 -0
  62. data/src/object2module.c +171 -0
  63. data/src/object2module.h +11 -0
  64. data/src/object2module.obj +0 -0
  65. data/src/texplay.c +136 -0
  66. data/src/texplay.h +107 -0
  67. data/src/texplay.obj +0 -0
  68. data/src/utils.c +959 -0
  69. data/src/utils.h +143 -0
  70. data/src/utils.obj +0 -0
  71. data/src/vc60.pdb +0 -0
  72. metadata +132 -0
data/CHANGELOG ADDED
@@ -0,0 +1,68 @@
1
+ 2/9/09
2
+ version 0.2.1
3
+ * releasing a gem for TexPlay
4
+ * bumped version number so can add add gosu 0.7.14 dependency to github gem
5
+ * hopefully gem works on both github and rubyforge
6
+ 31/8/09
7
+ version 0.2.0
8
+ * added each iterator
9
+ * added alternative to proc for :color_control proc (allowing static linear transforms to pixels)
10
+ * no longer segfaulting on windows (no idea why not)
11
+ * rewrote EmptyImageStub in ruby, using philomory's code. now alot faster.
12
+ * implemented 'shadow' in terms of static :color_control pixel transform
13
+ * added more example code demonstrating each iterator (example_each.rb) and new color_control behaviour
14
+ i.e example_color_transform.rb
15
+ * should be relatively stable now!
16
+
17
+ 28/8/09
18
+ version 0.1.9.1 (still BETA)
19
+ * experimental features: Gosu::Image#dup and Gosu::Image#clone
20
+ * also TexPlay::create_blank_image(window, width, height)
21
+ * I noticed these features SEG FAULT on my setup in windows, so be warned
22
+ * This is a BETA release
23
+
24
+ 14/8/09
25
+ version 0.1.9.0 (BETA)
26
+ * major rewrite. TP now supports beziers, polylines, polygons, and more
27
+ * also supports alpha_blending (though still tempermental)
28
+ * This is a BETA release
29
+
30
+ 1/7/09
31
+ version 0.1.6.2
32
+ * fixed another subtle bug in constrain_local_boundaries(). Function was
33
+ unable to deal with drawing actions that were 100% outside the image
34
+ boundaries.
35
+
36
+ 28/6/09
37
+ version 0.1.6
38
+ * gen_eval now working as a replacement for instance_eval in the #paint block. Allows for more user-friendly interface.
39
+ * #paint can now be called without a block; if invoked this way it executes any commands in the action queue, e.g
40
+ @img.circle 20, 20, 40
41
+ @img.pixel 30, 30
42
+ @img.paint
43
+ * above will function as if: @img.paint { circle 20, 20, 40; pixel 30, 30 }
44
+ * collected 1.8.6/1.9.1 compatibility into compat.h
45
+
46
+ 16/6/09
47
+ version 0.1.4.6
48
+ * allowed arity of 0 (as well as -1) for ruby 1.9 compatibility
49
+
50
+ 13/6/09
51
+ version 0.1.4.5
52
+ * major bugfix with TexPlay#splice method (segfaut). Also added new color format parameter: color [1, 1, 0, 1] (e.g purple with full alpha).
53
+ Also fixed subtle edge-case bug in constrain_local_boundaries().
54
+
55
+ 9/6/09
56
+ version 0.1.4
57
+ * improved error checking. should work better with later gosu releases
58
+
59
+ 20/2/09
60
+ version 0.1.1
61
+ * rerelease of this version fixing the oversized image bug for refresh_cache (i.e images over 500 x 500
62
+
63
+ version 0.1.1
64
+ * oops, bug in leftshift/rightshift functions, fixed!
65
+
66
+ version 0.1.0
67
+ * release!
68
+
data/README ADDED
@@ -0,0 +1,21 @@
1
+ INSTRUCTIONS
2
+
3
+ TexPlay version 0.2.1
4
+
5
+ To compile TexPlay, ensure you are in the directory with the Rakefile and type:
6
+ => rake
7
+ OR
8
+ => rake19 (assuming this is the name of your 1.9.1 version of rake)
9
+
10
+ !!NB!! be sure to run the version of rake that corresponds to the ruby version you wish to use! on my system I use rake19 for ruby 1.9.1!!
11
+
12
+ If all goes well, run the example programs:
13
+ => cd examples
14
+ => ruby example_melt.rb
15
+ => ruby example_simple.rb
16
+ => ..etc
17
+
18
+ *like any gosu application, gosu.so must be in the current directory (or the gosu gem installed) when running the examples.
19
+
20
+ Enjoy!
21
+ (note that TexPlay has only been tested on 32 bit linux systems and WindowsXP using VS 6.0)
data/README1st ADDED
@@ -0,0 +1,9 @@
1
+ INSTRUCTIONS
2
+
3
+ TexPlay version 0.2.1
4
+
5
+ *Ensure that ctexplay.so and gosu.so, and texplay.rb and texplay-contrib.rb are in the working directory for your project
6
+ *require 'texplay' in your ruby program to access the TexPlay module
7
+ *see example programs, for illustration of use
8
+
9
+
data/Rakefile ADDED
@@ -0,0 +1,85 @@
1
+ require 'rake/clean'
2
+ require 'rake/gempackagetask'
3
+
4
+ $dlext = Config::CONFIG['DLEXT']
5
+
6
+ CLEAN.include("src/*.#{$dlext}", "src/*.log", "src/*.o", "src/*~", "src/*#*", "src/*.obj", "src/*.def", "src/*.pdb")
7
+ CLOBBER.include("**/*.#{$dlext}", "**/*~", "**/*#*", "**/*.log", "**/*.o")
8
+
9
+ $make_program = if RUBY_PLATFORM =~ /win/
10
+ "nmake"
11
+ else
12
+ "make"
13
+ end
14
+
15
+ task :default => [:build]
16
+
17
+ desc "Build TexPlay"
18
+ task :build => :clean do
19
+ puts "(2) building Makefile..."
20
+ chdir("./src/") do
21
+ ruby "extconf.rb"
22
+ puts "(3) building ctexplay.#{$dlext}..."
23
+ sh "#{$make_program}"
24
+ puts "(4) copying ctexplay.#{$dlext} to current directory..."
25
+ cp "ctexplay.#{$dlext}", "../lib" , :verbose => true
26
+
27
+ if RUBY_PLATFORM =~ /mswin/
28
+ if RUBY_VERSION =~ /1.9/
29
+ File.rename("../lib/ctexplay.#{$dlext}", "../lib/ctexplay.19.#{$dlext}")
30
+ else
31
+ File.rename("../lib/ctexplay.#{$dlext}", "../lib/ctexplay.18.#{$dlext}")
32
+ end
33
+ end
34
+ puts "(5) ...done!"
35
+ end
36
+ end
37
+
38
+ specification = Gem::Specification.new do |s|
39
+ s.name = "texplay"
40
+ s.summary = "TexPlay is a light-weight image manipulation framework for Ruby and Gosu"
41
+ s.version = "0.2.1"
42
+ s.date = "2009-09-02"
43
+ s.author = "John Mair (banisterfiend)"
44
+ s.email = 'jrmair@gmail.com'
45
+ s.description = s.summary
46
+ s.require_path = 'lib'
47
+ s.add_dependency("gosu",">=0.7.14")
48
+ s.homepage = "http://banisterfiend.wordpress.com/2008/08/23/texplay-an-image-manipulation-tool-for-ruby-and-gosu/"
49
+ s.has_rdoc = false
50
+ s.files = ["Rakefile", "README", "CHANGELOG", "README1st",
51
+ "lib/texplay.rb", "lib/texplay-contrib.rb"] +
52
+ FileList["src/*", "examples/*.rb", "examples/media/*"].to_a
53
+
54
+ if RUBY_PLATFORM =~ /mswin/
55
+ s.platform = Gem::Platform::CURRENT
56
+ s.files += ["lib/ctexplay.18.so", "lib/ctexplay.19.so"]
57
+
58
+ else
59
+ s.platform = Gem::Platform::RUBY
60
+ s.extensions = ["src/extconf.rb"]
61
+ end
62
+ end
63
+ Rake::GemPackageTask.new(specification) do |package|
64
+ package.need_zip = false
65
+ package.need_tar = false
66
+ end
67
+
68
+ SELENE = '/home/john/ruby/projects/selene'
69
+ desc "update selene's version of texplay"
70
+ task :selene => ["#{SELENE}/lib/texplay.rb", "#{SELENE}/lib/texplay-contrib.rb",
71
+ "#{SELENE}/lib/ctexplay.so"] do
72
+ puts "...done!"
73
+ end
74
+
75
+ file "#{SELENE}/lib/texplay.rb" => "texplay.rb" do |t|
76
+ cp t.prerequisites.first, t.name, :verbose => true
77
+ end
78
+
79
+ file "#{SELENE}/lib/texplay-contrib.rb" => "texplay-contrib.rb" do |t|
80
+ cp t.prerequisites.first, t.name, :verbose => true
81
+ end
82
+
83
+ file "#{SELENE}/lib/ctexplay.#{$dlext}" => "ctexplay.#{$dlext}" do |t|
84
+ cp t.prerequisites.first, t.name, :verbose => true
85
+ end
data/examples/basic.rb ADDED
@@ -0,0 +1,48 @@
1
+
2
+ require 'rubygems'
3
+ require 'common'
4
+
5
+ require 'gosu'
6
+ require 'texplay'
7
+
8
+ class W < Gosu::Window
9
+ def initialize
10
+ super(1024, 769, false, 20)
11
+ @img = Gosu::Image.new(self, "#{Common::MEDIA}/sunset.png")
12
+ @img.rect 0,0, @img.width - 1, @img.height - 1
13
+
14
+ @img.instance_variable_set(:@horse, :love)
15
+ class << @img
16
+ def little
17
+ :little
18
+ end
19
+ end
20
+ @bunk = @img.clone
21
+ puts @bunk.instance_variable_get(:@horse)
22
+ puts @bunk.little
23
+ end
24
+
25
+ def draw
26
+ x = @img.width * rand
27
+ y = @img.height * rand
28
+
29
+ @img.
30
+ line(0, 0, 1024, 1024).
31
+ circle(20, 20, 50).
32
+ rect 30, 30, 100, 100
33
+
34
+ @img.draw 100, 50,1
35
+ @bunk.draw 500, 300,1
36
+ @bunk.line 0, 0, 1024, 1024, :color => :red
37
+
38
+
39
+
40
+ @bunk.pixel x, y, :color => :none
41
+ end
42
+
43
+ end
44
+
45
+
46
+ w = W.new
47
+ w.show
48
+
@@ -0,0 +1,37 @@
1
+ require 'rubygems'
2
+ require 'common'
3
+ require 'gosu'
4
+ require 'texplay'
5
+
6
+ class Proc
7
+ def __context__
8
+ eval('self', self.binding)
9
+ end
10
+ end
11
+
12
+ class W < Gosu::Window
13
+ def initialize
14
+ super(1024, 769, false, 20)
15
+ @img = Gosu::Image.new(self, "#{Common::MEDIA}/texplay.png")
16
+ end
17
+
18
+ def trick
19
+ @img.dup_eval { self }
20
+ end
21
+
22
+ def draw
23
+ @img.paint {
24
+ circle -5100, -9700, 20
25
+ circle(@img.width * rand * 2 - @img.width, @img.height * rand * 2 - @img.height, 40)
26
+ }
27
+ @img.draw(100,100,1)
28
+ end
29
+
30
+ def img
31
+ @img
32
+ end
33
+ end
34
+
35
+ w = W.new
36
+ w.show
37
+
@@ -0,0 +1,299 @@
1
+ # TexPlay test program
2
+
3
+ begin
4
+ require 'rubygems'
5
+ rescue LoadError
6
+
7
+ end
8
+
9
+ require 'common'
10
+ require 'gosu'
11
+ require 'texplay'
12
+ require 'benchmark'
13
+
14
+ class MyWindow < Gosu::Window
15
+
16
+ # set to true for visible output
17
+ # note, benchmarks will not happen until
18
+ # viewing window is closed
19
+ SHOW = false
20
+
21
+ def initialize
22
+ super(1024, 768, false, 20)
23
+ @img = Gosu::Image.new(self,"#{Common::MEDIA}/texplay.png")
24
+ @img2 = Gosu::Image.new(self,"#{Common::MEDIA}/texplay.png")
25
+ @gosu = Gosu::Image.new(self, "#{Common::MEDIA}/gosu.png")
26
+ @empty1 = Gosu::Image.new(self, "#{Common::MEDIA}/empty2.png")
27
+ @empty2 = Gosu::Image.new(self, "#{Common::MEDIA}/empty2.png")
28
+ @empty3 = Gosu::Image.new(self, "#{Common::MEDIA}/empty2.png")
29
+ @width = @img.width
30
+ @height = @img.height
31
+
32
+ # default number of iterations
33
+ @repeat = 1000
34
+
35
+ if ARGV.first.to_i != 0 then
36
+ @repeat = ARGV.shift.to_i
37
+ end
38
+
39
+ if SHOW then
40
+ class << self
41
+ alias_method :draw, :_draw
42
+ end
43
+ end
44
+ end
45
+
46
+ def bench_all
47
+ x1 = rand @width
48
+ y1 = rand @height
49
+ x2 = rand @width
50
+ y2 = rand @height
51
+
52
+ @img.paint {
53
+ color :random
54
+ circle x1, y1, 10
55
+ line x1, y1, x2, y2
56
+ rect x1, y1, x2 + 100, y2 + 100
57
+ pixel x1, y1
58
+ }
59
+ end
60
+
61
+ def bench_clear
62
+ @img.paint {
63
+ clear
64
+ }
65
+ end
66
+
67
+ def bench_circle
68
+ x = rand @width
69
+ y = rand @height
70
+ r = 50
71
+
72
+ @img.circle x, y, r
73
+
74
+ end
75
+
76
+ def bench_pixel
77
+ @img.paint {
78
+ color :random
79
+ pixel (@img.width * rand), (@img.width * rand)
80
+ }
81
+ end
82
+
83
+ def bench_splice
84
+ @img.paint {
85
+ splice(@img2, (@img.width * rand), (@img.height * rand))
86
+ }
87
+ end
88
+
89
+
90
+ def bench_splice_same
91
+ @img.paint {
92
+ splice(@img, (@img.width * rand), (@img.height * rand))
93
+ }
94
+ end
95
+
96
+ def bench_special_pixel
97
+ @img.paint {
98
+ self[(@img.width * rand), (@img.height * rand)] = :random
99
+ }
100
+ end
101
+
102
+ def bench_line
103
+ x1 = rand @width
104
+ y1 = rand @height
105
+ x2 = rand @width
106
+ y2 = rand @height
107
+
108
+
109
+ @img.line x1, y1, x2, y2
110
+
111
+ end
112
+
113
+ def bench_pline
114
+ x1 = rand @width
115
+ y1 = rand @height
116
+ x2 = rand @width
117
+ y2 = rand @height
118
+
119
+
120
+ @img.paint {
121
+ line x1, y1, x2, y2
122
+ }
123
+
124
+ end
125
+
126
+ def bench_box
127
+ x1 = rand @width
128
+ y1 = rand @height
129
+ x2 = rand @width
130
+ y2 = rand @height
131
+
132
+ @img.paint {
133
+ rect rand(@width),rand(@width),rand(@width),rand(@width)
134
+ }
135
+ end
136
+
137
+ def bench_anti_each
138
+ 0.upto(@img.width - 1) { |x|
139
+ 0.upto(@img.height - 1) { |y|
140
+ clr = @img.get_pixel(x, y)
141
+
142
+ clr[0] += 1
143
+
144
+ @img.color clr
145
+ @img.pixel(x, y)
146
+ }
147
+ }
148
+ end
149
+
150
+ def bench_each
151
+ @img.each { |v| v[0] = 1}
152
+ end
153
+
154
+ def bench_each2
155
+ @img.each2 { |v| v[0] = 1}
156
+ end
157
+
158
+ def bench_image_new
159
+ Gosu::Image.new(self, "#{Common::MEDIA}/empty2.png")
160
+ end
161
+
162
+ def bench_create_blank
163
+ truck = TexPlay::create_blank_image(self, @img.width, @img.height)
164
+ truck.splice(@img, 0, 0)
165
+
166
+ end
167
+
168
+ def bench_dup
169
+ @img.dup
170
+ end
171
+
172
+ def bench_clone
173
+ @img.clone
174
+ end
175
+
176
+ def bench_composite
177
+ @img.splice @img2, 0, 0
178
+ end
179
+
180
+ def bench_rect
181
+ @img.rect 0, 0, 1024, 1024, :fill => true
182
+ end
183
+
184
+ def bench_gen_eval
185
+ @img.paint {
186
+ 0.upto(1000) {
187
+ circle 100,100, 10
188
+ }
189
+ }
190
+ end
191
+
192
+ def bench_eager_sync
193
+ @img.paint(:lazy_sync => false) {
194
+ # 1.upto(1000) {
195
+ # color :blue
196
+ ### circle (10), (10), 10
197
+ clear
198
+ #circle (@img.width * rand), (@img.height * rand), 10
199
+ # }
200
+ }
201
+ end
202
+
203
+ def bench_lazy_sync
204
+ @img.paint(:lazy_sync => true) {
205
+ # 1.upto(1000) {
206
+ # color :blue
207
+ # circle (10), (10), 10
208
+ clear
209
+ #circle (@img.width * rand), (@img.height * rand), 10
210
+ # }
211
+
212
+ }
213
+ end
214
+
215
+
216
+ def bench_yield
217
+ @img.paint { |c|
218
+ 0.upto(1000) {
219
+ c.circle 100,100, 10
220
+ }
221
+ }
222
+ end
223
+
224
+ def bench_instance_eval
225
+ @img.instance_eval {
226
+ 0.upto(1000) {
227
+ circle 100,100, 10
228
+ }
229
+ }
230
+ end
231
+
232
+ def bench_glow_fill
233
+ @empty2.fill 100,100
234
+ end
235
+
236
+ def bench_scan_fill_style
237
+ @empty2.fill 100,100, :scan => true, :style => true, :color => :random
238
+ end
239
+
240
+ def bench_scan_fill
241
+ @empty3.fill 100,100, :scan => true, :color => :random
242
+ end
243
+
244
+ def bench_iter_fill
245
+ @empty3.fill 100,100, :iter => true
246
+ end
247
+
248
+ def bench_polyline_thick
249
+ @empty2.polyline [100, 200, 0, 0, 150, 500, 500, 0], :closed => true, :texture => @tp, :thickness => 2,
250
+ :alpha_blend => true, :sync_mode => :no_sync
251
+ end
252
+
253
+ def bench_polyline
254
+ ps = []
255
+ 13.times {
256
+ p = [@empty2.width * rand, @empty2.height * rand]
257
+ ps += p
258
+ }
259
+ # ps = [110, 110, 210, 210]
260
+ @empty2.polyline ps
261
+ end
262
+
263
+ def bench_bezier
264
+ ps = []
265
+ 13.times {
266
+ p = [@empty2.width * rand, @empty2.height * rand]
267
+ ps += p
268
+ }
269
+ @empty2.bezier ps
270
+ end
271
+
272
+ def _draw
273
+ @img.draw(200, 200, 0)
274
+ end
275
+
276
+ def do_benchmarks
277
+ puts "performing #{@repeat} iterations..."
278
+
279
+ bench_meths = ARGV
280
+
281
+ if ARGV.empty? then
282
+ bench_meths = self.methods.select { |x| x =~ /bench/ }.map { |x| x.to_s.sub("bench_", "") }
283
+ end
284
+
285
+ Benchmark.bmbm do |v|
286
+ bench_meths.each { |meth|
287
+ v.report(meth) { @repeat.times { self.send("bench_#{meth}") } }
288
+ }
289
+ end
290
+ end
291
+ end
292
+
293
+ w = MyWindow.new
294
+
295
+ if MyWindow::SHOW
296
+ w.show
297
+ end
298
+
299
+ w.do_benchmarks