ashton 0.0.1alpha

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. data/CHANGELOG +0 -0
  2. data/LICENSE +21 -0
  3. data/README.md +68 -0
  4. data/Rakefile +24 -0
  5. data/examples/framebuffer_example.rb +50 -0
  6. data/examples/media/Earth.png +0 -0
  7. data/examples/media/LargeStar.png +0 -0
  8. data/examples/media/Star.png +0 -0
  9. data/examples/media/Starfighter.bmp +0 -0
  10. data/examples/media/simple.png +0 -0
  11. data/examples/output/README.txt +1 -0
  12. data/examples/pixelate_example.rb +50 -0
  13. data/examples/radial_blur_example.rb +63 -0
  14. data/examples/shader_image_example.rb +42 -0
  15. data/examples/shockwave2_example.rb +76 -0
  16. data/examples/tv_screen_and_noise_example.rb +60 -0
  17. data/lib/ashton/base_shader.rb +172 -0
  18. data/lib/ashton/framebuffer.rb +183 -0
  19. data/lib/ashton/gosu_ext/color.rb +12 -0
  20. data/lib/ashton/gosu_ext/image.rb +32 -0
  21. data/lib/ashton/gosu_ext/window.rb +36 -0
  22. data/lib/ashton/image_stub.rb +37 -0
  23. data/lib/ashton/include/simplex.glsl +63 -0
  24. data/lib/ashton/post_process/contrast.frag +16 -0
  25. data/lib/ashton/post_process/default.vert +9 -0
  26. data/lib/ashton/post_process/fade.frag +11 -0
  27. data/lib/ashton/post_process/mezzotint.frag +24 -0
  28. data/lib/ashton/post_process/noise.frag +27 -0
  29. data/lib/ashton/post_process/pixelate.frag +48 -0
  30. data/lib/ashton/post_process/radial_blur.frag +31 -0
  31. data/lib/ashton/post_process/sepia.frag +19 -0
  32. data/lib/ashton/post_process/shockwave.frag +40 -0
  33. data/lib/ashton/post_process/shockwave2.frag +35 -0
  34. data/lib/ashton/post_process/tv_screen.frag +32 -0
  35. data/lib/ashton/post_process.rb +83 -0
  36. data/lib/ashton/shader/default.frag +19 -0
  37. data/lib/ashton/shader/default.vert +14 -0
  38. data/lib/ashton/shader.rb +62 -0
  39. data/lib/ashton/version.rb +3 -0
  40. data/lib/ashton.rb +26 -0
  41. metadata +201 -0
@@ -0,0 +1,83 @@
1
+ require "ashton/base_shader"
2
+
3
+ module Ashton
4
+ # Process the entire screen.
5
+ class PostProcess < BaseShader
6
+ DEFAULT_VERTEX_SOURCE = File.read File.expand_path("../post_process/default.vert", __FILE__)
7
+
8
+ class << self
9
+ # Canvas used to copy out the screen before post-processing it back onto the screen.
10
+ # We only need one of these, but only create it after a PostProcessor has
11
+ # actually been used.
12
+ def texture
13
+ @texture ||= begin
14
+ texture = glGenTextures(1).first
15
+ glBindTexture GL_TEXTURE_2D, texture
16
+ glTexParameteri GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR
17
+ glTexParameteri GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR
18
+ glTexParameteri GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE
19
+ glTexParameteri GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE
20
+ glTexImage2D GL_TEXTURE_2D, 0, GL_RGB8, $window.width, $window.height, 0,
21
+ GL_RGB, GL_UNSIGNED_BYTE, "\0" * ($window.width * $window.height * 3)
22
+ texture
23
+ end
24
+ end
25
+ end
26
+
27
+ # Todo: Pass in a filename (String) or name of built-in pp shader (Symbol)
28
+ def initialize(fragment)
29
+ super DEFAULT_VERTEX_SOURCE, fragment
30
+
31
+ # Set up defaults that we won't need to change at run-time.
32
+ use do
33
+ # Width/height are optional.
34
+ glUniform1i glGetUniformLocation(@program, "in_WindowWidth"), $window.width
35
+ glUniform1i glGetUniformLocation(@program, "in_WindowHeight"), $window.height
36
+
37
+ self["in_Texture"] = 0 # GL_TEXTURE0 will be activated.
38
+ end
39
+ end
40
+
41
+ # Full screen post-processing using a fragment shader.
42
+ #
43
+ # It will force all previous draw operations to be flushed to the
44
+ # screen, so that you can, or example, process the "game world" before you draw the GUI.
45
+ #
46
+ # Variables set for you in the fragment shader:
47
+ # uniform sampler2D in_Texture; // Texture containing the screen image.
48
+ # uniform int in_WindowWidth;
49
+ # uniform int in_WindowHeight;
50
+ def process
51
+ $window.gl do
52
+ width, height = $window.width, $window.height
53
+ texture = PostProcess.texture
54
+
55
+ # Copy window contents into a frame-buffer.
56
+ glBindTexture GL_TEXTURE_2D, texture
57
+ glCopyTexImage2D GL_TEXTURE_2D, 0, GL_RGBA8, 0, 0, width, height, 0
58
+
59
+ # clear screen and set "normal" openGL coordinates.
60
+ glClear GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT
61
+ glColor4f 1.0, 1.0, 1.0, 1.0
62
+ glMatrixMode GL_PROJECTION
63
+ glLoadIdentity
64
+ glViewport 0, 0, width, height
65
+ glOrtho 0, width, height, 0, -1, 1
66
+
67
+ # Assign the canvas, which was a copy of the screen.
68
+ glActiveTexture GL_TEXTURE0
69
+ glBindTexture GL_TEXTURE_2D, texture
70
+ raise unless glGetIntegerv(GL_ACTIVE_TEXTURE) == GL_TEXTURE0
71
+
72
+ use do
73
+ glBegin GL_QUADS do
74
+ glTexCoord2f(0.0, 1.0); glVertex2f(0.0, 0.0)
75
+ glTexCoord2f(1.0, 1.0); glVertex2f(width, 0.0)
76
+ glTexCoord2f(1.0, 0.0); glVertex2f(width, height)
77
+ glTexCoord2f(0.0, 0.0); glVertex2f(0.0, height)
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,19 @@
1
+ #version 110
2
+
3
+ uniform sampler2D in_Texture;
4
+ uniform bool in_TextureEnabled;
5
+
6
+ varying vec4 var_Color;
7
+ varying vec2 var_TexCoord;
8
+
9
+ void main()
10
+ {
11
+ if(in_TextureEnabled)
12
+ {
13
+ gl_FragColor = texture2D(in_Texture, var_TexCoord) * var_Color;
14
+ }
15
+ else
16
+ {
17
+ gl_FragColor = var_Color;
18
+ }
19
+ }
@@ -0,0 +1,14 @@
1
+ #version 110
2
+
3
+ attribute vec4 in_Color;
4
+
5
+ varying vec4 var_Color;
6
+ varying vec2 var_TexCoord;
7
+
8
+ void main()
9
+ {
10
+
11
+ gl_Position = ftransform();
12
+ var_Color = in_Color;
13
+ var_TexCoord = gl_MultiTexCoord0.xy;
14
+ }
@@ -0,0 +1,62 @@
1
+ require "ashton/base_shader"
2
+
3
+ module Ashton
4
+ class Shader < BaseShader
5
+ attr_reader :image
6
+
7
+ shader_path = File.expand_path "../shader", __FILE__
8
+ DEFAULT_VERTEX_SOURCE = File.read File.join(shader_path, "default.vert")
9
+ DEFAULT_FRAGMENT_SOURCE = File.read File.join(shader_path, "default.frag")
10
+
11
+ # Todo: Pass in a filename (String) or name of built-in pp shader (Symbol)
12
+ #
13
+ # @option options [String] :vertex Source code for vertex shader.
14
+ # @option options [String] :vert equivalent to :vertex
15
+ # @option options [String] :fragment Source code for fragment shader.
16
+ # @option options [String] :frag equivalent to :fragment
17
+ def initialize(options = {})
18
+ @image = nil
19
+
20
+ vertex_source = options[:vertex] || options[:vert] || DEFAULT_VERTEX_SOURCE
21
+ fragment_source = options[:fragment] || options[:frag] || DEFAULT_FRAGMENT_SOURCE
22
+
23
+ super vertex_source, fragment_source
24
+ link
25
+
26
+ @color = [1, 1, 1, 1]
27
+ end
28
+
29
+ def image=(image)
30
+ use do
31
+ if image
32
+ info = image.gl_tex_info
33
+
34
+ # Bind the single texture to 'in_Texture'
35
+ glActiveTexture GL_TEXTURE0
36
+ glBindTexture GL_TEXTURE_2D, info.tex_name
37
+ self["in_Texture"] = 0
38
+ raise unless glGetIntegerv(GL_ACTIVE_TEXTURE) == GL_TEXTURE0
39
+
40
+ # Ensure that the shader knows to use the texture.
41
+ self["in_TextureEnabled"] = true
42
+ else
43
+ begin
44
+ self["in_TextureEnabled"] = false
45
+ rescue
46
+ end
47
+ end
48
+ end
49
+
50
+ @image = image
51
+ end
52
+
53
+ def color=(color)
54
+ raise unless current?
55
+
56
+ opengl_color = color.is_a?(Gosu::Color) ? color.to_opengl : color
57
+
58
+ glVertexAttrib4f attribute("in_Color"), *opengl_color
59
+ @color = opengl_color
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,3 @@
1
+ module Ashton
2
+ VERSION = "0.0.1alpha"
3
+ end
data/lib/ashton.rb ADDED
@@ -0,0 +1,26 @@
1
+ require 'opengl'
2
+ require 'gosu'
3
+
4
+
5
+
6
+ module Ashton
7
+ class Error < RuntimeError; end
8
+
9
+ class NotSupportedError < Error; end
10
+
11
+ class ShaderError < Error; end
12
+ class ShaderCompileError < ShaderError; end
13
+ class ShaderLinkError < ShaderError; end
14
+ class ShaderUniformError < ShaderError; end
15
+ class ShaderAttributeError < ShaderError; end
16
+ end
17
+
18
+ require "ashton/gosu_ext/window"
19
+ require "ashton/gosu_ext/image"
20
+ require "ashton/gosu_ext/color"
21
+
22
+ require "ashton/version"
23
+ require "ashton/shader"
24
+ require "ashton/post_process"
25
+ require "ashton/framebuffer"
26
+ require "ashton/image_stub"
metadata ADDED
@@ -0,0 +1,201 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ashton
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1alpha
5
+ prerelease: 5
6
+ platform: ruby
7
+ authors:
8
+ - Bil Bas
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-07-10 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: opengl
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.8.0.pre1
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 0.8.0.pre1
30
+ - !ruby/object:Gem::Dependency
31
+ name: rspec
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 2.10.0
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 2.10.0
46
+ - !ruby/object:Gem::Dependency
47
+ name: launchy
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 2.1.0
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 2.1.0
62
+ - !ruby/object:Gem::Dependency
63
+ name: RedCloth
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 4.2.9
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 4.2.9
78
+ - !ruby/object:Gem::Dependency
79
+ name: redcarpet
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: 2.1.1
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: 2.1.1
94
+ - !ruby/object:Gem::Dependency
95
+ name: yard
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ version: 0.8.2.1
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 0.8.2.1
110
+ - !ruby/object:Gem::Dependency
111
+ name: texplay
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: '0.3'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ~>
124
+ - !ruby/object:Gem::Version
125
+ version: '0.3'
126
+ description: ! 'Extra special effects, such as shader, for the Gosu game-development
127
+ library
128
+
129
+ '
130
+ email:
131
+ - bil.bagpuss@gmail.com
132
+ executables: []
133
+ extensions: []
134
+ extra_rdoc_files: []
135
+ files:
136
+ - CHANGELOG
137
+ - LICENSE
138
+ - Rakefile
139
+ - README.md
140
+ - lib/ashton/base_shader.rb
141
+ - lib/ashton/framebuffer.rb
142
+ - lib/ashton/gosu_ext/color.rb
143
+ - lib/ashton/gosu_ext/image.rb
144
+ - lib/ashton/gosu_ext/window.rb
145
+ - lib/ashton/image_stub.rb
146
+ - lib/ashton/include/simplex.glsl
147
+ - lib/ashton/post_process/contrast.frag
148
+ - lib/ashton/post_process/default.vert
149
+ - lib/ashton/post_process/fade.frag
150
+ - lib/ashton/post_process/mezzotint.frag
151
+ - lib/ashton/post_process/noise.frag
152
+ - lib/ashton/post_process/pixelate.frag
153
+ - lib/ashton/post_process/radial_blur.frag
154
+ - lib/ashton/post_process/sepia.frag
155
+ - lib/ashton/post_process/shockwave.frag
156
+ - lib/ashton/post_process/shockwave2.frag
157
+ - lib/ashton/post_process/tv_screen.frag
158
+ - lib/ashton/post_process.rb
159
+ - lib/ashton/shader/default.frag
160
+ - lib/ashton/shader/default.vert
161
+ - lib/ashton/shader.rb
162
+ - lib/ashton/version.rb
163
+ - lib/ashton.rb
164
+ - examples/framebuffer_example.rb
165
+ - examples/media/Earth.png
166
+ - examples/media/LargeStar.png
167
+ - examples/media/simple.png
168
+ - examples/media/Star.png
169
+ - examples/media/Starfighter.bmp
170
+ - examples/output/README.txt
171
+ - examples/pixelate_example.rb
172
+ - examples/radial_blur_example.rb
173
+ - examples/shader_image_example.rb
174
+ - examples/shockwave2_example.rb
175
+ - examples/tv_screen_and_noise_example.rb
176
+ homepage: https://github.com/spooner/ashton
177
+ licenses:
178
+ - MIT
179
+ post_install_message:
180
+ rdoc_options: []
181
+ require_paths:
182
+ - lib
183
+ required_ruby_version: !ruby/object:Gem::Requirement
184
+ none: false
185
+ requirements:
186
+ - - ! '>='
187
+ - !ruby/object:Gem::Version
188
+ version: '0'
189
+ required_rubygems_version: !ruby/object:Gem::Requirement
190
+ none: false
191
+ requirements:
192
+ - - ! '>'
193
+ - !ruby/object:Gem::Version
194
+ version: 1.3.1
195
+ requirements: []
196
+ rubyforge_project: ashton
197
+ rubygems_version: 1.8.24
198
+ signing_key:
199
+ specification_version: 3
200
+ summary: Extra special effects, such as shader, for the Gosu game-development library
201
+ test_files: []