devil 0.1.9.5-i386-mswin32

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,122 @@
1
+ # (C) John Mair 2009, under the MIT licence
2
+
3
+ require 'texplay'
4
+ require 'devil'
5
+
6
+ # monkey patches for TexPlay module (and by proxy the Gosu::Image class)
7
+ module TexPlay
8
+
9
+ # save a Gosu::Image to +file+
10
+ # This method is only available if require 'devil/gosu' is used
11
+ def save(file)
12
+ capture {
13
+ img = to_devil
14
+ img.save(file)
15
+ img.free
16
+ }
17
+ self
18
+ end
19
+
20
+ # convert a Gosu::Image to a Devil::Image.
21
+ # This method is only available if require 'devil/gosu' is used
22
+ def to_devil
23
+ devil_img = nil
24
+ capture {
25
+ devil_img = Devil.from_blob(self.to_blob, self.width, self.height).flip
26
+ devil_img
27
+ }
28
+ devil_img
29
+ end
30
+ end
31
+
32
+ # monkey patches for Gosu::Window class
33
+ class Gosu::Window
34
+
35
+ # return a screenshot of the framebuffer as a Devil::Image.
36
+ # This method is only available if require 'devil/gosu' is used
37
+ def screenshot
38
+ require 'opengl'
39
+
40
+ img = nil
41
+ self.gl do
42
+ data = glReadPixels(0, 0, self.width, self.height, GL_RGBA, GL_UNSIGNED_BYTE)
43
+ img = Devil.from_blob(data, self.width, self.height)
44
+ end
45
+
46
+ img
47
+ end
48
+ end
49
+
50
+ class Gosu::Image
51
+ class << self
52
+ alias_method :original_new_redux, :new
53
+
54
+ # monkey patching to support multiple image formats.
55
+ # This method is only available if require 'devil/gosu' is used
56
+ def new(window, file, *args, &block)
57
+ if file.respond_to?(:to_blob) || file =~ /\.(bmp|png)$/
58
+ original_new_redux(window, file, *args, &block)
59
+ else
60
+ img = Devil.load(file).flip
61
+ begin
62
+ gosu_img = original_new_redux(window, img, *args, &block)
63
+ ensure
64
+ img.free
65
+ end
66
+
67
+ gosu_img
68
+ end
69
+ end
70
+ end
71
+ end
72
+
73
+ class Devil::Image
74
+
75
+ # convert a Devil::Image to a Gosu::Image.
76
+ # Must provide a +window+ parameter, as per Gosu::Image#new()
77
+ # This method is only available if require 'devil/gosu' is used
78
+ def to_gosu(window)
79
+ Gosu::Image.new(window, self)
80
+ end
81
+
82
+ # display the Devil images on screen utilizing the Gosu library for visualization
83
+ # if +x+ and +y+ are specified then show the image centered at this location, otherwise
84
+ # draw the image at the center of the screen
85
+ # This method is only available if require 'devil/gosu' is used
86
+ def show(x = Devil.get_options[:window_size][0] / 2,
87
+ y = Devil.get_options[:window_size][1] / 2)
88
+
89
+ if !Devil.const_defined?(:Window)
90
+ c = Class.new(Gosu::Window) do
91
+ attr_accessor :show_list
92
+
93
+ def initialize
94
+ super(Devil.get_options[:window_size][0], Devil.get_options[:window_size][1], false)
95
+ @show_list = []
96
+ end
97
+
98
+ def draw # :nodoc:
99
+ @show_list.each { |v| v[:image].draw_rot(v[:x], v[:y], 1, 0) }
100
+
101
+ exit if button_down?(Gosu::KbEscape)
102
+ end
103
+ end
104
+
105
+ Devil.const_set :Window, c
106
+ end
107
+
108
+ if !defined? @@window
109
+ @@window ||= Devil::Window.new
110
+
111
+ at_exit { @@window.show }
112
+ end
113
+
114
+ # note we dup the image so the displayed image is a snapshot taken at the time #show is invoked
115
+
116
+ img = self.dup.flip
117
+ @@window.show_list.push :image => Gosu::Image.new(@@window, img), :x => x, :y => y
118
+ img.free
119
+
120
+ self
121
+ end
122
+ end
@@ -0,0 +1,3 @@
1
+ module Devil
2
+ VERSION = "0.1.9.5"
3
+ end
Binary file
Binary file
@@ -0,0 +1,21 @@
1
+ $direc = File.dirname(__FILE__)
2
+
3
+ $LOAD_PATH.push("#{$direc}/../lib/")
4
+
5
+ require 'rubygems'
6
+ require 'devil/gosu'
7
+
8
+ Devil.create_image(500, 500, :color => [255, 255, 0, 255]) do |img|
9
+ source1 = Devil.load("texture.png").thumbnail(100)
10
+ img.blit source1, 100, 100
11
+ img.blit source1, 400, 100
12
+
13
+ source1_dup = source1.dup
14
+ img.blit source1_dup.rotate(45), 100, 300
15
+
16
+ img.show
17
+
18
+ source1.free
19
+ source1_dup.free
20
+ end
21
+
@@ -0,0 +1,21 @@
1
+ $direc = File.dirname(__FILE__)
2
+
3
+ $LOAD_PATH.push("#{$direc}/../lib/")
4
+
5
+ require 'rubygems'
6
+ require 'devil/gosu'
7
+
8
+ Devil.with_image("#{$direc}/texture.png") do |img|
9
+ img2 = Devil.load("#{$direc}/red.png")
10
+
11
+ img.blit img2, 100, 100, :crop => [0, 0, img2.width / 2, img2.height / 2]
12
+ img2.free
13
+
14
+ img.show
15
+ end
16
+
17
+
18
+
19
+
20
+
21
+
@@ -0,0 +1,28 @@
1
+ direc = File.dirname(__FILE__)
2
+
3
+ $LOAD_PATH.push("#{direc}/../lib/")
4
+
5
+ require 'rubygems'
6
+ require "devil/gosu"
7
+
8
+ img = Devil.load_image("#{direc}/texture.png")
9
+
10
+ img.crop(100,100, 200, 200)
11
+ img_dup = img.dup
12
+
13
+ img.rotate(rand(360))
14
+
15
+ img.show(200,200)
16
+ img_dup.show(450, 200)
17
+
18
+ img.free
19
+ img_dup.free
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
@@ -0,0 +1,23 @@
1
+ $direc = File.dirname(__FILE__)
2
+
3
+ $LOAD_PATH.push("#{$direc}/../lib/")
4
+
5
+ require 'rubygems'
6
+ require 'devil/gosu'
7
+
8
+ class W < Gosu::Window
9
+ def initialize
10
+ super(1024, 768, false, 20)
11
+
12
+ @img = Gosu::Image.new(self, "#{$direc}/texture.jpg")
13
+ end
14
+
15
+ def draw
16
+ @img.draw 100, 50,1
17
+ end
18
+
19
+ end
20
+
21
+ w = W.new
22
+ w.show
23
+
@@ -0,0 +1,29 @@
1
+ $direc = File.dirname(__FILE__)
2
+
3
+ $LOAD_PATH.push("#{$direc}/../lib/")
4
+
5
+ require 'rubygems'
6
+ require 'devil/gosu'
7
+
8
+ class W < Gosu::Window
9
+ def initialize
10
+ super(1024, 768, false, 20)
11
+
12
+ @img = Gosu::Image.new(self, "#{$direc}/texture.jpg")
13
+ dimg = @img.to_devil
14
+ @img = dimg.emboss.
15
+ rotate(45).
16
+ to_gosu(self)
17
+
18
+ dimg.free
19
+ end
20
+
21
+ def draw
22
+ @img.draw 100, 50,1
23
+ end
24
+
25
+ end
26
+
27
+ w = W.new
28
+ w.show
29
+
@@ -0,0 +1,26 @@
1
+ $direc = File.dirname(__FILE__)
2
+
3
+ $LOAD_PATH.push("#{$direc}/../lib/")
4
+
5
+ require 'rubygems'
6
+ require 'devil/gosu'
7
+
8
+ class W < Gosu::Window
9
+ def initialize
10
+ super(1024, 768, false, 20)
11
+
12
+ @img = Gosu::Image.new(self, "tank.png")
13
+ @img.circle 100, 100, 50, :color => :purple, :filled => true
14
+
15
+ @img.save("tank-modified.png")
16
+ end
17
+
18
+ def draw
19
+ @img.draw 100, 50,1
20
+ end
21
+
22
+ end
23
+
24
+ w = W.new
25
+ w.show
26
+
@@ -0,0 +1,10 @@
1
+ $direc = File.dirname(__FILE__)
2
+
3
+ $LOAD_PATH.push("#{$direc}/../lib/")
4
+
5
+ require 'rubygems'
6
+ require 'devil/gosu'
7
+
8
+ Devil.load_image("texture.png").emboss.show(512, 400)
9
+ Devil.load_image("tank.png").show(300, 400)
10
+
@@ -0,0 +1,18 @@
1
+ $direc = File.dirname(__FILE__)
2
+
3
+ $LOAD_PATH.push("#{$direc}/../lib/")
4
+
5
+ require 'rubygems'
6
+ require 'devil/gosu'
7
+
8
+ Devil.with_group("#{$direc}/texture.png", "#{$direc}/red.png") do |img, img2|
9
+
10
+ img.blit img2, 100, 100, :crop => [0, 0, img2.width / 2, img2.height / 2]
11
+ img.show
12
+ end
13
+
14
+
15
+
16
+
17
+
18
+
@@ -0,0 +1,95 @@
1
+ # this test is a hold over from the original ruby-devil bindings (by Jaroslaw Tworek)
2
+
3
+ $direc = File.dirname(__FILE__)
4
+
5
+ $LOAD_PATH.push("#{$direc}/../lib/")
6
+
7
+ require 'rubygems'
8
+ require 'glut'
9
+ require 'opengl'
10
+ require 'devil'
11
+ require 'thread'
12
+
13
+ $tex_id = 0
14
+
15
+ $idle = proc {
16
+ GLUT.PostRedisplay
17
+ }
18
+
19
+ $display = proc {
20
+ GL.Clear(GL::COLOR_BUFFER_BIT | GL::DEPTH_BUFFER_BIT)
21
+ GL.LoadIdentity
22
+ GLU.LookAt(0,0,-5,0,0,0,0,1,0)
23
+
24
+ GL.Begin GL::QUADS
25
+
26
+
27
+ GL.TexCoord(1,0)
28
+ GL.Vertex(1, 1,0)
29
+ GL.TexCoord(1,1)
30
+ GL.Vertex(1, -1,0)
31
+ GL.TexCoord(0,1)
32
+ GL.Vertex(-1, -1,0)
33
+ GL.TexCoord(0,0)
34
+ GL.Vertex(-1, 1,0)
35
+
36
+ GL.End
37
+
38
+ GLUT.SwapBuffers
39
+ }
40
+
41
+ $reshape = proc { |w,h|
42
+ GL.Viewport(0,0,w,h)
43
+ GL.MatrixMode(GL::PROJECTION)
44
+ GL.LoadIdentity
45
+ GLU.Perspective(45.0, Float(w)/h, 0.01, 100)
46
+ GL.MatrixMode(GL::MODELVIEW)
47
+ GL.LoadIdentity
48
+ }
49
+
50
+ def setup_gl
51
+ GL.ClearColor( 0,0,0,1)
52
+ IL.Init
53
+ ILUT.Renderer(ILUT::OPENGL)
54
+ GL.Enable(GL::DEPTH_TEST)
55
+ GL.DrawBuffer(GL::BACK)
56
+ GL.Disable(GL::CULL_FACE)
57
+ GL.ShadeModel(GL::FLAT)
58
+ GL.Enable(GL::TEXTURE_2D)
59
+
60
+ name = IL.GenImages(1)[0]
61
+ IL.BindImage(name)
62
+
63
+ if File.directory?("test") then
64
+ if !File.exist?("test/texture.png") then
65
+ raise RuntimeError, "File test/texture.png doesn't exist"
66
+ end
67
+ IL.LoadImage("test/texture.png")
68
+ else
69
+ if !File.exist?("texture.png") then
70
+ raise RuntimeError, "File texture.png doesn't exist"
71
+ end
72
+ IL.LoadImage("texture.png")
73
+ end
74
+
75
+ $tex_id = ILUT.GLBindMipmaps()
76
+ IL.DeleteImages([name])
77
+
78
+
79
+ end
80
+
81
+ def main
82
+ GLUT.Init
83
+ GLUT.InitDisplayMode(GLUT::DOUBLE | GLUT::RGB | GLUT::DEPTH)
84
+ GLUT.InitWindowSize(800,600)
85
+ GLUT.CreateWindow("Ruby-DevIL test")
86
+ setup_gl
87
+ GLUT.DisplayFunc($display)
88
+ GLUT.ReshapeFunc($reshape)
89
+ GLUT.IdleFunc($idle)
90
+ GLUT.MainLoop
91
+
92
+
93
+ end
94
+
95
+ main
@@ -0,0 +1,28 @@
1
+ $direc = File.dirname(__FILE__)
2
+
3
+ $LOAD_PATH.push("#{$direc}/../lib/")
4
+
5
+ require 'rubygems'
6
+ require "devil"
7
+
8
+ Devil.with_image("#{$direc}/texture.png") do |img|
9
+ img.pixelize(10)
10
+ img.save("#{$direc}/texture_blocky.png")
11
+ img.free
12
+ end
13
+
14
+ img = Devil.load_image("#{$direc}/texture.png")
15
+ bink = Devil.load_image("#{$direc}/texture.png")
16
+
17
+ img.gamma_correct(1.6)
18
+ bink.resize(50, 50)
19
+
20
+ img.save("#{$direc}/texture_gamma.png").free
21
+ bink.save("#{$direc}/texture_tiny.png").free
22
+
23
+
24
+
25
+
26
+
27
+
28
+
@@ -0,0 +1,8 @@
1
+ $direc = File.dirname(__FILE__)
2
+
3
+ $LOAD_PATH.push("#{$direc}/../lib/")
4
+
5
+ require 'rubygems'
6
+ require 'devil/gosu'
7
+
8
+ Devil.load("texture.png", :inprofile => "sRGB.icm", :out_profile => "AdobeRGB1998.icc").save("texture_out.png").free