ashton 0.0.1alpha → 0.0.2alpha

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 (116) hide show
  1. data/LICENSE +21 -21
  2. data/README.md +95 -68
  3. data/Rakefile +41 -23
  4. data/examples/bloom_example.rb +59 -0
  5. data/examples/lighting_example.rb +127 -0
  6. data/examples/media/SmallStar.png +0 -0
  7. data/examples/media/Starfighter.png +0 -0
  8. data/examples/media/simple.png +0 -0
  9. data/examples/noise_example.rb +94 -0
  10. data/examples/outline_example.rb +86 -0
  11. data/examples/particle_emitter_example.rb +114 -0
  12. data/examples/pixelate_example.rb +51 -49
  13. data/examples/pixelated_texture_example.rb +69 -0
  14. data/examples/radial_blur_example.rb +60 -62
  15. data/examples/shader_image_example.rb +74 -41
  16. data/examples/{shockwave2_example.rb → shockwave_example.rb} +74 -75
  17. data/examples/stencil_shader_example.rb +104 -0
  18. data/examples/{framebuffer_example.rb → texture_render_example.rb} +53 -49
  19. data/examples/{tv_screen_and_noise_example.rb → tv_screen_and_static_example.rb} +59 -59
  20. data/ext/ashton/GLee.c +18170 -0
  21. data/ext/ashton/GLee.h +17647 -0
  22. data/ext/ashton/ashton.c +42 -0
  23. data/ext/ashton/ashton.h +31 -0
  24. data/ext/ashton/color.c +45 -0
  25. data/ext/ashton/color.h +25 -0
  26. data/ext/ashton/common.h +41 -0
  27. data/ext/ashton/extconf.rb +42 -0
  28. data/ext/ashton/fast_math.c +30 -0
  29. data/ext/ashton/fast_math.h +30 -0
  30. data/ext/ashton/font.c +8 -0
  31. data/ext/ashton/font.h +16 -0
  32. data/ext/ashton/gosu.c +18 -0
  33. data/ext/ashton/gosu.h +19 -0
  34. data/ext/ashton/image.c +8 -0
  35. data/ext/ashton/image.h +16 -0
  36. data/ext/ashton/particle_emitter.c +788 -0
  37. data/ext/ashton/particle_emitter.h +171 -0
  38. data/ext/ashton/pixel_cache.c +237 -0
  39. data/ext/ashton/pixel_cache.h +58 -0
  40. data/ext/ashton/shader.c +9 -0
  41. data/ext/ashton/shader.h +16 -0
  42. data/ext/ashton/texture.c +442 -0
  43. data/ext/ashton/texture.h +63 -0
  44. data/ext/ashton/window.c +8 -0
  45. data/ext/ashton/window.h +16 -0
  46. data/lib/ashton.rb +38 -26
  47. data/lib/ashton/1.9/ashton.so +0 -0
  48. data/lib/ashton/gosu_ext/color.rb +24 -11
  49. data/lib/ashton/gosu_ext/font.rb +58 -0
  50. data/lib/ashton/gosu_ext/gosu_module.rb +16 -0
  51. data/lib/ashton/gosu_ext/image.rb +95 -31
  52. data/lib/ashton/gosu_ext/window.rb +78 -35
  53. data/lib/ashton/image_stub.rb +32 -36
  54. data/lib/ashton/lighting/light_source.rb +146 -0
  55. data/lib/ashton/lighting/manager.rb +98 -0
  56. data/lib/ashton/mixins/version_checking.rb +23 -0
  57. data/lib/ashton/particle_emitter.rb +87 -0
  58. data/lib/ashton/pixel_cache.rb +24 -0
  59. data/lib/ashton/shader.rb +353 -35
  60. data/lib/ashton/shaders/bloom.frag +41 -0
  61. data/lib/ashton/shaders/color_inversion.frag +11 -0
  62. data/lib/ashton/{post_process → shaders}/contrast.frag +16 -16
  63. data/lib/ashton/{shader → shaders}/default.frag +22 -19
  64. data/lib/ashton/{shader → shaders}/default.vert +13 -13
  65. data/lib/ashton/shaders/fade.frag +14 -0
  66. data/lib/ashton/shaders/grayscale.frag +15 -0
  67. data/lib/ashton/shaders/include/classicnoise2d.glsl +113 -0
  68. data/lib/ashton/shaders/include/classicnoise3d.glsl +177 -0
  69. data/lib/ashton/shaders/include/classicnoise4d.glsl +302 -0
  70. data/lib/ashton/{include/simplex.glsl → shaders/include/noise2d.glsl} +70 -63
  71. data/lib/ashton/shaders/include/noise3d.glsl +102 -0
  72. data/lib/ashton/shaders/include/noise4d.glsl +128 -0
  73. data/lib/ashton/shaders/include/rand.glsl +5 -0
  74. data/lib/ashton/shaders/lighting/distort.frag +57 -0
  75. data/lib/ashton/shaders/lighting/draw_shadows.frag +60 -0
  76. data/lib/ashton/shaders/lighting/shadow_blur.frag +60 -0
  77. data/lib/ashton/shaders/mezzotint.frag +22 -0
  78. data/lib/ashton/shaders/multitexture2.vert +19 -0
  79. data/lib/ashton/shaders/outline.frag +45 -0
  80. data/lib/ashton/{post_process → shaders}/pixelate.frag +48 -48
  81. data/lib/ashton/shaders/radial_blur.frag +63 -0
  82. data/lib/ashton/shaders/sepia.frag +26 -0
  83. data/lib/ashton/{post_process/shockwave2.frag → shaders/shockwave.frag} +38 -35
  84. data/lib/ashton/shaders/signed_distance_field.frag +80 -0
  85. data/lib/ashton/{post_process/noise.frag → shaders/static.frag} +25 -27
  86. data/lib/ashton/shaders/stencil.frag +27 -0
  87. data/lib/ashton/shaders/tv_screen.frag +23 -0
  88. data/lib/ashton/signed_distance_field.rb +151 -0
  89. data/lib/ashton/texture.rb +186 -0
  90. data/lib/ashton/version.rb +2 -2
  91. data/lib/ashton/window_buffer.rb +16 -0
  92. data/spec/ashton/ashton_spec.rb +22 -0
  93. data/spec/ashton/gosu_ext/color_spec.rb +34 -0
  94. data/spec/ashton/gosu_ext/font_spec.rb +57 -0
  95. data/spec/ashton/gosu_ext/gosu_spec.rb +11 -0
  96. data/spec/ashton/gosu_ext/image_spec.rb +66 -0
  97. data/spec/ashton/gosu_ext/window_spec.rb +71 -0
  98. data/spec/ashton/image_stub_spec.rb +46 -0
  99. data/spec/ashton/particle_emitter_spec.rb +123 -0
  100. data/spec/ashton/pixel_cache_spec.rb +153 -0
  101. data/spec/ashton/shader_spec.rb +152 -0
  102. data/spec/ashton/signed_distance_field_spec.rb +163 -0
  103. data/spec/ashton/texture_spec.rb +347 -0
  104. data/spec/helper.rb +12 -0
  105. metadata +159 -28
  106. data/examples/output/README.txt +0 -1
  107. data/lib/ashton/base_shader.rb +0 -172
  108. data/lib/ashton/framebuffer.rb +0 -183
  109. data/lib/ashton/post_process.rb +0 -83
  110. data/lib/ashton/post_process/default.vert +0 -9
  111. data/lib/ashton/post_process/fade.frag +0 -11
  112. data/lib/ashton/post_process/mezzotint.frag +0 -24
  113. data/lib/ashton/post_process/radial_blur.frag +0 -31
  114. data/lib/ashton/post_process/sepia.frag +0 -19
  115. data/lib/ashton/post_process/shockwave.frag +0 -40
  116. data/lib/ashton/post_process/tv_screen.frag +0 -32
@@ -1 +0,0 @@
1
- Output from the examples will be saved here, to prove that some functionality works.
@@ -1,172 +0,0 @@
1
- module Ashton
2
- # @abstract
3
- class BaseShader
4
- INVALID_LOCATION = -1
5
- MIN_OPENGL_VERSION = 2.0
6
-
7
- attr_reader :fragment_source, :vertex_source
8
-
9
- # Todo: Pass in a filename (String) or name of built-in pp shader (Symbol)
10
- #
11
- # @option options [String] :vertex Source code for vertex shader.
12
- # @option options [String] :vert equivalent to :vertex
13
- # @option options [String] :fragment Source code for fragment shader.
14
- # @option options [String] :frag equivalent to :fragment
15
- def initialize(vertex_source, fragment_source)
16
- raise "Can't instantiate abstract class" if self.class == BaseShader
17
-
18
- unless GL.version_supported? MIN_OPENGL_VERSION
19
- raise NotSupportedError, "Ashton requires OpenGL #{MIN_OPENGL_VERSION} support to utilise shaders"
20
- end
21
-
22
- @uniform_locations = {}
23
- @attribute_locations = {}
24
- @program = nil
25
-
26
- @vertex_source = vertex_source
27
- @fragment_source = fragment_source
28
-
29
- @vertex = compile GL_VERTEX_SHADER, vertex_source
30
- @fragment = compile GL_FRAGMENT_SHADER, fragment_source
31
-
32
- link
33
-
34
- glBindFragDataLocationEXT @program, 0, "out_FragColor"
35
- end
36
-
37
-
38
- # Creates a copy of the shader program, recompiling the source,
39
- # but not preserving the uniform values.
40
- def dup
41
- self.class.new :vertex => @vertex_source, :fragment => @fragment_source
42
- end
43
-
44
- # Make this the current shader program.
45
- def use
46
- previous_program = glGetIntegerv GL_CURRENT_PROGRAM
47
- glUseProgram @program
48
-
49
- if block_given?
50
- result = yield self
51
- $window.flush # TODO: need to work out how to make shader affect delayed draws.
52
- glUseProgram previous_program
53
- end
54
-
55
- result
56
- end
57
-
58
- # Disable the shader program (not needed in block version of #use).
59
- def disable
60
- glUseProgram 0 # Disable the shader!
61
- end
62
-
63
- # Is this the current shader program?
64
- def current?
65
- glGetIntegerv(GL_CURRENT_PROGRAM) == @program
66
- end
67
-
68
- # Set the value of a uniform.
69
- def []=(name, value)
70
- use do
71
- case value
72
- when true, GL_TRUE
73
- glUniform1i uniform(name), 1
74
-
75
- when false, GL_FALSE
76
- glUniform1i uniform(name), 0
77
-
78
- when Float
79
- glUniform1f uniform(name), value
80
-
81
- when Integer
82
- glUniform1i uniform(name), value
83
-
84
- when Array
85
- size = value.size
86
-
87
- raise ArgumentError, "Empty array not supported for uniform data" if size.zero?
88
- raise ArgumentError, "Only support uniforms up to 4 elements" if size > 4
89
-
90
- case value[0]
91
- when Float
92
- GL.send "glUniform#{size}f", uniform(name), *value
93
-
94
- when Integer
95
- GL.send "glUniform#{size}i", uniform(name), *value
96
-
97
- else
98
- raise ArgumentError, "Uniform data type not supported for element of type: #{value[0].class}"
99
- end
100
-
101
- else
102
- raise ArgumentError, "Uniform data type not supported for type: #{value.class}"
103
- end
104
- end
105
- end
106
-
107
-
108
-
109
- def uniform(name)
110
- location = @uniform_locations[name]
111
- if location
112
- location
113
- else
114
- location = glGetUniformLocation @program, name.to_s
115
- raise ShaderUniformError, "No #{name} uniform specified in program" if location == INVALID_LOCATION
116
- @uniform_locations[name] = location
117
- end
118
- end
119
-
120
- protected
121
- def attribute(name)
122
- location = @attribute_locations[name]
123
- if location
124
- location
125
- else
126
- location = glGetAttribLocation @program, name.to_s
127
- raise ShaderAttributeError, "No #{name} attribute specified in program" if location == INVALID_LOCATION
128
- @attribute_locations[name] = location
129
- end
130
- end
131
-
132
- protected
133
- def compile(type, source)
134
- shader = glCreateShader type
135
- glShaderSource shader, source
136
- glCompileShader shader
137
-
138
- unless glGetShaderiv shader, GL_COMPILE_STATUS
139
- error = glGetShaderInfoLog shader
140
- error_lines = error.scan(/0\((\d+)\)+/m).map {|num| num.first.to_i }.uniq
141
-
142
- if type == GL_VERTEX_SHADER
143
- type_name = "Vertex"
144
- source = @vertex_source
145
- else
146
- type_name = "Fragment"
147
- source = @fragment_source
148
- end
149
-
150
- source_lines = source.split("\n")
151
- lines = error_lines.map {|i| "#{i.to_s.rjust 3}: #{source_lines[i - 1].rstrip}" }.join "\n"
152
- raise ShaderCompileError, "#{type_name} shader error: #{glGetShaderInfoLog(shader)}\n#{lines}"
153
- end
154
-
155
- shader
156
- end
157
-
158
- protected
159
- def link
160
- @program = glCreateProgram
161
- glAttachShader @program, @vertex
162
- glAttachShader @program, @fragment
163
- glLinkProgram @program
164
-
165
- unless glGetProgramiv @program, GL_LINK_STATUS
166
- raise ShaderLinkError, "Shader link error: #{glGetProgramInfoLog(@program)}"
167
- end
168
-
169
- nil
170
- end
171
- end
172
- end
@@ -1,183 +0,0 @@
1
- module Ashton
2
- class Framebuffer
3
- TEXTURE_COORDINATES = [
4
- [0, 1], # TL
5
- [0, 0], # BL
6
- [1, 0], # TR
7
- [1, 1], # BR
8
- ]
9
-
10
- TEXTURE_COORDINATES_FLIPPED = [
11
- [0, 0], # BL
12
- [0, 1], # TL
13
- [1, 1], # BR
14
- [1, 0], # TR
15
- ]
16
-
17
- attr_reader :width, :height, :texture
18
-
19
- def initialize(width, height)
20
- @width, @height = width.to_i, height.to_i
21
- @fbo, @texture = init_framebuffer
22
-
23
- status = glCheckFramebufferStatusEXT GL_FRAMEBUFFER_EXT
24
- raise unless status == GL_FRAMEBUFFER_COMPLETE_EXT
25
-
26
- clear
27
-
28
- glBindFramebufferEXT GL_FRAMEBUFFER_EXT, 0
29
- glBindRenderbufferEXT GL_RENDERBUFFER_EXT, 0
30
- end
31
-
32
- # Clears the buffer to transparent.
33
- def clear(options = {})
34
- options = {
35
- color: [0.0, 0.0, 0.0, 0.0],
36
- }.merge! options
37
-
38
- glBindFramebufferEXT GL_FRAMEBUFFER_EXT, @fbo
39
-
40
- glClearColor *options[:color]
41
- glClear GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT
42
-
43
- glBindFramebufferEXT GL_FRAMEBUFFER_EXT, 0
44
- end
45
-
46
- # Enable the framebuffer to use (e.g. to draw or convert it).
47
- # BUG: This will force all draws performed in, AND BEFORE, the block!
48
- def use
49
- raise ArgumentError, "block required" unless block_given?
50
-
51
- glBindFramebufferEXT GL_FRAMEBUFFER_EXT, @fbo
52
- result = yield self
53
-
54
- $window.flush
55
- glBindFramebufferEXT GL_FRAMEBUFFER_EXT, 0
56
-
57
- result
58
- end
59
-
60
- # Draw the image, _immediately_ (no z-ordering by Gosu).
61
- #
62
- # This is not as versatile as converting the Framebuffer into a Gosu::Image and then
63
- # drawing it, but it is many times faster, so use it when you are updating the buffer
64
- # every frame, rather than just composing an image.
65
- #
66
- # Drawing in Gosu orientation will be flipped in standard OpenGL and visa versa.
67
- #
68
- # @param x [Number]
69
- # @param y [Number]
70
- # @option options :orientation [:gosu, :opengl] (:gosu)
71
- def draw x, y, options = {}
72
- options = {
73
- :orientation => :gosu,
74
- }.merge! options
75
-
76
- glEnable GL_TEXTURE_2D
77
- glBindTexture GL_TEXTURE_2D, @texture
78
-
79
- coords = case options[:orientation]
80
- when :gosu then TEXTURE_COORDINATES_FLIPPED
81
- when :opengl then TEXTURE_COORDINATES
82
- else raise ArgumentError, ":orientation option expected to be either :opengl or :gosu"
83
- end
84
-
85
- glBegin GL_QUADS do
86
- glTexCoord2d *coords[0]
87
- glVertex2d x, y + @height # BL
88
-
89
- glTexCoord2d *coords[1]
90
- glVertex2d x, y # TL
91
-
92
- glTexCoord2d *coords[2]
93
- glVertex2d x + @width, y # TR
94
-
95
- glTexCoord2d *coords[3]
96
- glVertex2d x + @width, y + @height # BR
97
- end
98
-
99
- glBindTexture GL_TEXTURE_2D, 0
100
- end
101
-
102
- # Convert the current contents of the buffer into a Gosu::Image
103
- #
104
- # @option options [Boolean] :caching (true) TexPlay behaviour.
105
- # @option options [Boolean] :tileable (false) Standard Gosu behaviour.
106
- # @option options [Array<Integer>] :rect ([0, 0, width, height]) Rectangular area of buffer to use to create the image [x, y, w, h]
107
- def to_image(options = {})
108
- options = {
109
- rect: [0, 0, @width, @height],
110
- tileable: false,
111
- }.merge! options
112
-
113
- rect = options[:rect]
114
-
115
- # Draw onto the clean flip buffer, in order to flip before saving.
116
- @fbo_flip, @fbo_flip_texture = init_framebuffer unless defined? @fbo_flip
117
-
118
- glBindFramebufferEXT GL_FRAMEBUFFER_EXT, @fbo_flip
119
- glClearColor 0, 0, 0, 0
120
- glClear GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT
121
- draw 0, 0
122
-
123
- # Read the data in the flip-buffer.
124
- glBindTexture GL_TEXTURE_2D, @fbo_flip_texture
125
- blob = glReadPixels *rect, GL_RGBA, GL_UNSIGNED_BYTE
126
-
127
- # Clean up.
128
- glBindTexture GL_TEXTURE_2D, 0
129
- glBindFramebufferEXT GL_FRAMEBUFFER_EXT, 0
130
-
131
- # Create a new Image from the flipped pixel data.
132
- stub = ImageStub.new blob, rect[2], rect[3]
133
- if defined? TexPlay
134
- Gosu::Image.new $window, stub, options[:tileable], options
135
- else
136
- Gosu::Image.new $window, stub, options[:tileable]
137
- end
138
-
139
- end
140
-
141
- # Create an fbo and its texture
142
- def init_framebuffer
143
- fbo = glGenFramebuffersEXT(1)[0]
144
- glBindFramebufferEXT GL_FRAMEBUFFER_EXT, fbo
145
-
146
- texture = init_framebuffer_texture
147
-
148
- glFramebufferTexture2DEXT GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, texture, 0
149
-
150
- [fbo, texture]
151
- end
152
-
153
- protected
154
- # Called by init_framebuffer.
155
- def init_framebuffer_texture
156
- texture = glGenTextures(1)[0]
157
- glBindTexture GL_TEXTURE_2D, texture
158
-
159
- glTexParameterf GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE
160
- glTexParameterf GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE
161
- glTexParameteri GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST
162
- glTexParameteri GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST
163
-
164
- glTexImage2D GL_TEXTURE_2D, 0, GL_RGBA8, @width, @height,
165
- 0, GL_RGBA, GL_UNSIGNED_BYTE, nil
166
-
167
- glBindTexture GL_TEXTURE_2D, 0 # Unbind the texture
168
-
169
- texture
170
- end
171
-
172
- protected
173
- def delete
174
- glDeleteFramebuffersEXT @fbo
175
- glDeleteTextures @texture
176
-
177
- glDeleteFramebuffersEXT @fbo_flip if defined? @fbo_flip
178
- glDeleteTextures @fbo_flip_texture if defined? @fbo_flip_texture
179
-
180
- glBindFramebufferEXT GL_FRAMEBUFFER_EXT, 0
181
- end
182
- end
183
- end
@@ -1,83 +0,0 @@
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
@@ -1,9 +0,0 @@
1
- #version 110
2
-
3
- varying vec2 var_TexCoord;
4
-
5
- void main()
6
- {
7
- gl_Position = ftransform();
8
- var_TexCoord = gl_MultiTexCoord0.xy;
9
- }