diff --git a/examples/HerokuShaders/project.lime.xml b/examples/HerokuShaders/project.lime.xml deleted file mode 100644 index 84f4ab655..000000000 --- a/examples/HerokuShaders/project.lime.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/examples/HerokuShaders/src/Main.hx b/examples/HerokuShaders/src/Main.hx deleted file mode 100644 index 4d54cd9f0..000000000 --- a/examples/HerokuShaders/src/Main.hx +++ /dev/null @@ -1,330 +0,0 @@ - - //Ported and modified from OpenFL examples - //underscorediscovery - -import lime.utils.Assets; -import lime.Lime; - - //Import GL stuff from Lime -import lime.gl.GL; -import lime.gl.GLBuffer; -import lime.gl.GLProgram; -import lime.gl.GLShader; - - //utils -import lime.utils.Float32Array; -import lime.geometry.Matrix3D; -import lime.InputHandler.MouseEvent; - - //import the shader code for the examples - //todo : Port to assets like latest openfl example -import shaders.FragmentShader_4278_1; -import shaders.FragmentShader_5359_8; -import shaders.FragmentShader_5398_8; -import shaders.FragmentShader_5454_21; -import shaders.FragmentShader_5492; -import shaders.FragmentShader_5733; -import shaders.FragmentShader_5805_18; -import shaders.FragmentShader_5812; -import shaders.FragmentShader_5891_5; -import shaders.FragmentShader_6022; -import shaders.FragmentShader_6043_1; -import shaders.FragmentShader_6049; -import shaders.FragmentShader_6147_1; -import shaders.FragmentShader_6162; -import shaders.FragmentShader_6175; -import shaders.FragmentShader_6223_2; -import shaders.FragmentShader_6238; -import shaders.FragmentShader_6284_1; -import shaders.FragmentShader_6286; -import shaders.FragmentShader_6288_1; -import shaders.VertexShader; - -class Main { - - public var lib : Lime; - - - //A bunch of these shaders are expensive so for most users this is - //is a bad idea to just abuse their system when they run the sample. - //You can set the below value to true to see them though. - public var include_slow_expensive_examples : Bool = false; - public var slow_end_index : Int = 6; - - private var mouse_x : Int = 0; - private var mouse_y : Int = 0; - - //The maximum time to spend on a shader example before cycling - //We start really quickly, - //a) because we want to make sure the user knows there are more than 1 and - //b) because the first index is fixed, but the randomness can pick a new one - private static var maxTime = 2; - - //The current active shader example in the list - private var currentIndex:Int; - - //The OpenGL values - private var buffer:GLBuffer; - private var currentProgram:GLProgram; - private var positionAttribute:Dynamic; - private var timeUniform:Dynamic; - private var mouseUniform:Dynamic; - private var resolutionUniform:Dynamic; - private var backbufferUniform:Dynamic; - private var surfaceSizeUniform:Dynamic; - private var startTime:Dynamic; - private var vertexPosition:Dynamic; - - public function new() {} - - //Ready is called by lime when it has created the window etc. - //We can start using GL here. - public function ready( _lime : Lime ) { - - //Store a reference, in case we want it - lib = _lime; - - // Init the shaders and view - init(); - - } //ready - - public function init() { - - //Find the starting index - currentIndex = (include_slow_expensive_examples ? 0 : slow_end_index); - - //Create a vertex buffer, for a Quad, bind it and submit it once using STATIC draw so it stays in GPU - buffer = GL.createBuffer(); - GL.bindBuffer(GL.ARRAY_BUFFER, buffer); - GL.bufferData(GL.ARRAY_BUFFER, new Float32Array ([ -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0 ]), GL.STATIC_DRAW); - - //start the mouse center screen - //lime stores the window size in it's config (as well as other window options) - mouse_x = Std.int(lib.config.width/2); - mouse_y = Std.int(lib.config.height/2); - - //Compile the shader selected - compile(); - - } //init - - //lime will call this when the mouse moves, so we can get a position - public function onmousemove( e:MouseEvent ) { - - mouse_x = Std.int(e.x); - mouse_y = Std.int(e.y); - - } //onmousemove - - //we also set this on mouse down, so mobile has some interactivity (could also use ontouchdown) - public function onmousedown( e:MouseEvent ) { - - mouse_x = Std.int(e.x); - mouse_y = Std.int(e.y); - - } //onmousedown - - //called each frame by lime for logic (called before render) - public function update() { - - //check if we have passed the max time for watching this shader - var time = haxe.Timer.stamp() - startTime; - if (time > maxTime && fragmentShaders.length > 1) { - - //Pick a random example to show - - #if !mobile - if( include_slow_expensive_examples ) { - currentIndex = Std.random( fragmentShaders.length - 1 ); - } else { - currentIndex = slow_end_index + Std.random( (fragmentShaders.length - slow_end_index - 1) ); - } - #else - currentIndex = Std.random( fragmentShaders.length - 1 ); - #end - - //recompile using this index - compile(); - - //switch time if after the first one - if(maxTime == 2) maxTime = 10; - - } //if time is passed max time - - } //update - - - //Called each frame by lime, when the window wants to render - public function render() { - - //Set the viewport to the config window size - GL.viewport( 0, 0, lib.config.width, lib.config.height ); - - //If the shader failed to link or compile we don't render yet - if (currentProgram == null) return; - - //The current time is the time since the last shader started, and now - var time = haxe.Timer.stamp() - startTime; - - //Activate the current shader - GL.useProgram(currentProgram); - - //Pass the attributes to the shaders - GL.uniform1f( timeUniform, time ); - GL.uniform2f( mouseUniform, (mouse_x / lib.config.width) * 2 - 1, (mouse_y / lib.config.height) * 2 - 1 ); - GL.uniform2f( resolutionUniform, lib.config.width, lib.config.height ); - GL.uniform1i( backbufferUniform, 0 ); - GL.uniform2f( surfaceSizeUniform, lib.config.width, lib.config.height ); - - //Point to the buffer we created earlier to draw - GL.bindBuffer( GL.ARRAY_BUFFER, buffer ); - GL.vertexAttribPointer( positionAttribute, 2, GL.FLOAT, false, 0, 0 ); - GL.vertexAttribPointer( vertexPosition, 2, GL.FLOAT, false, 0, 0 ); - - //Clear the screen - GL.clearColor(0, 0, 0, 1); - GL.clear(GL.COLOR_BUFFER_BIT | GL.DEPTH_BUFFER_BIT ); - - //And finally draw the quad! - GL.drawArrays (GL.TRIANGLES, 0, 6); - - } //render - - private function compile ():Void { - - var program = GL.createProgram (); - var vertex = VertexShader.source; - - //When on web specifically we prefix the shader with a required precision qualifier - #if desktop - var fragment = ""; - #else - var fragment = "precision mediump float;"; - #end - - fragment += fragmentShaders[currentIndex].source; - - var vs = createShader(vertex, GL.VERTEX_SHADER); - var fs = createShader(fragment, GL.FRAGMENT_SHADER); - - //Woops, this didn't compile so jump out - //todo : Add compiler logs. - if (vs == null || fs == null) { - return; - } - - //Attach the shaders to the program - GL.attachShader(program, vs); - GL.attachShader(program, fs); - //Clean up unnecessary shader references (they are stored by index in the Program) - GL.deleteShader(vs); - GL.deleteShader(fs); - - //Link the program on the GPU - GL.linkProgram (program); - - //Check if linking was good - if (GL.getProgramParameter (program, GL.LINK_STATUS) == 0) { - - trace( GL.getProgramInfoLog(program) ); - trace( "VALIDATE_STATUS: " + GL.getProgramParameter (program, GL.VALIDATE_STATUS)); - trace( "ERROR: " + GL.getError() ); - return; - - } //GL.LINK_STATUS == 0 - - //If we had an existing program? Clean up - if (currentProgram != null) { - GL.deleteProgram (currentProgram); - } - - //Store the new program - currentProgram = program; - //Activate the new program - GL.useProgram(currentProgram); - - //Make sure that the attributes are referenced correctly - positionAttribute = GL.getAttribLocation(currentProgram, "surfacePosAttrib"); - vertexPosition = GL.getAttribLocation (currentProgram, "position"); - //As well as enabled - GL.enableVertexAttribArray (vertexPosition); - GL.enableVertexAttribArray(positionAttribute); - - //And for the uniforms, we store their location because it can change per shader - timeUniform = GL.getUniformLocation(program, "time"); - mouseUniform = GL.getUniformLocation(program, "mouse"); - resolutionUniform = GL.getUniformLocation(program, "resolution"); - backbufferUniform = GL.getUniformLocation(program, "backbuffer"); - surfaceSizeUniform = GL.getUniformLocation(program, "surfaceSize"); - - //So that we can calculate the new shader running time - startTime = haxe.Timer.stamp(); - - } //compile - - //Take a source shader, compile it, check for errors and return the GLShader - private function createShader( source:String, type:Int ) : GLShader { - - var shader = GL.createShader (type); - - GL.shaderSource(shader, source); - GL.compileShader(shader); - - if (GL.getShaderParameter(shader, GL.COMPILE_STATUS) == 0) { - return null; - } - - return shader; - - } //createShader - - -#if !mobile - - //The list of shaders to cycle through - private static var fragmentShaders:Array = [ - //These are the more expensive ones, excluded by default - FragmentShader_6223_2, - FragmentShader_6175, - FragmentShader_6162, - FragmentShader_6049, - FragmentShader_5359_8, - FragmentShader_4278_1, - //These are the ok ones - FragmentShader_6286, - FragmentShader_6288_1, - FragmentShader_6284_1, - FragmentShader_6238, - FragmentShader_6147_1, - FragmentShader_6043_1, - FragmentShader_6022, - FragmentShader_5891_5, - FragmentShader_5805_18, - FragmentShader_5812, - FragmentShader_5733, - FragmentShader_5454_21, - FragmentShader_5492, - FragmentShader_5398_8 - - ]; - -#else //!mobile - - //These are mobile ones - private static var fragmentShaders:Array = [ - FragmentShader_6284_1, - FragmentShader_6238, - FragmentShader_6147_1, - FragmentShader_5891_5, - FragmentShader_5805_18, - FragmentShader_5492, - FragmentShader_5398_8 - ]; - -#end //if !mobile - - -} //Main class - - diff --git a/examples/HerokuShaders/src/shaders/FragmentShader_4278_1.hx b/examples/HerokuShaders/src/shaders/FragmentShader_4278_1.hx deleted file mode 100644 index 517463dee..000000000 --- a/examples/HerokuShaders/src/shaders/FragmentShader_4278_1.hx +++ /dev/null @@ -1,98 +0,0 @@ -package shaders; - - -class FragmentShader_4278_1 { - - - //http://glsl.heroku.com/e#4278.1 - - - public static var source = " - - uniform float time; - uniform vec2 resolution; - uniform vec2 mouse; - - mat3 genRotMat(float a0,float x,float y,float z){ - float a=a0*3.1415926535897932384626433832795/180.0; - return mat3( - 1.0+(1.0-cos(a))*(x*x-1.0), - -z*sin(a)+(1.0-cos(a))*x*y, - y*sin(a)+(1.0-cos(a))*x*z, - z*sin(a)+(1.0-cos(a))*x*y, - 1.0+(1.0-cos(a))*(y*y-1.0), - -x*sin(a)+(1.0-cos(a))*y*z, - -y*sin(a)+(1.0-cos(a))*x*z, - x*sin(a)+(1.0-cos(a))*y*z, - 1.0+(1.0-cos(a))*(z*z-1.0) - ); - } - - float cubeDist(vec3 p){ - return max(abs(p.x),max(abs(p.y),abs(p.z))); - } - - void main(){ - float spread=1.0; - float total=0.0; - float delta=0.01; - float cameraZ=-1.75; - float nearZ=-1.0; - float farZ=1.0; - float gs=0.0; - int iter=0; - vec3 col=vec3(0.0,0.0,0.0); - vec3 ray=vec3(0.0,0.0,0.0); - mat3 rot=genRotMat(sin(time/4.13)*360.0,1.0,0.0,0.0); - rot=rot*genRotMat(sin(time/4.64)*360.0,0.0,1.0,0.0); - rot=rot*genRotMat(sin(time/4.24)*360.0,0.0,0.0,1.0); - vec2 p=vec2(0.0,0.0); - p.x=gl_FragCoord.x/resolution.y-0.5*resolution.x/resolution.y; - p.y=gl_FragCoord.y/resolution.y-0.5; - ray.xy+=p.xy*spread*(nearZ-cameraZ); - vec3 rayDir=vec3(spread*p.xy*delta,delta); - vec3 tempDir=rayDir*rot; - vec3 norm; - ray.z=nearZ; - bool refracted=false; - for(int i=0;i<250;i++){ - vec3 temp; - vec3 tempc; - float val; - temp=ray.xyz*rot; - tempc=temp; - float thres=0.5; - if(tempc.x<0.0)tempc.x=abs(tempc.x); - if(tempc.x=farZ)break; - } - col.x=col.x/float(iter); - col.y=col.y/float(iter); - col.z=col.z/float(iter); - gl_FragColor=vec4(col,1.0); - } - - "; - - -} \ No newline at end of file diff --git a/examples/HerokuShaders/src/shaders/FragmentShader_5359_8.hx b/examples/HerokuShaders/src/shaders/FragmentShader_5359_8.hx deleted file mode 100644 index 1ea8d2f4a..000000000 --- a/examples/HerokuShaders/src/shaders/FragmentShader_5359_8.hx +++ /dev/null @@ -1,146 +0,0 @@ -package shaders; - - -class FragmentShader_5359_8 { - - - //http://glsl.heroku.com/e#5359.8 - - - public static var source = " - - uniform float time; - uniform vec2 resolution; - - - // NEBULA - CoffeeBreakStudios.com (CBS) - // Work in progress.... - // - // 3148.26: Switched from classic to simplex noise - // 3148.27: Reduced number of stars - // 3249.0: Switched to fast computed 3D noise. Less quality but ~ 2x faster - // 3249.5: Removed use of random number generator to gain performance - // 3265.0: Added rotation: glsl.heroku.com/e#3005.1 - // 3265.6: Faster random number generator - // 5359.0: Added Barrel distortion and different starfield: http://glsl.heroku.com/e#5334.3 - - //Utility functions - - vec3 fade(vec3 t) { - return vec3(1.0,1.0,1.0); - } - - vec2 rotate(vec2 point, float rads) { - float cs = cos(rads); - float sn = sin(rads); - return point * mat2(cs, -sn, sn, cs); - } - - vec4 randomizer4(const vec4 x) - { - vec4 z = mod(x, vec4(5612.0)); - z = mod(z, vec4(3.1415927 * 2.0)); - return(fract(cos(z) * vec4(56812.5453))); - } - - float rand(vec2 co){ - return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453); - } - - // Fast computed noise - // http://www.gamedev.net/topic/502913-fast-computed-noise/ - - const float A = 1.0; - const float B = 57.0; - const float C = 113.0; - const vec3 ABC = vec3(A, B, C); - const vec4 A3 = vec4(0, B, C, C+B); - const vec4 A4 = vec4(A, A+B, C+A, C+A+B); - - float cnoise4(const in vec3 xx) - { - vec3 x = mod(xx + 32768.0, 65536.0); - vec3 ix = floor(x); - vec3 fx = fract(x); - vec3 wx = fx*fx*(3.0-2.0*fx); - float nn = dot(ix, ABC); - - vec4 N1 = nn + A3; - vec4 N2 = nn + A4; - vec4 R1 = randomizer4(N1); - vec4 R2 = randomizer4(N2); - vec4 R = mix(R1, R2, wx.x); - float re = mix(mix(R.x, R.y, wx.y), mix(R.z, R.w, wx.y), wx.z); - - return 1.0 - 2.0 * re; - } - float surface3 ( vec3 coord, float frequency ) { - - float n = 0.0; - - n += 1.0 * abs( cnoise4( coord * frequency ) ); - n += 0.5 * abs( cnoise4( coord * frequency * 2.0 ) ); - n += 0.25 * abs( cnoise4( coord * frequency * 4.0 ) ); - n += 0.125 * abs( cnoise4( coord * frequency * 8.0 ) ); - n += 0.0625 * abs( cnoise4( coord * frequency * 16.0 ) ); - - return n; - } - - vec2 barrelDistortion(vec2 coord) { - vec2 cc = coord;// - 0.5; - float dist = dot(cc, cc); - return coord + cc * (dist * dist) * .4; - } - - void main( void ) { - float rads = radians(time*3.15); - //vec2 position = gl_FragCoord.xy / resolution.xy; - vec2 position=barrelDistortion(-1.0+2.0*((gl_FragCoord.xy)/resolution.xy)); - vec2 positionStars = ( gl_FragCoord.xy - resolution.xy*.5 ) / resolution.x; - position += rotate(position, rads); - float n = surface3(vec3(position*sin(time*0.1), time * 0.05)*mat3(1,sin(1.0),0,0,.8,.6,0,-.6,.8),0.9); - float n2 = surface3(vec3(position*cos(time*0.1), time * 0.04)*mat3(1,cos(1.0),0,0,.8,.6,0,-.6,.8),0.8); - float lum = length(n); - float lum2 = length(n2); - - vec3 tc = pow(vec3(1.0-lum),vec3(sin(position.x)+cos(time)+4.0,8.0+sin(time)+4.0,8.0)); - vec3 tc2 = pow(vec3(1.1-lum2),vec3(5.0,position.y+cos(time)+7.0,sin(position.x)+sin(time)+2.0)); - vec3 curr_color = (tc*0.8) + (tc2*0.5); - - - // 256 angle steps - float angle = atan(positionStars.y,positionStars.x)/(2.*3.14159265359); - angle += rads*0.5; - angle -= floor(angle); - - float rad = length(positionStars); - - float color = 0.0; - for (int i = 0; i < 10; i++) { - float angleFract = fract(angle*256.); - float angleRnd = floor(angle*256.)+1.; - float angleRnd1 = fract(angleRnd*fract(angleRnd*.7235)*45.1); - float angleRnd2 = fract(angleRnd*fract(angleRnd*.82657)*13.724); - float t = time+angleRnd1*10.; - float radDist = sqrt(angleRnd2+float(i)); - - float adist = radDist/rad*.1; - float dist = (t*.1+adist); - dist = abs(fract(dist)-.5); - color += max(0.,.5-dist*40./adist)*(.5-abs(angleFract-.5))*5./adist/radDist; - - angle = fract(angle+.61); - } - float color1 = color*rad; - - //curr_color += color/(n+n2); - - - gl_FragColor = vec4(curr_color, 1.0)+vec4( color1,color1,color,color1)/(n+n2); - } - - "; - - -} \ No newline at end of file diff --git a/examples/HerokuShaders/src/shaders/FragmentShader_5398_8.hx b/examples/HerokuShaders/src/shaders/FragmentShader_5398_8.hx deleted file mode 100644 index 0f91088d6..000000000 --- a/examples/HerokuShaders/src/shaders/FragmentShader_5398_8.hx +++ /dev/null @@ -1,44 +0,0 @@ -package shaders; - - -class FragmentShader_5398_8 { - - - //http://glsl.heroku.com/e#5398.8 - - - public static var source = " - - uniform float time; - uniform vec2 mouse; - uniform vec2 resolution; - - void main( void ) { - - float scale = resolution.y / 100.0; - float ring = 50.0; - float radius = resolution.x*1.0; - float gap = scale*.5; - vec2 pos = gl_FragCoord.xy - resolution.xy*.5; - - float d = length(pos); - - // Create the wiggle - d += (sin(pos.y*0.25/scale+time)*sin(pos.x*0.25/scale+time*.5))*scale*2.0; - - // Compute the distance to the closest ring - float v = mod(d + radius/(ring*2.0), radius/ring); - v = abs(v - radius/(ring*2.0)); - - v = clamp(v-gap, 0.0, 1.0); - - d /= radius; - vec3 m = fract((d-1.0)*vec3(ring*-.5, -ring, ring*.25)*0.5); - - gl_FragColor = vec4( m*v, 1.0 ); - } - - "; - - -} \ No newline at end of file diff --git a/examples/HerokuShaders/src/shaders/FragmentShader_5454_21.hx b/examples/HerokuShaders/src/shaders/FragmentShader_5454_21.hx deleted file mode 100644 index 1f1605329..000000000 --- a/examples/HerokuShaders/src/shaders/FragmentShader_5454_21.hx +++ /dev/null @@ -1,141 +0,0 @@ -package shaders; - - -class FragmentShader_5454_21 { - - - //http://glsl.heroku.com/e#5454.21 - - - public static var source = " - - uniform float time; - uniform vec2 mouse; - uniform vec2 resolution; - - // from http://glsl.heroku.com/e#5484.0 - vec3 asteroids( vec2 position ) { - - // 256 angle steps - float angle = atan(position.y,position.x)/(2.*3.14159265359); - angle -= floor(angle); - float rad = length(position); - - float color = 0.0; - for (int i = 0; i < 5; i++) { - float angleFract = fract(angle*256.); - float angleRnd = floor(angle*256.)+1.; - float angleRnd1 = fract(angleRnd*fract(angleRnd*.7235)*45.1); - float angleRnd2 = fract(angleRnd*fract(angleRnd*.82657)*13.724); - float t = -time+angleRnd1*10.; - float radDist = sqrt(angleRnd2+float(i)); - - float adist = radDist/rad*.1; - float dist = (t*.1+adist); - dist = abs(fract(dist)-.5); - color += max(0.,.5-dist*40./adist)*(.5-abs(angleFract-.5))*5./adist/radDist; - - angle = fract(angle+.61); - } - - return vec3( color )*.3; - } - - // from http://glsl.heroku.com/e#5248.0 - #define BIAS 0.1 - #define SHARPNESS 3.0 - vec3 star(vec2 position, float BLADES) { - float blade = clamp(pow(sin(atan(position.y,position.x )*BLADES)+BIAS, SHARPNESS), 0.0, 1.0); - vec3 color = mix(vec3(-0.34, -0.5, -1.0), vec3(0.0, -0.5, -1.0), (position.y + 1.0) * 0.25); - float d = 1.0/length(position) * 0.075; - color += vec3(0.95, 0.65, 0.30) * d; - color += vec3(0.95, 0.45, 0.30) * min(1.0, blade *0.7) * d; - return color; - } - - vec3 star2(vec2 position, float BLADES) { - float blade = clamp(pow(sin(atan(position.y,position.x )*BLADES + time*.5)+BIAS, 8.0), 0.0, 1.0); - vec3 color = mix(vec3(-0.34, -0.5, -0.0), vec3(0.0, -0.5, -0.0), (position.y + 1.0) * 0.25); - float d = 1.0/length(position) * 0.075; - color += vec3(0.95, 0.65, 0.30) * d; - color += vec3(0.95, 0.45, 0.30) * min(1.0, blade *0.7)*0.5; - return max(color.rgb, 0.0)*.5; - } - - - // Tweaked from http://glsl.heroku.com/e#4982.0 - float hash( float n ) { return fract(sin(n)*43758.5453); } - - float noise( in vec2 x ) - { - vec2 p = floor(x); - vec2 f = fract(x); - f = f*f*(3.0-2.0*f); - float n = p.x + p.y*57.0; - float res = mix(mix(hash(n+0.0), hash(n+1.0),f.x), mix(hash(n+57.0), hash(n+58.0),f.x),f.y); - return res; - } - - vec3 cloud(vec2 p) { - vec3 f = vec3(0.0); - f += 0.5000*noise(p*10.0)*vec3(.45, .55, 1.0); - f += 0.2500*noise(p*20.0)*vec3(.85, .45, 1.0); - f += 0.1250*noise(p*40.0)*vec3(1.0, .00, 0.3); - f += 0.0625*noise(p*80.0)*vec3(1.0, 1.0, 1.0); - return f*.5; - } - - const float SPEED = 0.005; - const float SCALE = 80.0; - const float DENSITY = 1.5; - const float BRIGHTNESS = 10.0; - vec2 ORIGIN = resolution.xy*.5; - - float rand(vec2 co){ return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453); } - - vec3 layer(float i, vec2 pos, float dist, vec2 coord) { - float a = pow((1.0-dist),20.0); - float t = i*10.0 - time*i*i; - float r = coord.x - (t*SPEED); - float c = fract(a+coord.y + i*.543); - vec2 p = vec2(r, c*.5)*SCALE*(4.0/(i*i)); - vec2 uv = fract(p)*2.0-1.0; - float m = clamp((rand(floor(p))-DENSITY/i)*BRIGHTNESS, 0.0, 1.0); - return clamp(star(uv*.5, 6.0)*m*dist, 0.0, 1.0); - } - - void main( void ) { - - vec2 pos = gl_FragCoord.xy - ORIGIN ; - float dist = length(pos) / resolution.y; - vec2 coord = vec2(pow(dist, 0.1), atan(pos.x, pos.y) / (3.1415926*2.0)); - - // Nebulous cloud - vec3 color = cloud(pos/resolution); - - // Background stars - float a = pow((1.0-dist),20.0); - float t = time*-.05; - float r = coord.x - (t*0.005); - float c = fract(a+coord.y + 0.0*.543); - vec2 p = vec2(r, c*.5)*4000.0; - vec2 uv = fract(p)*2.0-1.0; - float m = clamp((rand(floor(p))-.9)*10.0, 0.0, 1.0); - color += clamp((1.0-length(uv*2.0))*m*dist, 0.0, 1.0); - - color += asteroids(pos/resolution.x); - - // Flying stars into black hole - color += layer(2.0, pos, dist, coord); - color += layer(3.0, pos, dist, coord); - color += layer(4.0, pos, dist, coord); - - color += star2(pos/resolution, 2.0); - - gl_FragColor = vec4(color, 1.0); - } - - "; - - -} \ No newline at end of file diff --git a/examples/HerokuShaders/src/shaders/FragmentShader_5492.hx b/examples/HerokuShaders/src/shaders/FragmentShader_5492.hx deleted file mode 100644 index 988852255..000000000 --- a/examples/HerokuShaders/src/shaders/FragmentShader_5492.hx +++ /dev/null @@ -1,140 +0,0 @@ -package shaders; - - -class FragmentShader_5492 { - - - //http://glsl.heroku.com/e#5492.0 - - - public static var source = " - - uniform float time; - uniform vec2 mouse; - uniform vec2 resolution; - - - // Helper constants - #define F2 0.366025403 - #define G2 0.211324865 - #define K 0.0243902439 // 1/41 - - // Permutation polynomial - float permute(float x) { - return mod((34.0 * x + 1.0)*x, 289.0); - } - - // Gradient mapping with an extra rotation. - vec2 grad2(vec2 p, float rot) { - #if 1 - // Map from a line to a diamond such that a shift maps to a rotation. - float u = permute(permute(p.x) + p.y) * K + rot; // Rotate by shift - u = 4.0 * fract(u) - 2.0; - return vec2(abs(u)-1.0, abs(abs(u+1.0)-2.0)-1.0); - #else - #define TWOPI 6.28318530718 - // For more isotropic gradients, sin/cos can be used instead. - float u = permute(permute(p.x) + p.y) * K + rot; // Rotate by shift - u = fract(u) * TWOPI; - return vec2(cos(u), sin(u)); - #endif - } - - float srdnoise(in vec2 P, in float rot, out vec2 grad) { - - // Transform input point to the skewed simplex grid - vec2 Ps = P + dot(P, vec2(F2)); - - // Round down to simplex origin - vec2 Pi = floor(Ps); - - // Transform simplex origin back to (x,y) system - vec2 P0 = Pi - dot(Pi, vec2(G2)); - - // Find (x,y) offsets from simplex origin to first corner - vec2 v0 = P - P0; - - // Pick (+x, +y) or (+y, +x) increment sequence - vec2 i1 = (v0.x > v0.y) ? vec2(1.0, 0.0) : vec2 (0.0, 1.0); - - // Determine the offsets for the other two corners - vec2 v1 = v0 - i1 + G2; - vec2 v2 = v0 - 1.0 + 2.0 * G2; - - // Wrap coordinates at 289 to avoid float precision problems - Pi = mod(Pi, 289.0); - - // Calculate the circularly symmetric part of each noise wiggle - vec3 t = max(0.5 - vec3(dot(v0,v0), dot(v1,v1), dot(v2,v2)), 0.0); - vec3 t2 = t*t; - vec3 t4 = t2*t2; - - // Calculate the gradients for the three corners - vec2 g0 = grad2(Pi, rot); - vec2 g1 = grad2(Pi + i1, rot); - vec2 g2 = grad2(Pi + 1.0, rot); - - // Compute noise contributions from each corner - vec3 gv = vec3(dot(g0,v0), dot(g1,v1), dot(g2,v2)); // ramp: g dot v - vec3 n = t4 * gv; // Circular kernel times linear ramp - - // Compute partial derivatives in x and y - vec3 temp = t2 * t * gv; - vec3 gradx = temp * vec3(v0.x, v1.x, v2.x); - vec3 grady = temp * vec3(v0.y, v1.y, v2.y); - grad.x = -8.0 * (gradx.x + gradx.y + gradx.z); - grad.y = -8.0 * (grady.x + grady.y + grady.z); - grad.x += dot(t4, vec3(g0.x, g1.x, g2.x)); - grad.y += dot(t4, vec3(g0.y, g1.y, g2.y)); - grad *= 40.0; - - // Add contributions from the three corners and return - return 40.0 * (n.x + n.y + n.z); - } - - - vec2 complex_mul(vec2 factorA, vec2 factorB){ - return vec2( factorA.x*factorB.x - factorA.y*factorB.y, factorA.x*factorB.y + factorA.y*factorB.x); - } - - vec2 torus_mirror(vec2 uv){ - return vec2(1.)-abs(fract(uv*.5)*2.-1.); - } - - float sigmoid(float x) { - return 2./(1. + exp2(-x)) - 1.; - } - - float smoothcircle(vec2 uv, float radius, float sharpness){ - return 0.5 - sigmoid( ( length( (uv - 0.5)) - radius) * sharpness) * 0.5; - } - - - void main() { - - vec2 posScale = vec2(2.0); - - vec2 aspect = vec2(1.,resolution.y/resolution.x); - vec2 uv = 0.5 + (gl_FragCoord.xy * vec2(1./resolution.x,1./resolution.y) - 0.5)*aspect; - float mouseW = atan((mouse.y - 0.5)*aspect.y, (mouse.x - 0.5)*aspect.x); - vec2 mousePolar = vec2(sin(mouseW), cos(mouseW)); - vec2 offset = (mouse - 0.5)*4.; - offset = - complex_mul(offset, mousePolar) +time*0.0; - vec2 uv_distorted = uv; - - float filter = smoothcircle( -mouse + 0.5 +uv_distorted, 0.15, 64.); - uv_distorted = complex_mul(((uv_distorted - 0.5)*mix(2., 12., filter)), mousePolar) + offset; - - vec2 p = uv_distorted; - vec2 g1, g2; - // vec2 p = ( gl_FragCoord.xy / resolution.xy ) * 6.0; - float n1 = srdnoise(p*0.5, 0.0*time, g1); - float n2 = srdnoise(p*2.0 + g1*0.5, 0.51*time, g2); - float n3 = srdnoise(p*4.0 + g1*0.5 + g2*0.25, 0.77*time, g2); - gl_FragColor = vec4(vec3(0.4, 0.5, 0.6) + vec3(n1+0.75*n2+0.5*n3), 1.0); - } - - "; - - -} \ No newline at end of file diff --git a/examples/HerokuShaders/src/shaders/FragmentShader_5733.hx b/examples/HerokuShaders/src/shaders/FragmentShader_5733.hx deleted file mode 100644 index 1d0e00289..000000000 --- a/examples/HerokuShaders/src/shaders/FragmentShader_5733.hx +++ /dev/null @@ -1,37 +0,0 @@ -package shaders; - - -class FragmentShader_5733 { - - - //http://glsl.heroku.com/e#5733.0 - - - public static var source = " - - uniform float time; - uniform vec2 mouse; - uniform vec2 resolution; - varying vec2 surfacePosition; - - - void main( void ) { - vec2 p = surfacePosition; - float speed = 0.25; - vec3 color = vec3(0.5,0.2,0.1); - vec2 loc = vec2(cos(time/4.0*speed)/1.9-cos(time/2.0*speed)/3.8, - sin(time/4.0*speed)/1.9-sin(time/2.0*speed)/3.8 - ); - float depth; - for(int i = 0; i < 100; i+=1){ - p = vec2(p.x*p.x-p.y*p.y,2.0*p.y*p.x)+loc; - depth = float(i); - if((p.x*p.x-p.y*p.y) >= 25.0) break; - } - gl_FragColor = vec4(clamp(color*depth*0.9, 0.0, 2.0)*mod(gl_FragCoord.y, 2.0), 2.0 ); - } - - "; - - -} \ No newline at end of file diff --git a/examples/HerokuShaders/src/shaders/FragmentShader_5805_18.hx b/examples/HerokuShaders/src/shaders/FragmentShader_5805_18.hx deleted file mode 100644 index e99d299e6..000000000 --- a/examples/HerokuShaders/src/shaders/FragmentShader_5805_18.hx +++ /dev/null @@ -1,57 +0,0 @@ -package shaders; - - -class FragmentShader_5805_18 { - - - //http://glsl.heroku.com/e#5805.18 - - - public static var source = " - - uniform float time; - uniform vec2 mouse; - uniform vec2 resolution; - - float function_f (float x) { - return + mouse.y * 0.5 * 2.0 * resolution.y / 4.0 / (1.0 + exp((x+200.0)*0.1)) - - mouse.y * 0.5 * 2.0 * resolution.y / 4.0 / (1.0 + exp((x+100.0)*0.1)) - + mouse.y * 0.5 * 2.0 * resolution.y / 4.0 / (1.0 + exp(x*0.1)) - - mouse.y * 0.5 * 2.0 * resolution.y / 4.0 / (1.0 + exp((x-100.0)*0.1)) - + mouse.y * 0.5 * 2.0 * resolution.y / 4.0 / (1.0 + exp((x-200.0)*0.1)) - + sin(x*0.1 - time*10.0 + mouse.x * 10.0)*50.0; - } - - float function_g (float x) { - return - mouse.y * 0.5 * 2.0 * resolution.y / 4.0 / (1.0 + exp((x+200.0)*0.1)) - + mouse.y * 0.5 * 2.0 * resolution.y / 4.0 / (1.0 + exp((x+100.0)*0.1)) - - mouse.y * 0.5 * 2.0 * resolution.y / 4.0 / (1.0 + exp(x*0.1)) - + mouse.y * 0.5 * 2.0 * resolution.y / 4.0 / (1.0 + exp((x-100.0)*0.1)) - - mouse.y * 0.5 * 2.0 * resolution.y / 4.0 / (1.0 + exp((x-200.0)*0.1)) - + sin(x*0.1 + time*5.0 - mouse.x * 10.0)*50.0; - } - - - void main( void ) { - - vec3 color_1 = vec3(0.25, sin(time), cos(time)); - vec3 color_2 = vec3(0.5, 0.25, cos(time)); - - vec2 pos = gl_FragCoord.xy; - - pos.y -= resolution.y / 2.0; - pos.x -= resolution.x / 2.0; - - float intensity_f = 16.0 / abs(pos.y - function_f(pos.x)); - intensity_f = pow(intensity_f, 0.5); - - float intensity_g = 16.0 / abs(pos.y - function_g(pos.x)); - intensity_g += pow(intensity_g, 0.5); - - gl_FragColor = vec4((color_1 * intensity_f + color_2 * intensity_g)*mod(gl_FragCoord.y, 2.0), 1); - } - - "; - - -} \ No newline at end of file diff --git a/examples/HerokuShaders/src/shaders/FragmentShader_5812.hx b/examples/HerokuShaders/src/shaders/FragmentShader_5812.hx deleted file mode 100644 index d3c8c6d4a..000000000 --- a/examples/HerokuShaders/src/shaders/FragmentShader_5812.hx +++ /dev/null @@ -1,57 +0,0 @@ -package shaders; - - -class FragmentShader_5812 { - - - //http://glsl.heroku.com/e#5812 - - - public static var source = " - - uniform float time; - uniform vec2 mouse; - uniform vec2 resolution; - - float random(vec2 v) - { - return fract(sin(dot(v ,vec2(13.9898,78.233))) * (10000.0+time*0.05)); - } - - void main( void ) - { - const int numColors = 3; - vec3 colors[numColors]; - colors[0] = vec3( 0.3, 0.8, 0.8); - colors[1] = vec3( 0.8, 0.9, 0.4); - colors[2] = vec3( 0.4, 0.4, 0.5); - - vec2 screenPos = gl_FragCoord.xy; - vec2 screenPosNorm = gl_FragCoord.xy / resolution.xy; - vec2 position = screenPosNorm + mouse / 4.0; - - // calc block - vec2 screenBlock0 = floor(screenPos*0.16 + vec2(time,0) + mouse*3.0); - vec2 screenBlock1 = floor(screenPos*0.08 + vec2(time*1.5,0) + mouse*5.0); - vec2 screenBlock2 = floor(screenPos*0.02 + vec2(time*2.0,0)+mouse*10.0); - float rand0 = random(screenBlock0); - float rand1 = random(screenBlock1); - float rand2 = random(screenBlock2); - - float rand = rand1; - if ( rand2 < 0.05 ) { rand = rand2; } - - // block color - vec3 color = mix( colors[0], colors[1], pow(rand,5.0) ); - if ( rand < 0.05 ) { color=colors[2]; } - - float vignette = 1.6-length(screenPosNorm*2.0-1.0); - vec4 finalColor = vec4(color*vignette, 1.0); - - gl_FragColor = finalColor; - } - - "; - - -} \ No newline at end of file diff --git a/examples/HerokuShaders/src/shaders/FragmentShader_5891_5.hx b/examples/HerokuShaders/src/shaders/FragmentShader_5891_5.hx deleted file mode 100644 index 55a4e3883..000000000 --- a/examples/HerokuShaders/src/shaders/FragmentShader_5891_5.hx +++ /dev/null @@ -1,53 +0,0 @@ -package shaders; - - -class FragmentShader_5891_5 { - - - //http://glsl.heroku.com/e#5891.5 - - - public static var source = " - - uniform float time; - uniform vec2 mouse; - uniform vec2 resolution; - - const float Tau = 6.2832; - const float speed = .02; - const float density = .04; - const float shape = .04; - - float random( vec2 seed ) { - return fract(sin(seed.x+seed.y*1e3)*1e5); - } - - float Cell(vec2 coord) { - vec2 cell = fract(coord) * vec2(.5,2.) - vec2(.0,.5); - return (1.-length(cell*2.-1.))*step(random(floor(coord)),density)*2.; - } - - void main( void ) { - - vec2 p = gl_FragCoord.xy / resolution - mouse; - - float a = fract(atan(p.x, p.y) / Tau); - float d = length(p); - - vec2 coord = vec2(pow(d, shape), a)*256.; - vec2 delta = vec2(-time*speed*256., .5); - - float c = 0.; - for(int i=0; i<3; i++) { - coord += delta; - c = max(c, Cell(coord)); - } - - gl_FragColor = vec4(c * d); - - } - - "; - - -} \ No newline at end of file diff --git a/examples/HerokuShaders/src/shaders/FragmentShader_6022.hx b/examples/HerokuShaders/src/shaders/FragmentShader_6022.hx deleted file mode 100644 index 238817324..000000000 --- a/examples/HerokuShaders/src/shaders/FragmentShader_6022.hx +++ /dev/null @@ -1,97 +0,0 @@ -package shaders; - - -class FragmentShader_6022 { - - - //http://glsl.heroku.com/e#6022.0 - - - public static var source = " - - uniform float time; - uniform vec2 mouse; - uniform vec2 resolution; - varying vec2 surfacePosition; - - float rand(vec2 co){ - return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43748.5453); - } - float cerp(float a, float b, float i) - { - if(i<0.) - i += 1.; - i *= 3.14159265; - i = (1.-cos(i))/2.; - return a*(1.-i)+b*i; - } - float lerp(float a, float b, float i) - { - if(i<0.) - i+=1.; - return a*(1.-i)+b*i; - } - vec3 lerp(vec3 a, vec3 b, float i) - { - if(i<0.) - i+=1.; - return a*(1.-i)+b*i; - } - float posrand(vec2 pos, float width, float height) - { - return rand(vec2(int(pos.x*width),int(pos.y*height))); - } - float tdposrand(vec2 pos, float width, float height) - { - float n1, n2, n3, n4, n5, n6; - n1 = posrand(pos,width,height); - n2 = posrand(vec2(pos.x+1./width,pos.y),width,height); - n3 = posrand(vec2(pos.x,pos.y+1./height),width,height); - n4 = posrand(vec2(pos.x+1./width,pos.y+1./height),width,height); - n5 = cerp(n1,n2,pos.x*width-float(int(pos.x*width))); - n6 = cerp(n3,n4,pos.x*width-float(int(pos.x*width))); - return cerp(n5,n6,pos.y*height-float(int(pos.y*height))); - } - - vec3 readcolpath(vec3 one, vec3 two, vec3 thr, vec3 fou, float i) - { - int num = int(i*3.); - if(num==0) - return lerp(one,two,i*3.-float(num)); - if(num==1) - return lerp(two,thr,i*3.-float(num)); - if(num==2) - return lerp(thr,fou,i*3.-float(num)); - return fou; - } - void main( void ) { - - vec2 position = surfacePosition+.5; - vec2 odd = vec2(0,time/5.); - vec3 col1 = vec3(1.,0.25,0.); - vec3 col2 = vec3(.45,0.2,0.); - vec3 col3 = vec3(0.2,.1,0.); - vec3 col4 = vec3(.4,.3,.25); - float color = 0.0; - position = position*(1.+1./12.)+vec2(length(vec2(tdposrand(position-odd,2.,2.),tdposrand(position*4.3-odd,2.,2.))))/12.; - if(position.y>0.) - { - //color += tdposrand(position-odd,1000.,1000.)/5.; - color += tdposrand(position-odd,50.,50.)/8.; - color += tdposrand(position-odd,20.,20.)/3.; - color += tdposrand(position-odd,10.,10.)/2.; - color += tdposrand(position-odd,5.,5.); - color /= position.y*1.; - } - else - { - color = 16.0; - } - gl_FragColor = vec4( vec3( color/2. )*readcolpath(col1,col2,col3,col4,color/16.), 1.0 ); - - } - - "; - - -} \ No newline at end of file diff --git a/examples/HerokuShaders/src/shaders/FragmentShader_6043_1.hx b/examples/HerokuShaders/src/shaders/FragmentShader_6043_1.hx deleted file mode 100644 index af7a013f6..000000000 --- a/examples/HerokuShaders/src/shaders/FragmentShader_6043_1.hx +++ /dev/null @@ -1,150 +0,0 @@ -package shaders; - - -class FragmentShader_6043_1 { - - - //http://glsl.heroku.com/e#6043.1 - - - public static var source = " - - uniform float time; - uniform vec2 mouse; - uniform vec2 resolution; - - //.h - vec3 sim(vec3 p,float s); - vec2 rot(vec2 p,float r); - vec2 rotsim(vec2 p,float s); - - //nice stuff :) - vec2 makeSymmetry(vec2 p){ - vec2 ret=p; - ret=rotsim(ret,5.08052); - ret.x=abs(ret.x); - return ret; - } - - float makePoint(float x,float y,float fx,float fy,float sx,float sy,float t){ - float xx=x+tan(t*fx)*sx; - float yy=y-tan(t*fy)*sy; - return 0.5/sqrt(abs(x*xx+yy*yy)); - } - - - - //util functions - const float PI=5.08052; - - vec3 sim(vec3 p,float s){ - vec3 ret=p; - ret=p+s/2.0; - ret=fract(ret/s)*s-s/2.0; - return ret; - } - - vec2 rot(vec2 p,float r){ - vec2 ret; - ret.x=p.x*cos(r)-p.y*sin(r); - ret.y=p.x*sin(r)+p.y*cos(r); - return ret; - } - - vec2 rotsim(vec2 p,float s){ - vec2 ret=p; - ret=rot(p,-PI/(s*2.0)); - ret=rot(p,floor(atan(ret.x,ret.y)/PI*s)*(PI/s)); - return ret; - } - //Util stuff end - - - - vec2 complex_mul(vec2 factorA, vec2 factorB){ - return vec2( factorA.x*factorB.x - factorA.y*factorB.y, factorA.x*factorB.y + factorA.y*factorB.x); - } - - vec2 torus_mirror(vec2 uv){ - return vec2(1.)-abs(fract(uv*.5)*2.-1.); - } - - float sigmoid(float x) { - return 2./(1. + exp2(-x)) - 1.; - } - - float smoothcircle(vec2 uv, float radius, float sharpness){ - return 0.5 - sigmoid( ( length( (uv - 0.5)) - radius) * sharpness) * 0.5; - } - - - void main() { - - vec2 posScale = vec2(2.0); - - vec2 aspect = vec2(1.,resolution.y/resolution.x); - vec2 uv = 0.5 + (gl_FragCoord.xy * vec2(1./resolution.x,1./resolution.y) - 0.5)*aspect; - float mouseW = atan((mouse.y - 0.5)*aspect.y, (mouse.x - 0.5)*aspect.x); - vec2 mousePolar = vec2(sin(mouseW), cos(mouseW)); - vec2 offset = (mouse - 0.5)*2.*aspect; - offset = - complex_mul(offset, mousePolar) +time*0.0; - vec2 uv_distorted = uv; - - float filter = smoothcircle( uv_distorted, 0.12, 100.); - uv_distorted = complex_mul(((uv_distorted - 0.5)*mix(2., 6., filter)), mousePolar) + offset; - - - vec2 p=(gl_FragCoord.xy/resolution.x)*2.0-vec2(1.0,resolution.y/resolution.x); - p = uv_distorted; - p.y=-p.y; - p=p*2.0; - - p=makeSymmetry(p); - - float x=p.x; - float y=p.y; - - float t=time*0.1618; - - float a= - makePoint(x,y,3.3,2.9,0.3,0.3,t); - a=a+makePoint(x,y,1.9,2.0,0.4,0.4,t); - a=a+makePoint(x,y,0.8,0.7,0.4,0.5,t); - a=a+makePoint(x,y,2.3,0.1,0.6,0.3,t); - a=a+makePoint(x,y,0.8,1.7,0.5,0.4,t); - a=a+makePoint(x,y,0.3,1.0,0.4,0.4,t); - a=a+makePoint(x,y,1.4,1.7,0.4,0.5,t); - a=a+makePoint(x,y,1.3,2.1,0.6,0.3,t); - a=a+makePoint(x,y,1.8,1.7,0.5,0.4,t); - - float b= - makePoint(x,y,1.2,1.9,0.3,0.3,t); - b=b+makePoint(x,y,0.7,2.7,0.4,0.4,t); - b=b+makePoint(x,y,1.4,0.6,0.4,0.5,t); - b=b+makePoint(x,y,2.6,0.4,0.6,0.3,t); - b=b+makePoint(x,y,0.7,1.4,0.5,0.4,t); - b=b+makePoint(x,y,0.7,1.7,0.4,0.4,t); - b=b+makePoint(x,y,0.8,0.5,0.4,0.5,t); - b=b+makePoint(x,y,1.4,0.9,0.6,0.3,t); - b=b+makePoint(x,y,0.7,1.3,0.5,0.4,t); - - float c= - makePoint(x,y,3.7,0.3,0.3,0.3,t); - c=c+makePoint(x,y,1.9,1.3,0.4,0.4,t); - c=c+makePoint(x,y,0.8,0.9,0.4,0.5,t); - c=c+makePoint(x,y,1.2,1.7,0.6,0.3,t); - c=c+makePoint(x,y,0.3,0.6,0.5,0.4,t); - c=c+makePoint(x,y,0.3,0.3,0.4,0.4,t); - c=c+makePoint(x,y,1.4,0.8,0.4,0.5,t); - c=c+makePoint(x,y,0.2,0.6,0.6,0.3,t); - c=c+makePoint(x,y,1.3,0.5,0.5,0.4,t); - - vec3 d=vec3(a+b,b+c,c)/32.0; - - gl_FragColor = vec4(d.x,d.y,d.z,1.0); - } - - "; - - -} \ No newline at end of file diff --git a/examples/HerokuShaders/src/shaders/FragmentShader_6049.hx b/examples/HerokuShaders/src/shaders/FragmentShader_6049.hx deleted file mode 100644 index 2ecc48a0a..000000000 --- a/examples/HerokuShaders/src/shaders/FragmentShader_6049.hx +++ /dev/null @@ -1,202 +0,0 @@ -package shaders; - - -class FragmentShader_6049 { - - - //http://glsl.heroku.com/e#6049.0 - - - public static var source = " - - uniform vec2 resolution; - uniform float time; - uniform vec2 mouse; - - //Util Start - float PI=3.14159265; - - vec2 ObjUnion( - in vec2 obj0, - in vec2 obj1) - { - if (obj0.x0.0) fp.x=-fp.x; - if (fp.x>0.0) return vec3(0.0,0.0,0.0); - else return vec3(1.0,1.0,1.0); - } - - //Scene End - - float raymarching( - in vec3 prp, - in vec3 scp, - in int maxite, - in float precis, - in float startf, - in float maxd, - out float objid) - { - const vec3 e=vec3(0.1,0,0.0); - vec2 s=vec2(startf,0.0); - vec3 c,p,n; - float f=startf; - for(int i=0;i<256;i++){ - if (abs(s.x)maxd||i>maxite) break; - f+=s.x; - p=prp+scp*f; - s=obj(p); - objid=s.y; - } - if (f>maxd) objid=-1.0; - return f; - } - - - vec3 camera( - in vec3 prp, - in vec3 vrp, - in vec3 vuv, - in float vpd) - { - vec2 vPos=-1.0+2.0*gl_FragCoord.xy/resolution.xy; - vec3 vpn=normalize(vrp-prp); - vec3 u=normalize(cross(vuv,vpn)); - vec3 v=cross(vpn,u); - vec3 scrCoord=prp+vpn*vpd+vPos.x*u*resolution.x/resolution.y+vPos.y*v; - return normalize(scrCoord-prp); - } - - vec3 normal(in vec3 p) - { - //tetrahedron normal - const float n_er=0.01; - float v1=obj(vec3(p.x+n_er,p.y-n_er,p.z-n_er)).x; - float v2=obj(vec3(p.x-n_er,p.y-n_er,p.z+n_er)).x; - float v3=obj(vec3(p.x-n_er,p.y+n_er,p.z-n_er)).x; - float v4=obj(vec3(p.x+n_er,p.y+n_er,p.z+n_er)).x; - return normalize(vec3(v4+v1-v3-v2,v3+v4-v1-v2,v2+v4-v3-v1)); - } - - vec3 render( - in vec3 prp, - in vec3 scp, - in int maxite, - in float precis, - in float startf, - in float maxd, - in vec3 background, - in vec3 light, - in float spec, - in vec3 ambLight, - out vec3 n, - out vec3 p, - out float f, - out float objid) - { - objid=-1.0; - f=raymarching(prp,scp,maxite,precis,startf,maxd,objid); - if (objid>-0.5){ - p=prp+scp*f; - vec3 c=obj_c(p); - n=normal(p); - vec3 cf=phong(p,prp,n,light,c,spec,ambLight); - return vec3(cf); - } - f=maxd; - return vec3(background); //background color - } - - void main(void){ - - //Camera animation - vec3 vuv=vec3(0,1,0); - vec3 vrp=vec3(time*4.0,0.0,0.0); - float mx=mouse.x*PI*2.0; - float my=mouse.y*PI/2.01; - vec3 prp=vrp+vec3(cos(my)*cos(mx),sin(my),cos(my)*sin(mx))*12.0; //Trackball style camera pos - float vpd=1.5; - vec3 light=prp+vec3(5.0,0,5.0); - - vec3 scp=camera(prp,vrp,vuv,vpd); - vec3 n,p; - float f,o; - const float maxe=0.01; - const float startf=0.1; - const vec3 backc=vec3(0.0,0.0,0.0); - const float spec=8.0; - const vec3 ambi=vec3(0.1,0.1,0.1); - - vec3 c1=render(prp,scp,256,maxe,startf,60.0,backc,light,spec,ambi,n,p,f,o); - c1=c1*max(1.0-f*.015,0.0); - vec3 c2=backc; - if (o>0.5){ - scp=reflect(scp,n); - c2=render(p+scp*0.05,scp,32,maxe,startf,10.0,backc,light,spec,ambi,n,p,f,o); - } - c2=c2*max(1.0-f*.1,0.0); - gl_FragColor=vec4(c1.xyz*0.75+c2.xyz*0.25,1.0); - - } - - "; - - -} \ No newline at end of file diff --git a/examples/HerokuShaders/src/shaders/FragmentShader_6147_1.hx b/examples/HerokuShaders/src/shaders/FragmentShader_6147_1.hx deleted file mode 100644 index db7783374..000000000 --- a/examples/HerokuShaders/src/shaders/FragmentShader_6147_1.hx +++ /dev/null @@ -1,72 +0,0 @@ -package shaders; - - -class FragmentShader_6147_1 { - - - //http://glsl.heroku.com/e#6147.1 - - - public static var source = " - - #define PI 3.14159265 - uniform float time; - uniform vec2 mouse, resolution; - - vec3 sim(vec3 p,float s); //.h - vec2 rot(vec2 p,float r); - vec2 rotsim(vec2 p,float s); - - vec2 makeSymmetry(vec2 p){ //nice stuff :) - vec2 ret=p; - ret=rotsim(p, 6.0); - ret.x=abs(ret.x); - return ret; - } - - float makePoint(float x,float y,float fx,float fy,float sx,float sy,float t){ - - float xx=x+tan(t * fx)*sy; - float yy=y-tan(t * fx)*sy; - return 0.8/sqrt(abs(x*xx+yy*yy)); - } - - vec2 sim(vec2 p,float s){ - vec2 ret=p; - ret=p+s/2.0; - ret=fract(ret/s)*s-s/2.0; - return ret; - } - - vec2 rot(vec2 p,float r){ - vec2 ret; - ret.x=p.x*cos(r)-p.y*sin(r); - ret.y=p.x*sin(r)+p.y*cos(r); - return ret; - } - - vec2 rotsim(vec2 p,float s){ - float k = atan(p.x, p.y); - vec2 ret=rot(p,floor((k + PI/(s*2.0)) / PI*s)*(PI/s)); - return ret; - } - - void main( void ) { - vec2 p=(gl_FragCoord.xy/resolution.x)*2.0-vec2(1.0,resolution.y/resolution.x); - p=makeSymmetry(p); - float x=p.x; - float y=p.y; - float t=time*0.2; - float a= makePoint(x,y,3.3,2.9,0.3,0.3,t); - // a=a+makePoint(x,y,1.8,1.7,0.5,0.4,t); - float b=makePoint(x,y,1.2,1.9,0.3,0.3,t); - // b=b+makePoint(x,y,0.7,2.7,0.4,0.4,t); - float c=makePoint(x,y,3.7,0.3,0.3,0.3,t); - // c=c+makePoint(x,y,0.8,0.9,0.4,0.5,t); - gl_FragColor = vec4(a/5.,b/5.,c/5.,1.0); - } - - "; - - -} \ No newline at end of file diff --git a/examples/HerokuShaders/src/shaders/FragmentShader_6162.hx b/examples/HerokuShaders/src/shaders/FragmentShader_6162.hx deleted file mode 100644 index 176580610..000000000 --- a/examples/HerokuShaders/src/shaders/FragmentShader_6162.hx +++ /dev/null @@ -1,105 +0,0 @@ -package shaders; - - -class FragmentShader_6162 { - - - //http://glsl.heroku.com/e#6162.0 - - - public static var source = " - - #define PI 3.141592653589793 - - #define ZOOM (4. - sin(time/2.)*3.) - - #define MAX_ITERATION 6 - #define ITERATION_BAIL sqrt(PI/2.) - - #define MAX_MARCH 50 - #define MAX_DISTANCE 2.3 - - uniform float time; - uniform vec2 mouse; - uniform vec2 resolution; - - float DE(vec3 p) - { - vec3 w = p; - float dr = 1.; - float r = 0.; - for (int i=0; iITERATION_BAIL) break; - - dr*=pow(r, 7.)*8.+1.; - - float x = w.x; float x2 = x*x; float x4 = x2*x2; - float y = w.y; float y2 = y*y; float y4 = y2*y2; - float z = w.z; float z2 = z*z; float z4 = z2*z2; - - float k3 = x2 + z2; - float k2 = inversesqrt( pow(k3, 7.) ); - float k1 = x4 + y4 + z4 - 6.0*y2*z2 - 6.0*x2*y2 + 2.0*z2*x2; - float k4 = x2 - y2 + z2; - - w = vec3(64.0*x*y*z*(x2-z2)*k4*(x4-6.0*x2*z2+z4)*k1*k2, - -16.0*y2*k3*k4*k4 + k1*k1, - -8.0*y*k4*(x4*x4 - 28.0*x4*x2*z2 + 70.0*x4*z4 - 28.0*x2*z2*z4 + z4*z4)*k1*k2); - w+=p; - } - return .5*log(r)*r/dr; - } - - bool inCircle(vec3 p, vec3 d) - { - float rdt = dot(p, d); - float rdr = dot(p, p) - 1.253314137315501; // sqrt(PI/2) - return (rdt*rdt)-rdr>0.; - } - - - void main( void ) - { - vec2 pos = (gl_FragCoord.xy*2.0 - resolution.xy) / resolution.y; - - vec2 m = vec2(sin(time), cos(time))/ZOOM; - //m = ((.5-mouse)*PI*2.)/ZOOM; - m.y = clamp(m.y, -PI/2.+.01, PI/2.-.01); - - vec3 camOrigin = vec3(cos(m.x)*cos(m.y), sin(m.y), cos(m.y)*sin(m.x))*2.0; - vec3 camTarget = vec3(0.0, 0.0, 0.0); - vec3 camDir = normalize(camTarget - camOrigin); - vec3 camUp = normalize(vec3(0.0, 1.0, 0.0)); - vec3 camSide = normalize(cross(camDir, camUp)); - vec3 camCDS = cross(camDir, camSide); - - vec3 ray = normalize(camSide*pos.x + camCDS*pos.y + camDir*ZOOM); - - float col = 0., col2 = 0., col3 = 0.; - if (inCircle(camOrigin, ray)) - { - float m = 1.0, dist = 0.0, total_dist = 0.0; - - for(int i=0; iMAX_DISTANCE) break; - } - - col = m; - col2 = m*2.5-total_dist; - col3 = m*1.5-total_dist; - if (total_dist>MAX_DISTANCE) col = 0.; - } - - gl_FragColor = vec4(col, col2/2., col3*2., 1.0); - } - - "; - - -} \ No newline at end of file diff --git a/examples/HerokuShaders/src/shaders/FragmentShader_6175.hx b/examples/HerokuShaders/src/shaders/FragmentShader_6175.hx deleted file mode 100644 index 83f085d88..000000000 --- a/examples/HerokuShaders/src/shaders/FragmentShader_6175.hx +++ /dev/null @@ -1,238 +0,0 @@ -package shaders; - - -class FragmentShader_6175 { - - - //http://glsl.heroku.com/e#6175.0 - - - public static var source = " - - uniform float time; - uniform vec2 resolution; - uniform vec4 mouse; - uniform sampler2D tex0; - uniform sampler2D tex1; - - const float M_PI = 3.14159265358979323846; - - struct SphereIntersection - { - // IN: - vec4 sphere; - vec3 ro; - vec3 rd; - // OUT: - float t; - vec3 pos; - vec3 normal; - float depth; - }; - - float saturate(float f) - { - return clamp(f,0.0,1.0); - } - - vec3 saturate(vec3 v) - { - return clamp(v,vec3(0,0,0),vec3(1,1,1)); - } - - // ... I went on the internet and I found THIS - float rand(vec2 co) - { - return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453); - } - - // Theta, Phi (r == 1) - vec2 normalToSpherical(vec3 normal) - { - vec2 spherical; - // Flip ZY. - normal.yz = normal.zy; - spherical.x = atan(normal.y,normal.x); // Theta - spherical.y = acos(normal.z); // Phi - return spherical; - } - - // Input: Theta, Phi - vec3 sphericalToCartesian(vec2 s) - { - vec3 cart; - cart.x = cos(s.x) * sin(s.y); - cart.y = sin(s.x) * sin(s.y); - cart.z = cos(s.y); - // Flip ZY - cart.yz = cart.zy; - return cart; - } - - // Ray origin, Ray direction, (Sphere center, Sphere radius) - void raySphere(inout SphereIntersection i) - { - vec4 sphere = i.sphere; - vec3 ro = i.ro; - vec3 rd = i.rd; - vec3 sc = sphere.xyz; - float sr = sphere.w; - vec3 sd = ro-sc; - // a == 1 - float b = 2.0*dot(rd,sd); - float c = dot(sd,sd)-(sr*sr); - float disc = b*b - 4.0*c; - if(disc<0.0) - { - i.t = -1.0; - return; - } - float t = (-b-sqrt(disc))/2.0; - i.t = t; - i.pos = ro+rd*t; - i.normal = normalize(i.pos-sphere.xyz); - i.depth = 2.0*sr*dot(normalize(sd),i.normal); - } - - vec3 sphereNormal(vec4 sphere, vec3 point) - { - return normalize(point-sphere.xyz); - } - - float sphereFunction(vec2 coord) - { - coord.x -= time/4.0; - coord.y += sin(time/4.0); - float thetaCoeff = 24.0; - float phiCoeff = 16.0; - float height = 0.8; - height += (sin(3.0*coord.y)*sin(4.0*coord.x))/10.0; - height += (sin(16.0*coord.y)*sin(24.0*coord.x))/10.0; - return height; - } - - vec3 sphereFunctionNormal(vec2 coord, vec4 sphere) - { - // Approximates the local slope of the heightfield function - float d = 0.01; - vec2 s0coord = coord; // Center - vec2 s1coord = coord+vec2(d,0); // +X = +Theta - vec2 s2coord = coord+vec2(0,-d); // +Y = -Phi - // Sample heightfield - float s0 = sphereFunction(s0coord) * sphere.w; - float s1 = sphereFunction(s1coord) * sphere.w; - float s2 = sphereFunction(s2coord) * sphere.w; - // Convert samples to cartesian - vec3 s0c = sphericalToCartesian(s0coord)*s0; - vec3 s1c = sphericalToCartesian(s1coord)*s1; - vec3 s2c = sphericalToCartesian(s2coord)*s2; - // Tangent space - vec3 x = s1c-s0c; - vec3 y = s2c-s0c; - vec3 normal = normalize(cross(y,x)); - return normal; - } - - void rayMarchSphere(inout SphereIntersection i) - { - const float NUM_SAMPLES = 50.0; - vec3 pos = i.pos; - vec3 dir = i.rd; - float stepSize = i.depth/NUM_SAMPLES; - - // No hit - i.t = -1.0; - - for(float s = 0.0; s < NUM_SAMPLES; s++) - { - if(s == 0.0) - { - pos += dir*stepSize*rand(gl_FragCoord.xy); - } - vec3 v = pos-i.sphere.xyz; - float height = length(v); - vec3 n = v/height; - vec2 sCoord = normalToSpherical(n); - float testHeight = sphereFunction(sCoord)*i.sphere.w; - testHeight += 0.000001; // Prevent floating point error - if(height<=testHeight) - { - i.t = length(pos-i.ro); - i.pos = pos; - i.normal = n; - i.normal = sphereFunctionNormal(sCoord,i.sphere); - return; - } - pos += dir*stepSize; - } - return; - } - - vec3 lighting(vec3 point, vec3 N, vec3 light, vec3 color) - { - vec3 toLight = light-point; - vec3 L = normalize(toLight); - return color*saturate(dot(N,L)); - } - - void rayMarchedSphereIntersection(inout SphereIntersection i) - { - // First intersect the sphere - raySphere(i); - // Then raymarch the heightfield - if(i.t > 0.0) - { - rayMarchSphere(i); - } - } - - void main(void) - { - vec2 screenPos = -1.0 + 2.0 * gl_FragCoord.xy / resolution.xy; - vec2 screenPosAR = vec2(screenPos.x*(resolution.x/resolution.y),screenPos.y); - - vec3 rayDir = normalize(vec3(screenPosAR.x,screenPosAR.y,1.0)); - vec3 light = vec3(sin(time/4.0)*3.0,cos(time/5.0)*3.0,-2.0); - vec4 sphere = vec4(0.0,0.0,3.0,2.2); - - SphereIntersection inter; - inter.ro = vec3(0,0,0); - inter.rd = rayDir; - inter.sphere = sphere; - rayMarchedSphereIntersection(inter); - //raySphere(inter); - - vec3 color; - if(inter.t > 0.0) - { - float shadowFactor = 1.0; - SphereIntersection shadowInter; - vec3 lightDir = normalize(light-inter.pos); - shadowInter.ro = inter.pos; - shadowInter.rd = lightDir; - shadowInter.pos = inter.pos+lightDir*0.1; - shadowInter.sphere = sphere; - shadowInter.depth = sphere.w; - rayMarchSphere(shadowInter); - if(shadowInter.t > 0.0) - { - //shadowFactor = 0.0; - } - // Some crazy colors - vec3 diffuse = normalize(normalize(inter.pos-sphere.xyz)+vec3(abs(sin(time/4.0)),abs(cos(time/5.0)),abs(sin(time/5.0)*2.0))); - color.xyz = lighting(inter.pos, inter.normal, light, diffuse) * shadowFactor; - color.xyz += saturate(inter.normal.zzz+0.50)*diffuse; // Some fake backlighting - } - else - { - color.xyz = vec3(0,0,0); - } - - gl_FragColor.xyz = color; - gl_FragColor.w = 1.0; - } - - "; - - -} \ No newline at end of file diff --git a/examples/HerokuShaders/src/shaders/FragmentShader_6223_2.hx b/examples/HerokuShaders/src/shaders/FragmentShader_6223_2.hx deleted file mode 100644 index 9319db739..000000000 --- a/examples/HerokuShaders/src/shaders/FragmentShader_6223_2.hx +++ /dev/null @@ -1,50 +0,0 @@ -package shaders; - - -class FragmentShader_6223_2 { - - - //http://glsl.heroku.com/e#6223.2 - - - public static var source = " - - uniform float time; - uniform vec2 mouse; - uniform vec2 resolution; - - // a raymarching experiment by kabuto - //fork by tigrou ind (2013.01.22) - //optimized - - #define MAXITER 90 - #define MAXITER_SQR MAXITER*MAXITER - - vec3 field(vec3 p) { - p = abs(fract(p)-.5); - p *= p; - return sqrt(p+p.yzx*p.zzy)-.015; - } - - void main( void ) { - vec3 dir = normalize(vec3((gl_FragCoord.xy-resolution*.5)/resolution.x,1.)); - float a = time * 0.4; - vec3 pos = vec3(time*0.6 + sin(time)*0.2,sin(time)*0.25,-3.0); - - vec3 color = vec3(0); - for (int i = 0; i < MAXITER; i++) { - vec3 f2 = field(pos); - vec3 rep = vec3(1.0,0.7+sin(time)*0.7, 1.3); - float f = min(min(min(f2.x,f2.y),f2.z), length(mod(pos-vec3(0.1),rep)-0.5*rep)-0.10); - pos += dir*f; - color += float(MAXITER-i)/(f2+.01); - } - vec3 color3 = vec3(1.-1./(1.+color*(.09/float(MAXITER_SQR)))); - color3 *= color3; - gl_FragColor = vec4(vec3(color3.r+color3.g+color3.b),1.); - } - - "; - - -} \ No newline at end of file diff --git a/examples/HerokuShaders/src/shaders/FragmentShader_6238.hx b/examples/HerokuShaders/src/shaders/FragmentShader_6238.hx deleted file mode 100644 index b10cf18bb..000000000 --- a/examples/HerokuShaders/src/shaders/FragmentShader_6238.hx +++ /dev/null @@ -1,41 +0,0 @@ -package shaders; - - -class FragmentShader_6238 { - - - //http://glsl.heroku.com/e#6238.0 - - - public static var source = " - - uniform float time; - uniform vec2 mouse; - uniform vec2 resolution; - - void main( void ) { - - vec3 color1 = vec3(1.7, 0.25, 0.5); - vec3 color2 = vec3(0.5, 0.7, 0.25); - vec3 color3 = vec3(0.25, 0.5, 0.7); - - vec2 point1 = resolution/2.0 + vec2(sin(time*2.0) * 10.0, cos(time*2.0) * 5.0); - vec2 point2 = resolution/2.0 + vec2(sin(time)*75.0, cos(time)*50.0); - vec2 point3 = resolution/2.0 + vec2(sin(time)*25.0, sin(time*2.0)*50.0)*2.0; - - vec2 dist1 = gl_FragCoord.xy - point1; - float intensity1 = pow(32.0/(0.01+length(dist1)), 2.0); - - vec2 dist2 = gl_FragCoord.xy - point2; - float intensity2 = pow(3.0/(0.01+length(dist2)), 2.0); - - vec2 dist3 = gl_FragCoord.xy - point3; - float intensity3 = pow(62.0/(0.01+length(dist3)), 1.0); - - gl_FragColor = vec4((color1*intensity1 + color2*intensity2 + color3*intensity3)*mod(gl_FragCoord.y, 2.0),1.0); - } - - "; - - -} \ No newline at end of file diff --git a/examples/HerokuShaders/src/shaders/FragmentShader_6284_1.hx b/examples/HerokuShaders/src/shaders/FragmentShader_6284_1.hx deleted file mode 100644 index 3d3c5bf48..000000000 --- a/examples/HerokuShaders/src/shaders/FragmentShader_6284_1.hx +++ /dev/null @@ -1,33 +0,0 @@ -package shaders; - - -class FragmentShader_6284_1 { - - - //http://glsl.heroku.com/e#6284.1 - - - public static var source = " - - uniform float time; - uniform vec2 mouse; - uniform vec2 resolution; - - void main( void ) { - - vec2 position = ( gl_FragCoord.xy / resolution.xy ) + mouse / 1.0; - - float color = 0.0; - color += sin( position.x * cos( time / 15.0 ) * 80.0 ) + cos( position.y * cos( time / 15.0 ) * 10.0 ); - color += sin( position.y * sin( time / 10.0 ) * 40.0 ) + cos( position.x * sin( time / 25.0 ) * 40.0 ); - color += sin( position.x * sin( time / 5.0 ) * 10.0 ) + sin( position.y * sin( time / 35.0 ) * 80.0 ); - color *= sin( time / 10.0 ) * 0.5; - - gl_FragColor = vec4( vec3( color, color * 0.1, sin( color + time / 9.0 ) * 0.75 ), 1.0 ); - - } - - "; - - -} \ No newline at end of file diff --git a/examples/HerokuShaders/src/shaders/FragmentShader_6286.hx b/examples/HerokuShaders/src/shaders/FragmentShader_6286.hx deleted file mode 100644 index 3c2ea52bf..000000000 --- a/examples/HerokuShaders/src/shaders/FragmentShader_6286.hx +++ /dev/null @@ -1,36 +0,0 @@ -package shaders; - - -class FragmentShader_6286 { - - - //http://glsl.heroku.com/e#6286.0 - - - public static var source = " - - uniform float time; - uniform vec2 mouse; - uniform vec2 resolution; - varying vec2 surfacePosition; - - void main( void ) { - vec2 p = surfacePosition; - float speed = 0.45; - vec3 color = vec3(.4,.1,.8); - vec2 loc = vec2(cos(time/1.6*speed)/1.9-cos(time/.8*speed)/3.8, - sin(time/1.6*speed)/1.9-sin(time/.8*speed)/3.8 - ); - float depth; - for(int i = 0; i < 100; i+=1){ - p = vec2(p.x*p.x-p.y*p.y,2.0*p.x*p.y)+loc; - depth = float(i); - if((p.x*p.x+p.y*p.y) >= 4.0) break; - } - gl_FragColor = vec4(clamp(color*depth*0.05, 0.0, 10.0)*mod(gl_FragCoord.y, 2.0), 1.0 ); - } - - "; - - -} \ No newline at end of file diff --git a/examples/HerokuShaders/src/shaders/FragmentShader_6288_1.hx b/examples/HerokuShaders/src/shaders/FragmentShader_6288_1.hx deleted file mode 100644 index 747f2323d..000000000 --- a/examples/HerokuShaders/src/shaders/FragmentShader_6288_1.hx +++ /dev/null @@ -1,45 +0,0 @@ -package shaders; - - -class FragmentShader_6288_1 { - - - //http://glsl.heroku.com/e#6288.1 - - - public static var source = " - - uniform float time; - uniform vec2 mouse; - uniform vec2 resolution; - - - void main( void ) - { - - vec2 uPos = ( gl_FragCoord.xy / resolution.xy );//normalize wrt y axis - //suPos -= vec2((resolution.x/resolution.y)/2.0, 0.0);//shift origin to center - - uPos.x -= 1.0; - uPos.y -= 0.5; - - vec3 color = vec3(0.0); - float vertColor = 0.0; - for( float i = 0.0; i < 15.0; ++i ) - { - float t = time * (0.9); - - uPos.y += sin( uPos.x*i + t+i/2.0 ) * 0.1; - float fTemp = abs(1.0 / uPos.y / 100.0); - vertColor += fTemp; - color += vec3( fTemp*(10.0-i)/10.0, fTemp*i/10.0, pow(fTemp,1.5)*1.5 ); - } - - vec4 color_final = vec4(color, 1.0); - gl_FragColor = color_final; - } - - "; - - -} \ No newline at end of file diff --git a/examples/HerokuShaders/src/shaders/VertexShader.hx b/examples/HerokuShaders/src/shaders/VertexShader.hx deleted file mode 100644 index cc358e56d..000000000 --- a/examples/HerokuShaders/src/shaders/VertexShader.hx +++ /dev/null @@ -1,23 +0,0 @@ -package shaders; - - -class VertexShader { - - - public static var source = " - - attribute vec3 position; - attribute vec2 surfacePosAttrib; - varying vec2 surfacePosition; - - void main() { - - surfacePosition = surfacePosAttrib; - gl_Position = vec4( position, 1.0 ); - - } - - "; - - -} \ No newline at end of file diff --git a/examples/SimpleAudioExample/Assets/.keep b/examples/SimpleAudioExample/Assets/.keep deleted file mode 100644 index e69de29bb..000000000 diff --git a/examples/SimpleOpenGL/Assets/.keep b/examples/SimpleOpenGL/Assets/.keep deleted file mode 100644 index e69de29bb..000000000 diff --git a/examples/SimpleOpenGL/project.lime.xml b/examples/SimpleOpenGL/project.lime.xml deleted file mode 100644 index ab5a31dfd..000000000 --- a/examples/SimpleOpenGL/project.lime.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/examples/SimpleOpenGL/src/Main.hx b/examples/SimpleOpenGL/src/Main.hx deleted file mode 100644 index 08f8b4413..000000000 --- a/examples/SimpleOpenGL/src/Main.hx +++ /dev/null @@ -1,208 +0,0 @@ - - //Ported and modified from OpenFL samples - //underscorediscovery - -import lime.utils.Assets; -import lime.Lime; - - //Import GL stuff from lime -import lime.gl.GL; -import lime.gl.GLBuffer; -import lime.gl.GLProgram; - - //utils -import lime.utils.Float32Array; -import lime.geometry.Matrix3D; - - -class Main { - - public var lib : Lime; - - //Shader stuff for drawing - private var shaderProgram:GLProgram; - private var vertexAttribute:Int; - - //The vertices are stored in here for GL - private var vertexBuffer:GLBuffer; - - //Some value to mess with the clear color - private var red_value : Float = 1.0; - private var red_direction : Int = 1; - - var end_dt : Float = 0.016; - var dt : Float = 0.016; - - public function new() { } - - public function ready( _lime : Lime ) { - - //Store a reference - lib = _lime; - - // Init the shaders and view - init(); - - } //ready - - - public function init() { - - //Set up shaders - createProgram(); - - //Create a set of vertices - var vertices : Float32Array = new Float32Array([ - 100.0, 100.0, 0.0, - -100.0, 100.0, 0.0, - 100.0, -100.0, 0.0, - -100.0, -100.0, 0.0 - ]); - - //Create a buffer from OpenGL - vertexBuffer = GL.createBuffer(); - //Bind it - GL.bindBuffer( GL.ARRAY_BUFFER, vertexBuffer ); - //Point it to the vertex array! - GL.bufferData( GL.ARRAY_BUFFER, vertices, GL.STATIC_DRAW ); - - } //init - - //Called each frame by lime for logic (called before render) - public function update() { - - dt = haxe.Timer.stamp() - end_dt; - end_dt = haxe.Timer.stamp(); - - //an awful magic number to change the value slowly - red_value += (red_direction * 0.3) * dt; - - if(red_value >= 1) { - red_value = 1; - red_direction = -red_direction; - } else if(red_value <= 0) { - red_value = 0; - red_direction = -red_direction; - } - - } //update - - //Called by lime - public function onmousemove(_event:Dynamic) { - } - //Called by lime - public function onmousedown(_event:Dynamic) { - } - //Called by lime - public function onmouseup(_event:Dynamic) { - } - //Called by lime - public function onkeydown(_event:Dynamic) { - } - //Called by lime - public function onkeyup(_event:Dynamic) { - } - - - //Called by lime - public function render() { - - //Set the viewport for GL - GL.viewport( 0, 0, lib.config.width, lib.config.height ); - - //Set the clear color to a weird color that bounces around - GL.clearColor( red_value, red_value*0.5, red_value*0.3, 1); - //Clear the buffers - GL.clear( GL.COLOR_BUFFER_BIT | GL.DEPTH_BUFFER_BIT ); - - //Work out the middle of the viewport - var positionX = (lib.config.width / 2) * (red_value*2); - var positionY = (lib.config.height / 2) * (red_value*2); - - //Create the projection and modelview matrices - var projectionMatrix = Matrix3D.createOrtho (0, lib.config.width, lib.config.height, 0, 1000, -1000); - var modelViewMatrix = Matrix3D.create2D (positionX, positionY, 1, 0); - - //Bind the shader pointers to the vertex GL Buffer we made in init - GL.bindBuffer (GL.ARRAY_BUFFER, vertexBuffer); - GL.vertexAttribPointer (vertexAttribute, 3, GL.FLOAT, false, 0, 0); - - //Set the projection values in the shader so they can render accordingly - var projectionMatrixUniform = GL.getUniformLocation (shaderProgram, "projectionMatrix"); - var modelViewMatrixUniform = GL.getUniformLocation (shaderProgram, "modelViewMatrix"); - - //Update the GL Matrices - GL.uniformMatrix3D (projectionMatrixUniform, false, projectionMatrix); - GL.uniformMatrix3D (modelViewMatrixUniform, false, modelViewMatrix); - - //And finally, Draw the vertices with the applied shaders and view - GL.drawArrays (GL.TRIANGLE_STRIP, 0, 4); - - } //render - - - //Shader initialize - private function createProgram() : Void { - - var vertexShaderSource = - - "attribute vec3 vertexPosition; - - uniform mat4 modelViewMatrix; - uniform mat4 projectionMatrix; - - void main(void) { - gl_Position = projectionMatrix * modelViewMatrix * vec4(vertexPosition, 1.0); - }"; - - var fragmentShaderSource = - "void main(void) { - gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); - }"; - - //Create the GPU shaders - var vertexShader = GL.createShader( GL.VERTEX_SHADER ); - var fragmentShader = GL.createShader( GL.FRAGMENT_SHADER ); - - //Set the shader source and compile it - GL.shaderSource( vertexShader, vertexShaderSource ); - GL.shaderSource( fragmentShader, fragmentShaderSource ); - - //Try compiling the vertex shader - GL.compileShader( vertexShader ); - if (GL.getShaderParameter (vertexShader, GL.COMPILE_STATUS) == 0) { - throw "Error compiling vertex shader"; - } //COMPILE_STATUS - - //Now try compile the fragment shader - GL.compileShader( fragmentShader ); - if (GL.getShaderParameter(fragmentShader, GL.COMPILE_STATUS) == 0) { - throw "Error compiling fragment shader"; - } //COMPILE_STATUS - - //Create the GPU program - shaderProgram = GL.createProgram(); - - //Attach the shader code to the program - GL.attachShader( shaderProgram, vertexShader ); - GL.attachShader( shaderProgram, fragmentShader ); - - //And link the program - GL.linkProgram( shaderProgram ); - if (GL.getProgramParameter (shaderProgram, GL.LINK_STATUS) == 0) { - throw "Unable to initialize the shader program."; - } //LINK_STATUS - - //Set the shader active - GL.useProgram( shaderProgram ); - //Fetch the vertex attribute - vertexAttribute = GL.getAttribLocation (shaderProgram, "vertexPosition"); - //And enable it (disable by default) - GL.enableVertexAttribArray (vertexAttribute); - - } //createProgram - - -} //Main - - diff --git a/haxelib.json b/haxelib.json index 6008a8609..affed39ac 100644 --- a/haxelib.json +++ b/haxelib.json @@ -7,5 +7,7 @@ "version": "0.9.0", "releasenote": "Preliminary release", "contributors": [ "singmajesty", "underscorediscovery" ], - "dependencies": {} + "dependencies": { + "lime-tools": "" + } } diff --git a/include.xml b/include.xml index cfe4a4ef5..a8e014317 100644 --- a/include.xml +++ b/include.xml @@ -30,5 +30,6 @@ + diff --git a/samples/HerokuShaders/Assets/4278.1.frag b/samples/HerokuShaders/Assets/4278.1.frag new file mode 100644 index 000000000..1dc0275bf --- /dev/null +++ b/samples/HerokuShaders/Assets/4278.1.frag @@ -0,0 +1,85 @@ +//http://glsl.heroku.com/e#4278.1 + + +uniform float time; +uniform vec2 resolution; +uniform vec2 mouse; + +mat3 genRotMat(float a0,float x,float y,float z){ +float a=a0*3.1415926535897932384626433832795/180.0; + return mat3( + 1.0+(1.0-cos(a))*(x*x-1.0), + -z*sin(a)+(1.0-cos(a))*x*y, + y*sin(a)+(1.0-cos(a))*x*z, + z*sin(a)+(1.0-cos(a))*x*y, + 1.0+(1.0-cos(a))*(y*y-1.0), + -x*sin(a)+(1.0-cos(a))*y*z, + -y*sin(a)+(1.0-cos(a))*x*z, + x*sin(a)+(1.0-cos(a))*y*z, + 1.0+(1.0-cos(a))*(z*z-1.0) + ); +} + +float cubeDist(vec3 p){ + return max(abs(p.x),max(abs(p.y),abs(p.z))); +} + +void main(){ + float spread=1.0; + float total=0.0; + float delta=0.01; + float cameraZ=-1.75; + float nearZ=-1.0; + float farZ=1.0; + float gs=0.0; + int iter=0; + vec3 col=vec3(0.0,0.0,0.0); + vec3 ray=vec3(0.0,0.0,0.0); + mat3 rot=genRotMat(sin(time/4.13)*360.0,1.0,0.0,0.0); + rot=rot*genRotMat(sin(time/4.64)*360.0,0.0,1.0,0.0); + rot=rot*genRotMat(sin(time/4.24)*360.0,0.0,0.0,1.0); + vec2 p=vec2(0.0,0.0); + p.x=gl_FragCoord.x/resolution.y-0.5*resolution.x/resolution.y; + p.y=gl_FragCoord.y/resolution.y-0.5; + ray.xy+=p.xy*spread*(nearZ-cameraZ); + vec3 rayDir=vec3(spread*p.xy*delta,delta); + vec3 tempDir=rayDir*rot; + vec3 norm; + ray.z=nearZ; + bool refracted=false; + for(int i=0;i<250;i++){ + vec3 temp; + vec3 tempc; + float val; + temp=ray.xyz*rot; + tempc=temp; + float thres=0.5; + if(tempc.x<0.0)tempc.x=abs(tempc.x); + if(tempc.x=farZ)break; + } + col.x=col.x/float(iter); + col.y=col.y/float(iter); + col.z=col.z/float(iter); + gl_FragColor=vec4(col,1.0); +} \ No newline at end of file diff --git a/samples/HerokuShaders/Assets/5359.8.frag b/samples/HerokuShaders/Assets/5359.8.frag new file mode 100644 index 000000000..fa4e4932b --- /dev/null +++ b/samples/HerokuShaders/Assets/5359.8.frag @@ -0,0 +1,133 @@ +//http://glsl.heroku.com/e#5359.8 + + +uniform float time; +uniform vec2 resolution; + + +// NEBULA - CoffeeBreakStudios.com (CBS) +// Work in progress.... +// +// 3148.26: Switched from classic to simplex noise +// 3148.27: Reduced number of stars +// 3249.0: Switched to fast computed 3D noise. Less quality but ~ 2x faster +// 3249.5: Removed use of random number generator to gain performance +// 3265.0: Added rotation: glsl.heroku.com/e#3005.1 +// 3265.6: Faster random number generator +// 5359.0: Added Barrel distortion and different starfield: http://glsl.heroku.com/e#5334.3 + +//Utility functions + +vec3 fade(vec3 t) { + return vec3(1.0,1.0,1.0); +} + +vec2 rotate(vec2 point, float rads) { + float cs = cos(rads); + float sn = sin(rads); + return point * mat2(cs, -sn, sn, cs); +} + +vec4 randomizer4(const vec4 x) +{ + vec4 z = mod(x, vec4(5612.0)); + z = mod(z, vec4(3.1415927 * 2.0)); + return(fract(cos(z) * vec4(56812.5453))); +} + +float rand(vec2 co){ + return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453); +} + +// Fast computed noise +// http://www.gamedev.net/topic/502913-fast-computed-noise/ + +const float A = 1.0; +const float B = 57.0; +const float C = 113.0; +const vec3 ABC = vec3(A, B, C); +const vec4 A3 = vec4(0, B, C, C+B); +const vec4 A4 = vec4(A, A+B, C+A, C+A+B); + +float cnoise4(const in vec3 xx) +{ + vec3 x = mod(xx + 32768.0, 65536.0); + vec3 ix = floor(x); + vec3 fx = fract(x); + vec3 wx = fx*fx*(3.0-2.0*fx); + float nn = dot(ix, ABC); + + vec4 N1 = nn + A3; + vec4 N2 = nn + A4; + vec4 R1 = randomizer4(N1); + vec4 R2 = randomizer4(N2); + vec4 R = mix(R1, R2, wx.x); + float re = mix(mix(R.x, R.y, wx.y), mix(R.z, R.w, wx.y), wx.z); + + return 1.0 - 2.0 * re; +} +float surface3 ( vec3 coord, float frequency ) { + + float n = 0.0; + + n += 1.0 * abs( cnoise4( coord * frequency ) ); + n += 0.5 * abs( cnoise4( coord * frequency * 2.0 ) ); + n += 0.25 * abs( cnoise4( coord * frequency * 4.0 ) ); + n += 0.125 * abs( cnoise4( coord * frequency * 8.0 ) ); + n += 0.0625 * abs( cnoise4( coord * frequency * 16.0 ) ); + + return n; +} + +vec2 barrelDistortion(vec2 coord) { + vec2 cc = coord;// - 0.5; + float dist = dot(cc, cc); + return coord + cc * (dist * dist) * .4; +} + +void main( void ) { + float rads = radians(time*3.15); + //vec2 position = gl_FragCoord.xy / resolution.xy; + vec2 position=barrelDistortion(-1.0+2.0*((gl_FragCoord.xy)/resolution.xy)); + vec2 positionStars = ( gl_FragCoord.xy - resolution.xy*.5 ) / resolution.x; + position += rotate(position, rads); + float n = surface3(vec3(position*sin(time*0.1), time * 0.05)*mat3(1,sin(1.0),0,0,.8,.6,0,-.6,.8),0.9); + float n2 = surface3(vec3(position*cos(time*0.1), time * 0.04)*mat3(1,cos(1.0),0,0,.8,.6,0,-.6,.8),0.8); + float lum = length(n); + float lum2 = length(n2); + + vec3 tc = pow(vec3(1.0-lum),vec3(sin(position.x)+cos(time)+4.0,8.0+sin(time)+4.0,8.0)); + vec3 tc2 = pow(vec3(1.1-lum2),vec3(5.0,position.y+cos(time)+7.0,sin(position.x)+sin(time)+2.0)); + vec3 curr_color = (tc*0.8) + (tc2*0.5); + + + // 256 angle steps + float angle = atan(positionStars.y,positionStars.x)/(2.*3.14159265359); + angle += rads*0.5; + angle -= floor(angle); + + float rad = length(positionStars); + + float color = 0.0; + for (int i = 0; i < 10; i++) { + float angleFract = fract(angle*256.); + float angleRnd = floor(angle*256.)+1.; + float angleRnd1 = fract(angleRnd*fract(angleRnd*.7235)*45.1); + float angleRnd2 = fract(angleRnd*fract(angleRnd*.82657)*13.724); + float t = time+angleRnd1*10.; + float radDist = sqrt(angleRnd2+float(i)); + + float adist = radDist/rad*.1; + float dist = (t*.1+adist); + dist = abs(fract(dist)-.5); + color += max(0.,.5-dist*40./adist)*(.5-abs(angleFract-.5))*5./adist/radDist; + + angle = fract(angle+.61); + } + float color1 = color*rad; + + //curr_color += color/(n+n2); + + + gl_FragColor = vec4(curr_color, 1.0)+vec4( color1,color1,color,color1)/(n+n2); +} \ No newline at end of file diff --git a/samples/HerokuShaders/Assets/5398.8.frag b/samples/HerokuShaders/Assets/5398.8.frag new file mode 100644 index 000000000..1c8b4b73e --- /dev/null +++ b/samples/HerokuShaders/Assets/5398.8.frag @@ -0,0 +1,31 @@ +//http://glsl.heroku.com/e#5398.8 + + +uniform float time; +uniform vec2 mouse; +uniform vec2 resolution; + +void main( void ) { + + float scale = resolution.y / 100.0; + float ring = 50.0; + float radius = resolution.x*1.0; + float gap = scale*.5; + vec2 pos = gl_FragCoord.xy - resolution.xy*.5; + + float d = length(pos); + + // Create the wiggle + d += (sin(pos.y*0.25/scale+time)*sin(pos.x*0.25/scale+time*.5))*scale*2.0; + + // Compute the distance to the closest ring + float v = mod(d + radius/(ring*2.0), radius/ring); + v = abs(v - radius/(ring*2.0)); + + v = clamp(v-gap, 0.0, 1.0); + + d /= radius; + vec3 m = fract((d-1.0)*vec3(ring*-.5, -ring, ring*.25)*0.5); + + gl_FragColor = vec4( m*v, 1.0 ); +} \ No newline at end of file diff --git a/samples/HerokuShaders/Assets/5454.21.frag b/samples/HerokuShaders/Assets/5454.21.frag new file mode 100644 index 000000000..418e0284e --- /dev/null +++ b/samples/HerokuShaders/Assets/5454.21.frag @@ -0,0 +1,128 @@ +//http://glsl.heroku.com/e#5454.21 + + +uniform float time; +uniform vec2 mouse; +uniform vec2 resolution; + +// from http://glsl.heroku.com/e#5484.0 +vec3 asteroids( vec2 position ) { + + // 256 angle steps + float angle = atan(position.y,position.x)/(2.*3.14159265359); + angle -= floor(angle); + float rad = length(position); + + float color = 0.0; + for (int i = 0; i < 5; i++) { + float angleFract = fract(angle*256.); + float angleRnd = floor(angle*256.)+1.; + float angleRnd1 = fract(angleRnd*fract(angleRnd*.7235)*45.1); + float angleRnd2 = fract(angleRnd*fract(angleRnd*.82657)*13.724); + float t = -time+angleRnd1*10.; + float radDist = sqrt(angleRnd2+float(i)); + + float adist = radDist/rad*.1; + float dist = (t*.1+adist); + dist = abs(fract(dist)-.5); + color += max(0.,.5-dist*40./adist)*(.5-abs(angleFract-.5))*5./adist/radDist; + + angle = fract(angle+.61); + } + + return vec3( color )*.3; +} + +// from http://glsl.heroku.com/e#5248.0 +#define BIAS 0.1 +#define SHARPNESS 3.0 +vec3 star(vec2 position, float BLADES) { + float blade = clamp(pow(sin(atan(position.y,position.x )*BLADES)+BIAS, SHARPNESS), 0.0, 1.0); + vec3 color = mix(vec3(-0.34, -0.5, -1.0), vec3(0.0, -0.5, -1.0), (position.y + 1.0) * 0.25); + float d = 1.0/length(position) * 0.075; + color += vec3(0.95, 0.65, 0.30) * d; + color += vec3(0.95, 0.45, 0.30) * min(1.0, blade *0.7) * d; + return color; +} + +vec3 star2(vec2 position, float BLADES) { + float blade = clamp(pow(sin(atan(position.y,position.x )*BLADES + time*.5)+BIAS, 8.0), 0.0, 1.0); + vec3 color = mix(vec3(-0.34, -0.5, -0.0), vec3(0.0, -0.5, -0.0), (position.y + 1.0) * 0.25); + float d = 1.0/length(position) * 0.075; + color += vec3(0.95, 0.65, 0.30) * d; + color += vec3(0.95, 0.45, 0.30) * min(1.0, blade *0.7)*0.5; + return max(color.rgb, 0.0)*.5; +} + + +// Tweaked from http://glsl.heroku.com/e#4982.0 +float hash( float n ) { return fract(sin(n)*43758.5453); } + +float noise( in vec2 x ) +{ + vec2 p = floor(x); + vec2 f = fract(x); + f = f*f*(3.0-2.0*f); + float n = p.x + p.y*57.0; + float res = mix(mix(hash(n+0.0), hash(n+1.0),f.x), mix(hash(n+57.0), hash(n+58.0),f.x),f.y); + return res; +} + +vec3 cloud(vec2 p) { + vec3 f = vec3(0.0); + f += 0.5000*noise(p*10.0)*vec3(.45, .55, 1.0); + f += 0.2500*noise(p*20.0)*vec3(.85, .45, 1.0); + f += 0.1250*noise(p*40.0)*vec3(1.0, .00, 0.3); + f += 0.0625*noise(p*80.0)*vec3(1.0, 1.0, 1.0); + return f*.5; +} + +const float SPEED = 0.005; +const float SCALE = 80.0; +const float DENSITY = 1.5; +const float BRIGHTNESS = 10.0; +vec2 ORIGIN = resolution.xy*.5; + +float rand(vec2 co){ return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453); } + +vec3 layer(float i, vec2 pos, float dist, vec2 coord) { + float a = pow((1.0-dist),20.0); + float t = i*10.0 - time*i*i; + float r = coord.x - (t*SPEED); + float c = fract(a+coord.y + i*.543); + vec2 p = vec2(r, c*.5)*SCALE*(4.0/(i*i)); + vec2 uv = fract(p)*2.0-1.0; + float m = clamp((rand(floor(p))-DENSITY/i)*BRIGHTNESS, 0.0, 1.0); + return clamp(star(uv*.5, 6.0)*m*dist, 0.0, 1.0); +} + +void main( void ) { + + vec2 pos = gl_FragCoord.xy - ORIGIN ; + float dist = length(pos) / resolution.y; + vec2 coord = vec2(pow(dist, 0.1), atan(pos.x, pos.y) / (3.1415926*2.0)); + + // Nebulous cloud + vec3 color = cloud(pos/resolution); + + // Background stars + float a = pow((1.0-dist),20.0); + float t = time*-.05; + float r = coord.x - (t*0.005); + float c = fract(a+coord.y + 0.0*.543); + vec2 p = vec2(r, c*.5)*4000.0; + vec2 uv = fract(p)*2.0-1.0; + float m = clamp((rand(floor(p))-.9)*10.0, 0.0, 1.0); + color += clamp((1.0-length(uv*2.0))*m*dist, 0.0, 1.0); + + color += asteroids(pos/resolution.x); + + // Flying stars into black hole + color += layer(2.0, pos, dist, coord); + color += layer(3.0, pos, dist, coord); + color += layer(4.0, pos, dist, coord); + + color += star2(pos/resolution, 2.0); + + gl_FragColor = vec4(color, 1.0); +} \ No newline at end of file diff --git a/samples/HerokuShaders/Assets/5492.frag b/samples/HerokuShaders/Assets/5492.frag new file mode 100644 index 000000000..fe81806a7 --- /dev/null +++ b/samples/HerokuShaders/Assets/5492.frag @@ -0,0 +1,127 @@ +//http://glsl.heroku.com/e#5492.0 + + +uniform float time; +uniform vec2 mouse; +uniform vec2 resolution; + + +// Helper constants +#define F2 0.366025403 +#define G2 0.211324865 +#define K 0.0243902439 // 1/41 + +// Permutation polynomial +float permute(float x) { + return mod((34.0 * x + 1.0)*x, 289.0); +} + +// Gradient mapping with an extra rotation. +vec2 grad2(vec2 p, float rot) { +#if 1 +// Map from a line to a diamond such that a shift maps to a rotation. + float u = permute(permute(p.x) + p.y) * K + rot; // Rotate by shift + u = 4.0 * fract(u) - 2.0; + return vec2(abs(u)-1.0, abs(abs(u+1.0)-2.0)-1.0); +#else +#define TWOPI 6.28318530718 +// For more isotropic gradients, sin/cos can be used instead. + float u = permute(permute(p.x) + p.y) * K + rot; // Rotate by shift + u = fract(u) * TWOPI; + return vec2(cos(u), sin(u)); +#endif +} + +float srdnoise(in vec2 P, in float rot, out vec2 grad) { + + // Transform input point to the skewed simplex grid + vec2 Ps = P + dot(P, vec2(F2)); + + // Round down to simplex origin + vec2 Pi = floor(Ps); + + // Transform simplex origin back to (x,y) system + vec2 P0 = Pi - dot(Pi, vec2(G2)); + + // Find (x,y) offsets from simplex origin to first corner + vec2 v0 = P - P0; + + // Pick (+x, +y) or (+y, +x) increment sequence + vec2 i1 = (v0.x > v0.y) ? vec2(1.0, 0.0) : vec2 (0.0, 1.0); + + // Determine the offsets for the other two corners + vec2 v1 = v0 - i1 + G2; + vec2 v2 = v0 - 1.0 + 2.0 * G2; + + // Wrap coordinates at 289 to avoid float precision problems + Pi = mod(Pi, 289.0); + + // Calculate the circularly symmetric part of each noise wiggle + vec3 t = max(0.5 - vec3(dot(v0,v0), dot(v1,v1), dot(v2,v2)), 0.0); + vec3 t2 = t*t; + vec3 t4 = t2*t2; + + // Calculate the gradients for the three corners + vec2 g0 = grad2(Pi, rot); + vec2 g1 = grad2(Pi + i1, rot); + vec2 g2 = grad2(Pi + 1.0, rot); + + // Compute noise contributions from each corner + vec3 gv = vec3(dot(g0,v0), dot(g1,v1), dot(g2,v2)); // ramp: g dot v + vec3 n = t4 * gv; // Circular kernel times linear ramp + + // Compute partial derivatives in x and y + vec3 temp = t2 * t * gv; + vec3 gradx = temp * vec3(v0.x, v1.x, v2.x); + vec3 grady = temp * vec3(v0.y, v1.y, v2.y); + grad.x = -8.0 * (gradx.x + gradx.y + gradx.z); + grad.y = -8.0 * (grady.x + grady.y + grady.z); + grad.x += dot(t4, vec3(g0.x, g1.x, g2.x)); + grad.y += dot(t4, vec3(g0.y, g1.y, g2.y)); + grad *= 40.0; + + // Add contributions from the three corners and return + return 40.0 * (n.x + n.y + n.z); +} + + +vec2 complex_mul(vec2 factorA, vec2 factorB){ + return vec2( factorA.x*factorB.x - factorA.y*factorB.y, factorA.x*factorB.y + factorA.y*factorB.x); +} + +vec2 torus_mirror(vec2 uv){ + return vec2(1.)-abs(fract(uv*.5)*2.-1.); +} + +float sigmoid(float x) { + return 2./(1. + exp2(-x)) - 1.; +} + +float smoothcircle(vec2 uv, float radius, float sharpness){ + return 0.5 - sigmoid( ( length( (uv - 0.5)) - radius) * sharpness) * 0.5; +} + + +void main() { + + vec2 posScale = vec2(2.0); + + vec2 aspect = vec2(1.,resolution.y/resolution.x); + vec2 uv = 0.5 + (gl_FragCoord.xy * vec2(1./resolution.x,1./resolution.y) - 0.5)*aspect; + float mouseW = atan((mouse.y - 0.5)*aspect.y, (mouse.x - 0.5)*aspect.x); + vec2 mousePolar = vec2(sin(mouseW), cos(mouseW)); + vec2 offset = (mouse - 0.5)*4.; + offset = - complex_mul(offset, mousePolar) +time*0.0; + vec2 uv_distorted = uv; + + float filter = smoothcircle( -mouse + 0.5 +uv_distorted, 0.15, 64.); + uv_distorted = complex_mul(((uv_distorted - 0.5)*mix(2., 12., filter)), mousePolar) + offset; + + vec2 p = uv_distorted; + vec2 g1, g2; + // vec2 p = ( gl_FragCoord.xy / resolution.xy ) * 6.0; + float n1 = srdnoise(p*0.5, 0.0*time, g1); + float n2 = srdnoise(p*2.0 + g1*0.5, 0.51*time, g2); + float n3 = srdnoise(p*4.0 + g1*0.5 + g2*0.25, 0.77*time, g2); + gl_FragColor = vec4(vec3(0.4, 0.5, 0.6) + vec3(n1+0.75*n2+0.5*n3), 1.0); +} \ No newline at end of file diff --git a/samples/HerokuShaders/Assets/5733.frag b/samples/HerokuShaders/Assets/5733.frag new file mode 100644 index 000000000..9c7ee275d --- /dev/null +++ b/samples/HerokuShaders/Assets/5733.frag @@ -0,0 +1,24 @@ +//http://glsl.heroku.com/e#5733.0 + + +uniform float time; +uniform vec2 mouse; +uniform vec2 resolution; +varying vec2 surfacePosition; + + +void main( void ) { + vec2 p = surfacePosition; + float speed = 0.25; + vec3 color = vec3(0.5,0.2,0.1); + vec2 loc = vec2(cos(time/4.0*speed)/1.9-cos(time/2.0*speed)/3.8, + sin(time/4.0*speed)/1.9-sin(time/2.0*speed)/3.8 + ); + float depth; + for(int i = 0; i < 100; i+=1){ + p = vec2(p.x*p.x-p.y*p.y,2.0*p.y*p.x)+loc; + depth = float(i); + if((p.x*p.x-p.y*p.y) >= 25.0) break; + } + gl_FragColor = vec4(clamp(color*depth*0.9, 0.0, 2.0)*mod(gl_FragCoord.y, 2.0), 2.0 ); +} \ No newline at end of file diff --git a/samples/HerokuShaders/Assets/5805.18.frag b/samples/HerokuShaders/Assets/5805.18.frag new file mode 100644 index 000000000..7464351d2 --- /dev/null +++ b/samples/HerokuShaders/Assets/5805.18.frag @@ -0,0 +1,44 @@ +//http://glsl.heroku.com/e#5805.18 + + +uniform float time; +uniform vec2 mouse; +uniform vec2 resolution; + +float function_f (float x) { + return + mouse.y * 0.5 * 2.0 * resolution.y / 4.0 / (1.0 + exp((x+200.0)*0.1)) + - mouse.y * 0.5 * 2.0 * resolution.y / 4.0 / (1.0 + exp((x+100.0)*0.1)) + + mouse.y * 0.5 * 2.0 * resolution.y / 4.0 / (1.0 + exp(x*0.1)) + - mouse.y * 0.5 * 2.0 * resolution.y / 4.0 / (1.0 + exp((x-100.0)*0.1)) + + mouse.y * 0.5 * 2.0 * resolution.y / 4.0 / (1.0 + exp((x-200.0)*0.1)) + + sin(x*0.1 - time*10.0 + mouse.x * 10.0)*50.0; +} + +float function_g (float x) { + return - mouse.y * 0.5 * 2.0 * resolution.y / 4.0 / (1.0 + exp((x+200.0)*0.1)) + + mouse.y * 0.5 * 2.0 * resolution.y / 4.0 / (1.0 + exp((x+100.0)*0.1)) + - mouse.y * 0.5 * 2.0 * resolution.y / 4.0 / (1.0 + exp(x*0.1)) + + mouse.y * 0.5 * 2.0 * resolution.y / 4.0 / (1.0 + exp((x-100.0)*0.1)) + - mouse.y * 0.5 * 2.0 * resolution.y / 4.0 / (1.0 + exp((x-200.0)*0.1)) + + sin(x*0.1 + time*5.0 - mouse.x * 10.0)*50.0; +} + + +void main( void ) { + + vec3 color_1 = vec3(0.25, sin(time), cos(time)); + vec3 color_2 = vec3(0.5, 0.25, cos(time)); + + vec2 pos = gl_FragCoord.xy; + + pos.y -= resolution.y / 2.0; + pos.x -= resolution.x / 2.0; + + float intensity_f = 16.0 / abs(pos.y - function_f(pos.x)); + intensity_f = pow(intensity_f, 0.5); + + float intensity_g = 16.0 / abs(pos.y - function_g(pos.x)); + intensity_g += pow(intensity_g, 0.5); + + gl_FragColor = vec4((color_1 * intensity_f + color_2 * intensity_g)*mod(gl_FragCoord.y, 2.0), 1); +} \ No newline at end of file diff --git a/samples/HerokuShaders/Assets/5812.frag b/samples/HerokuShaders/Assets/5812.frag new file mode 100644 index 000000000..9d080d3bb --- /dev/null +++ b/samples/HerokuShaders/Assets/5812.frag @@ -0,0 +1,44 @@ +//http://glsl.heroku.com/e#5812 + + +uniform float time; +uniform vec2 mouse; +uniform vec2 resolution; + +float random(vec2 v) +{ +return fract(sin(dot(v ,vec2(13.9898,78.233))) * (10000.0+time*0.05)); +} + +void main( void ) +{ + const int numColors = 3; + vec3 colors[numColors]; + colors[0] = vec3( 0.3, 0.8, 0.8); + colors[1] = vec3( 0.8, 0.9, 0.4); + colors[2] = vec3( 0.4, 0.4, 0.5); + + vec2 screenPos = gl_FragCoord.xy; + vec2 screenPosNorm = gl_FragCoord.xy / resolution.xy; + vec2 position = screenPosNorm + mouse / 4.0; + + // calc block + vec2 screenBlock0 = floor(screenPos*0.16 + vec2(time,0) + mouse*3.0); + vec2 screenBlock1 = floor(screenPos*0.08 + vec2(time*1.5,0) + mouse*5.0); + vec2 screenBlock2 = floor(screenPos*0.02 + vec2(time*2.0,0)+mouse*10.0); + float rand0 = random(screenBlock0); + float rand1 = random(screenBlock1); + float rand2 = random(screenBlock2); + + float rand = rand1; + if ( rand2 < 0.05 ) { rand = rand2; } + + // block color + vec3 color = mix( colors[0], colors[1], pow(rand,5.0) ); + if ( rand < 0.05 ) { color=colors[2]; } + + float vignette = 1.6-length(screenPosNorm*2.0-1.0); + vec4 finalColor = vec4(color*vignette, 1.0); + + gl_FragColor = finalColor; +} \ No newline at end of file diff --git a/samples/HerokuShaders/Assets/5891.5.frag b/samples/HerokuShaders/Assets/5891.5.frag new file mode 100644 index 000000000..88066932f --- /dev/null +++ b/samples/HerokuShaders/Assets/5891.5.frag @@ -0,0 +1,40 @@ +//http://glsl.heroku.com/e#5891.5 + + +uniform float time; +uniform vec2 mouse; +uniform vec2 resolution; + +const float Tau = 6.2832; +const float speed = .02; +const float density = .04; +const float shape = .04; + +float random( vec2 seed ) { + return fract(sin(seed.x+seed.y*1e3)*1e5); +} + +float Cell(vec2 coord) { + vec2 cell = fract(coord) * vec2(.5,2.) - vec2(.0,.5); + return (1.-length(cell*2.-1.))*step(random(floor(coord)),density)*2.; +} + +void main( void ) { + + vec2 p = gl_FragCoord.xy / resolution - mouse; + + float a = fract(atan(p.x, p.y) / Tau); + float d = length(p); + + vec2 coord = vec2(pow(d, shape), a)*256.; + vec2 delta = vec2(-time*speed*256., .5); + + float c = 0.; + for(int i=0; i<3; i++) { + coord += delta; + c = max(c, Cell(coord)); + } + + gl_FragColor = vec4(c * d); + +} \ No newline at end of file diff --git a/samples/HerokuShaders/Assets/6022.frag b/samples/HerokuShaders/Assets/6022.frag new file mode 100644 index 000000000..8bc0ddc23 --- /dev/null +++ b/samples/HerokuShaders/Assets/6022.frag @@ -0,0 +1,84 @@ +//http://glsl.heroku.com/e#6022.0 + + +uniform float time; +uniform vec2 mouse; +uniform vec2 resolution; +varying vec2 surfacePosition; + +float rand(vec2 co){ + return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43748.5453); +} +float cerp(float a, float b, float i) +{ + if(i<0.) + i += 1.; + i *= 3.14159265; + i = (1.-cos(i))/2.; + return a*(1.-i)+b*i; +} +float lerp(float a, float b, float i) +{ + if(i<0.) + i+=1.; + return a*(1.-i)+b*i; +} +vec3 lerp(vec3 a, vec3 b, float i) +{ + if(i<0.) + i+=1.; + return a*(1.-i)+b*i; +} +float posrand(vec2 pos, float width, float height) +{ + return rand(vec2(int(pos.x*width),int(pos.y*height))); +} +float tdposrand(vec2 pos, float width, float height) +{ + float n1, n2, n3, n4, n5, n6; + n1 = posrand(pos,width,height); + n2 = posrand(vec2(pos.x+1./width,pos.y),width,height); + n3 = posrand(vec2(pos.x,pos.y+1./height),width,height); + n4 = posrand(vec2(pos.x+1./width,pos.y+1./height),width,height); + n5 = cerp(n1,n2,pos.x*width-float(int(pos.x*width))); + n6 = cerp(n3,n4,pos.x*width-float(int(pos.x*width))); + return cerp(n5,n6,pos.y*height-float(int(pos.y*height))); +} + +vec3 readcolpath(vec3 one, vec3 two, vec3 thr, vec3 fou, float i) +{ + int num = int(i*3.); + if(num==0) + return lerp(one,two,i*3.-float(num)); + if(num==1) + return lerp(two,thr,i*3.-float(num)); + if(num==2) + return lerp(thr,fou,i*3.-float(num)); + return fou; +} +void main( void ) { + + vec2 position = surfacePosition+.5; + vec2 odd = vec2(0,time/5.); + vec3 col1 = vec3(1.,0.25,0.); + vec3 col2 = vec3(.45,0.2,0.); + vec3 col3 = vec3(0.2,.1,0.); + vec3 col4 = vec3(.4,.3,.25); + float color = 0.0; + position = position*(1.+1./12.)+vec2(length(vec2(tdposrand(position-odd,2.,2.),tdposrand(position*4.3-odd,2.,2.))))/12.; + if(position.y>0.) + { + //color += tdposrand(position-odd,1000.,1000.)/5.; + color += tdposrand(position-odd,50.,50.)/8.; + color += tdposrand(position-odd,20.,20.)/3.; + color += tdposrand(position-odd,10.,10.)/2.; + color += tdposrand(position-odd,5.,5.); + color /= position.y*1.; + } + else + { + color = 16.0; + } + gl_FragColor = vec4( vec3( color/2. )*readcolpath(col1,col2,col3,col4,color/16.), 1.0 ); + +} \ No newline at end of file diff --git a/samples/HerokuShaders/Assets/6043.1.frag b/samples/HerokuShaders/Assets/6043.1.frag new file mode 100644 index 000000000..9d6f23863 --- /dev/null +++ b/samples/HerokuShaders/Assets/6043.1.frag @@ -0,0 +1,137 @@ +//http://glsl.heroku.com/e#6043.1 + + +uniform float time; +uniform vec2 mouse; +uniform vec2 resolution; + +//.h +vec3 sim(vec3 p,float s); +vec2 rot(vec2 p,float r); +vec2 rotsim(vec2 p,float s); + +//nice stuff :) +vec2 makeSymmetry(vec2 p){ + vec2 ret=p; + ret=rotsim(ret,5.08052); + ret.x=abs(ret.x); + return ret; +} + +float makePoint(float x,float y,float fx,float fy,float sx,float sy,float t){ + float xx=x+tan(t*fx)*sx; + float yy=y-tan(t*fy)*sy; + return 0.5/sqrt(abs(x*xx+yy*yy)); +} + + + +//util functions +const float PI=5.08052; + +vec3 sim(vec3 p,float s){ + vec3 ret=p; + ret=p+s/2.0; + ret=fract(ret/s)*s-s/2.0; + return ret; +} + +vec2 rot(vec2 p,float r){ + vec2 ret; + ret.x=p.x*cos(r)-p.y*sin(r); + ret.y=p.x*sin(r)+p.y*cos(r); + return ret; +} + +vec2 rotsim(vec2 p,float s){ + vec2 ret=p; + ret=rot(p,-PI/(s*2.0)); + ret=rot(p,floor(atan(ret.x,ret.y)/PI*s)*(PI/s)); + return ret; +} +//Util stuff end + + + +vec2 complex_mul(vec2 factorA, vec2 factorB){ + return vec2( factorA.x*factorB.x - factorA.y*factorB.y, factorA.x*factorB.y + factorA.y*factorB.x); +} + +vec2 torus_mirror(vec2 uv){ + return vec2(1.)-abs(fract(uv*.5)*2.-1.); +} + +float sigmoid(float x) { + return 2./(1. + exp2(-x)) - 1.; +} + +float smoothcircle(vec2 uv, float radius, float sharpness){ + return 0.5 - sigmoid( ( length( (uv - 0.5)) - radius) * sharpness) * 0.5; +} + + +void main() { + + vec2 posScale = vec2(2.0); + + vec2 aspect = vec2(1.,resolution.y/resolution.x); + vec2 uv = 0.5 + (gl_FragCoord.xy * vec2(1./resolution.x,1./resolution.y) - 0.5)*aspect; + float mouseW = atan((mouse.y - 0.5)*aspect.y, (mouse.x - 0.5)*aspect.x); + vec2 mousePolar = vec2(sin(mouseW), cos(mouseW)); + vec2 offset = (mouse - 0.5)*2.*aspect; + offset = - complex_mul(offset, mousePolar) +time*0.0; + vec2 uv_distorted = uv; + + float filter = smoothcircle( uv_distorted, 0.12, 100.); + uv_distorted = complex_mul(((uv_distorted - 0.5)*mix(2., 6., filter)), mousePolar) + offset; + + + vec2 p=(gl_FragCoord.xy/resolution.x)*2.0-vec2(1.0,resolution.y/resolution.x); + p = uv_distorted; +p.y=-p.y; + p=p*2.0; + + p=makeSymmetry(p); + + float x=p.x; + float y=p.y; + + float t=time*0.1618; + + float a= + makePoint(x,y,3.3,2.9,0.3,0.3,t); + a=a+makePoint(x,y,1.9,2.0,0.4,0.4,t); + a=a+makePoint(x,y,0.8,0.7,0.4,0.5,t); + a=a+makePoint(x,y,2.3,0.1,0.6,0.3,t); + a=a+makePoint(x,y,0.8,1.7,0.5,0.4,t); + a=a+makePoint(x,y,0.3,1.0,0.4,0.4,t); + a=a+makePoint(x,y,1.4,1.7,0.4,0.5,t); + a=a+makePoint(x,y,1.3,2.1,0.6,0.3,t); + a=a+makePoint(x,y,1.8,1.7,0.5,0.4,t); + + float b= + makePoint(x,y,1.2,1.9,0.3,0.3,t); + b=b+makePoint(x,y,0.7,2.7,0.4,0.4,t); + b=b+makePoint(x,y,1.4,0.6,0.4,0.5,t); + b=b+makePoint(x,y,2.6,0.4,0.6,0.3,t); + b=b+makePoint(x,y,0.7,1.4,0.5,0.4,t); + b=b+makePoint(x,y,0.7,1.7,0.4,0.4,t); + b=b+makePoint(x,y,0.8,0.5,0.4,0.5,t); + b=b+makePoint(x,y,1.4,0.9,0.6,0.3,t); + b=b+makePoint(x,y,0.7,1.3,0.5,0.4,t); + + float c= + makePoint(x,y,3.7,0.3,0.3,0.3,t); + c=c+makePoint(x,y,1.9,1.3,0.4,0.4,t); + c=c+makePoint(x,y,0.8,0.9,0.4,0.5,t); + c=c+makePoint(x,y,1.2,1.7,0.6,0.3,t); + c=c+makePoint(x,y,0.3,0.6,0.5,0.4,t); + c=c+makePoint(x,y,0.3,0.3,0.4,0.4,t); + c=c+makePoint(x,y,1.4,0.8,0.4,0.5,t); + c=c+makePoint(x,y,0.2,0.6,0.6,0.3,t); + c=c+makePoint(x,y,1.3,0.5,0.5,0.4,t); + + vec3 d=vec3(a+b,b+c,c)/32.0; + + gl_FragColor = vec4(d.x,d.y,d.z,1.0); +} \ No newline at end of file diff --git a/samples/HerokuShaders/Assets/6049.frag b/samples/HerokuShaders/Assets/6049.frag new file mode 100644 index 000000000..013c02fa8 --- /dev/null +++ b/samples/HerokuShaders/Assets/6049.frag @@ -0,0 +1,189 @@ +//http://glsl.heroku.com/e#6049.0 + + +uniform vec2 resolution; +uniform float time; +uniform vec2 mouse; + +//Util Start +float PI=3.14159265; + +vec2 ObjUnion( + in vec2 obj0, + in vec2 obj1) +{ + if (obj0.x0.0) fp.x=-fp.x; + if (fp.x>0.0) return vec3(0.0,0.0,0.0); + else return vec3(1.0,1.0,1.0); +} + +//Scene End + +float raymarching( + in vec3 prp, + in vec3 scp, + in int maxite, + in float precis, + in float startf, + in float maxd, + out float objid) +{ + const vec3 e=vec3(0.1,0,0.0); + vec2 s=vec2(startf,0.0); + vec3 c,p,n; + float f=startf; + for(int i=0;i<256;i++){ + if (abs(s.x)maxd||i>maxite) break; + f+=s.x; + p=prp+scp*f; + s=obj(p); + objid=s.y; + } + if (f>maxd) objid=-1.0; + return f; +} + + +vec3 camera( + in vec3 prp, + in vec3 vrp, + in vec3 vuv, + in float vpd) +{ + vec2 vPos=-1.0+2.0*gl_FragCoord.xy/resolution.xy; + vec3 vpn=normalize(vrp-prp); + vec3 u=normalize(cross(vuv,vpn)); + vec3 v=cross(vpn,u); + vec3 scrCoord=prp+vpn*vpd+vPos.x*u*resolution.x/resolution.y+vPos.y*v; + return normalize(scrCoord-prp); +} + +vec3 normal(in vec3 p) +{ + //tetrahedron normal + const float n_er=0.01; + float v1=obj(vec3(p.x+n_er,p.y-n_er,p.z-n_er)).x; + float v2=obj(vec3(p.x-n_er,p.y-n_er,p.z+n_er)).x; + float v3=obj(vec3(p.x-n_er,p.y+n_er,p.z-n_er)).x; + float v4=obj(vec3(p.x+n_er,p.y+n_er,p.z+n_er)).x; + return normalize(vec3(v4+v1-v3-v2,v3+v4-v1-v2,v2+v4-v3-v1)); +} + +vec3 render( + in vec3 prp, + in vec3 scp, + in int maxite, + in float precis, + in float startf, + in float maxd, + in vec3 background, + in vec3 light, + in float spec, + in vec3 ambLight, + out vec3 n, + out vec3 p, + out float f, + out float objid) +{ + objid=-1.0; + f=raymarching(prp,scp,maxite,precis,startf,maxd,objid); + if (objid>-0.5){ + p=prp+scp*f; + vec3 c=obj_c(p); + n=normal(p); + vec3 cf=phong(p,prp,n,light,c,spec,ambLight); + return vec3(cf); + } + f=maxd; + return vec3(background); //background color +} + +void main(void){ + + //Camera animation + vec3 vuv=vec3(0,1,0); + vec3 vrp=vec3(time*4.0,0.0,0.0); + float mx=mouse.x*PI*2.0; + float my=mouse.y*PI/2.01; + vec3 prp=vrp+vec3(cos(my)*cos(mx),sin(my),cos(my)*sin(mx))*12.0; //Trackball style camera pos + float vpd=1.5; + vec3 light=prp+vec3(5.0,0,5.0); + + vec3 scp=camera(prp,vrp,vuv,vpd); + vec3 n,p; + float f,o; + const float maxe=0.01; + const float startf=0.1; + const vec3 backc=vec3(0.0,0.0,0.0); + const float spec=8.0; + const vec3 ambi=vec3(0.1,0.1,0.1); + + vec3 c1=render(prp,scp,256,maxe,startf,60.0,backc,light,spec,ambi,n,p,f,o); + c1=c1*max(1.0-f*.015,0.0); + vec3 c2=backc; + if (o>0.5){ + scp=reflect(scp,n); + c2=render(p+scp*0.05,scp,32,maxe,startf,10.0,backc,light,spec,ambi,n,p,f,o); + } + c2=c2*max(1.0-f*.1,0.0); + gl_FragColor=vec4(c1.xyz*0.75+c2.xyz*0.25,1.0); + +} \ No newline at end of file diff --git a/samples/HerokuShaders/Assets/6147.1.frag b/samples/HerokuShaders/Assets/6147.1.frag new file mode 100644 index 000000000..ee2fec8dd --- /dev/null +++ b/samples/HerokuShaders/Assets/6147.1.frag @@ -0,0 +1,59 @@ +//http://glsl.heroku.com/e#6147.1 + + +#define PI 3.14159265 +uniform float time; +uniform vec2 mouse, resolution; + +vec3 sim(vec3 p,float s); //.h +vec2 rot(vec2 p,float r); +vec2 rotsim(vec2 p,float s); + +vec2 makeSymmetry(vec2 p){ //nice stuff :) + vec2 ret=p; + ret=rotsim(p, 6.0); + ret.x=abs(ret.x); + return ret; +} + +float makePoint(float x,float y,float fx,float fy,float sx,float sy,float t){ + + float xx=x+tan(t * fx)*sy; + float yy=y-tan(t * fx)*sy; + return 0.8/sqrt(abs(x*xx+yy*yy)); +} + +vec2 sim(vec2 p,float s){ + vec2 ret=p; + ret=p+s/2.0; + ret=fract(ret/s)*s-s/2.0; + return ret; +} + +vec2 rot(vec2 p,float r){ + vec2 ret; + ret.x=p.x*cos(r)-p.y*sin(r); + ret.y=p.x*sin(r)+p.y*cos(r); + return ret; +} + +vec2 rotsim(vec2 p,float s){ + float k = atan(p.x, p.y); + vec2 ret=rot(p,floor((k + PI/(s*2.0)) / PI*s)*(PI/s)); + return ret; +} + +void main( void ) { + vec2 p=(gl_FragCoord.xy/resolution.x)*2.0-vec2(1.0,resolution.y/resolution.x); + p=makeSymmetry(p); + float x=p.x; + float y=p.y; + float t=time*0.2; + float a= makePoint(x,y,3.3,2.9,0.3,0.3,t); +// a=a+makePoint(x,y,1.8,1.7,0.5,0.4,t); + float b=makePoint(x,y,1.2,1.9,0.3,0.3,t); +// b=b+makePoint(x,y,0.7,2.7,0.4,0.4,t); + float c=makePoint(x,y,3.7,0.3,0.3,0.3,t); +// c=c+makePoint(x,y,0.8,0.9,0.4,0.5,t); + gl_FragColor = vec4(a/5.,b/5.,c/5.,1.0); +} \ No newline at end of file diff --git a/samples/HerokuShaders/Assets/6162.frag b/samples/HerokuShaders/Assets/6162.frag new file mode 100644 index 000000000..015ed2814 --- /dev/null +++ b/samples/HerokuShaders/Assets/6162.frag @@ -0,0 +1,92 @@ +//http://glsl.heroku.com/e#6162.0 + + +#define PI 3.141592653589793 + +#define ZOOM (4. - sin(time/2.)*3.) + +#define MAX_ITERATION 6 +#define ITERATION_BAIL sqrt(PI/2.) + +#define MAX_MARCH 50 +#define MAX_DISTANCE 2.3 + +uniform float time; +uniform vec2 mouse; +uniform vec2 resolution; + +float DE(vec3 p) +{ + vec3 w = p; + float dr = 1.; + float r = 0.; + for (int i=0; iITERATION_BAIL) break; + + dr*=pow(r, 7.)*8.+1.; + + float x = w.x; float x2 = x*x; float x4 = x2*x2; + float y = w.y; float y2 = y*y; float y4 = y2*y2; + float z = w.z; float z2 = z*z; float z4 = z2*z2; + + float k3 = x2 + z2; + float k2 = inversesqrt( pow(k3, 7.) ); + float k1 = x4 + y4 + z4 - 6.0*y2*z2 - 6.0*x2*y2 + 2.0*z2*x2; + float k4 = x2 - y2 + z2; + + w = vec3(64.0*x*y*z*(x2-z2)*k4*(x4-6.0*x2*z2+z4)*k1*k2, + -16.0*y2*k3*k4*k4 + k1*k1, + -8.0*y*k4*(x4*x4 - 28.0*x4*x2*z2 + 70.0*x4*z4 - 28.0*x2*z2*z4 + z4*z4)*k1*k2); + w+=p; + } + return .5*log(r)*r/dr; +} + +bool inCircle(vec3 p, vec3 d) +{ + float rdt = dot(p, d); + float rdr = dot(p, p) - 1.253314137315501; // sqrt(PI/2) + return (rdt*rdt)-rdr>0.; +} + + +void main( void ) +{ + vec2 pos = (gl_FragCoord.xy*2.0 - resolution.xy) / resolution.y; + + vec2 m = vec2(sin(time), cos(time))/ZOOM; + //m = ((.5-mouse)*PI*2.)/ZOOM; + m.y = clamp(m.y, -PI/2.+.01, PI/2.-.01); + + vec3 camOrigin = vec3(cos(m.x)*cos(m.y), sin(m.y), cos(m.y)*sin(m.x))*2.0; + vec3 camTarget = vec3(0.0, 0.0, 0.0); + vec3 camDir = normalize(camTarget - camOrigin); + vec3 camUp = normalize(vec3(0.0, 1.0, 0.0)); + vec3 camSide = normalize(cross(camDir, camUp)); + vec3 camCDS = cross(camDir, camSide); + + vec3 ray = normalize(camSide*pos.x + camCDS*pos.y + camDir*ZOOM); + + float col = 0., col2 = 0., col3 = 0.; + if (inCircle(camOrigin, ray)) + { + float m = 1.0, dist = 0.0, total_dist = 0.0; + + for(int i=0; iMAX_DISTANCE) break; + } + + col = m; + col2 = m*2.5-total_dist; + col3 = m*1.5-total_dist; + if (total_dist>MAX_DISTANCE) col = 0.; + } + + gl_FragColor = vec4(col, col2/2., col3*2., 1.0); +} \ No newline at end of file diff --git a/samples/HerokuShaders/Assets/6175.frag b/samples/HerokuShaders/Assets/6175.frag new file mode 100644 index 000000000..acc31e37e --- /dev/null +++ b/samples/HerokuShaders/Assets/6175.frag @@ -0,0 +1,225 @@ +//http://glsl.heroku.com/e#6175.0 + + +uniform float time; +uniform vec2 resolution; +uniform vec4 mouse; +uniform sampler2D tex0; +uniform sampler2D tex1; + +const float M_PI = 3.14159265358979323846; + +struct SphereIntersection +{ + // IN: + vec4 sphere; + vec3 ro; + vec3 rd; + // OUT: + float t; + vec3 pos; + vec3 normal; + float depth; +}; + +float saturate(float f) +{ + return clamp(f,0.0,1.0); +} + +vec3 saturate(vec3 v) +{ + return clamp(v,vec3(0,0,0),vec3(1,1,1)); +} + +// ... I went on the internet and I found THIS +float rand(vec2 co) +{ + return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453); +} + +// Theta, Phi (r == 1) +vec2 normalToSpherical(vec3 normal) +{ + vec2 spherical; + // Flip ZY. + normal.yz = normal.zy; + spherical.x = atan(normal.y,normal.x); // Theta + spherical.y = acos(normal.z); // Phi + return spherical; +} + +// Input: Theta, Phi +vec3 sphericalToCartesian(vec2 s) +{ + vec3 cart; + cart.x = cos(s.x) * sin(s.y); + cart.y = sin(s.x) * sin(s.y); + cart.z = cos(s.y); + // Flip ZY + cart.yz = cart.zy; + return cart; +} + +// Ray origin, Ray direction, (Sphere center, Sphere radius) +void raySphere(inout SphereIntersection i) +{ + vec4 sphere = i.sphere; + vec3 ro = i.ro; + vec3 rd = i.rd; + vec3 sc = sphere.xyz; + float sr = sphere.w; + vec3 sd = ro-sc; + // a == 1 + float b = 2.0*dot(rd,sd); + float c = dot(sd,sd)-(sr*sr); + float disc = b*b - 4.0*c; + if(disc<0.0) + { + i.t = -1.0; + return; + } + float t = (-b-sqrt(disc))/2.0; + i.t = t; + i.pos = ro+rd*t; + i.normal = normalize(i.pos-sphere.xyz); + i.depth = 2.0*sr*dot(normalize(sd),i.normal); +} + +vec3 sphereNormal(vec4 sphere, vec3 point) +{ + return normalize(point-sphere.xyz); +} + +float sphereFunction(vec2 coord) +{ + coord.x -= time/4.0; + coord.y += sin(time/4.0); + float thetaCoeff = 24.0; + float phiCoeff = 16.0; + float height = 0.8; + height += (sin(3.0*coord.y)*sin(4.0*coord.x))/10.0; + height += (sin(16.0*coord.y)*sin(24.0*coord.x))/10.0; + return height; +} + +vec3 sphereFunctionNormal(vec2 coord, vec4 sphere) +{ + // Approximates the local slope of the heightfield function + float d = 0.01; + vec2 s0coord = coord; // Center + vec2 s1coord = coord+vec2(d,0); // +X = +Theta + vec2 s2coord = coord+vec2(0,-d); // +Y = -Phi + // Sample heightfield + float s0 = sphereFunction(s0coord) * sphere.w; + float s1 = sphereFunction(s1coord) * sphere.w; + float s2 = sphereFunction(s2coord) * sphere.w; + // Convert samples to cartesian + vec3 s0c = sphericalToCartesian(s0coord)*s0; + vec3 s1c = sphericalToCartesian(s1coord)*s1; + vec3 s2c = sphericalToCartesian(s2coord)*s2; + // Tangent space + vec3 x = s1c-s0c; + vec3 y = s2c-s0c; + vec3 normal = normalize(cross(y,x)); + return normal; +} + +void rayMarchSphere(inout SphereIntersection i) +{ + const float NUM_SAMPLES = 50.0; + vec3 pos = i.pos; + vec3 dir = i.rd; + float stepSize = i.depth/NUM_SAMPLES; + + // No hit + i.t = -1.0; + + for(float s = 0.0; s < NUM_SAMPLES; s++) + { + if(s == 0.0) + { + pos += dir*stepSize*rand(gl_FragCoord.xy); + } + vec3 v = pos-i.sphere.xyz; + float height = length(v); + vec3 n = v/height; + vec2 sCoord = normalToSpherical(n); + float testHeight = sphereFunction(sCoord)*i.sphere.w; + testHeight += 0.000001; // Prevent floating point error + if(height<=testHeight) + { + i.t = length(pos-i.ro); + i.pos = pos; + i.normal = n; + i.normal = sphereFunctionNormal(sCoord,i.sphere); + return; + } + pos += dir*stepSize; + } + return; +} + +vec3 lighting(vec3 point, vec3 N, vec3 light, vec3 color) +{ + vec3 toLight = light-point; + vec3 L = normalize(toLight); + return color*saturate(dot(N,L)); +} + +void rayMarchedSphereIntersection(inout SphereIntersection i) +{ + // First intersect the sphere + raySphere(i); + // Then raymarch the heightfield + if(i.t > 0.0) + { + rayMarchSphere(i); + } +} + +void main(void) +{ + vec2 screenPos = -1.0 + 2.0 * gl_FragCoord.xy / resolution.xy; + vec2 screenPosAR = vec2(screenPos.x*(resolution.x/resolution.y),screenPos.y); + + vec3 rayDir = normalize(vec3(screenPosAR.x,screenPosAR.y,1.0)); + vec3 light = vec3(sin(time/4.0)*3.0,cos(time/5.0)*3.0,-2.0); + vec4 sphere = vec4(0.0,0.0,3.0,2.2); + + SphereIntersection inter; + inter.ro = vec3(0,0,0); + inter.rd = rayDir; + inter.sphere = sphere; + rayMarchedSphereIntersection(inter); + //raySphere(inter); + + vec3 color; + if(inter.t > 0.0) + { + float shadowFactor = 1.0; + SphereIntersection shadowInter; + vec3 lightDir = normalize(light-inter.pos); + shadowInter.ro = inter.pos; + shadowInter.rd = lightDir; + shadowInter.pos = inter.pos+lightDir*0.1; + shadowInter.sphere = sphere; + shadowInter.depth = sphere.w; + rayMarchSphere(shadowInter); + if(shadowInter.t > 0.0) + { + //shadowFactor = 0.0; + } + // Some crazy colors + vec3 diffuse = normalize(normalize(inter.pos-sphere.xyz)+vec3(abs(sin(time/4.0)),abs(cos(time/5.0)),abs(sin(time/5.0)*2.0))); + color.xyz = lighting(inter.pos, inter.normal, light, diffuse) * shadowFactor; + color.xyz += saturate(inter.normal.zzz+0.50)*diffuse; // Some fake backlighting + } + else + { + color.xyz = vec3(0,0,0); + } + + gl_FragColor.xyz = color; + gl_FragColor.w = 1.0; +} \ No newline at end of file diff --git a/samples/HerokuShaders/Assets/6223.2.frag b/samples/HerokuShaders/Assets/6223.2.frag new file mode 100644 index 000000000..d435c273f --- /dev/null +++ b/samples/HerokuShaders/Assets/6223.2.frag @@ -0,0 +1,37 @@ +//http://glsl.heroku.com/e#6223.2 + + +uniform float time; +uniform vec2 mouse; +uniform vec2 resolution; + +// a raymarching experiment by kabuto +//fork by tigrou ind (2013.01.22) +//optimized + +#define MAXITER 90 +#define MAXITER_SQR MAXITER*MAXITER + +vec3 field(vec3 p) { + p = abs(fract(p)-.5); + p *= p; + return sqrt(p+p.yzx*p.zzy)-.015; +} + +void main( void ) { + vec3 dir = normalize(vec3((gl_FragCoord.xy-resolution*.5)/resolution.x,1.)); + float a = time * 0.4; + vec3 pos = vec3(time*0.6 + sin(time)*0.2,sin(time)*0.25,-3.0); + + vec3 color = vec3(0); + for (int i = 0; i < MAXITER; i++) { + vec3 f2 = field(pos); + vec3 rep = vec3(1.0,0.7+sin(time)*0.7, 1.3); + float f = min(min(min(f2.x,f2.y),f2.z), length(mod(pos-vec3(0.1),rep)-0.5*rep)-0.10); + pos += dir*f; + color += float(MAXITER-i)/(f2+.01); + } + vec3 color3 = vec3(1.-1./(1.+color*(.09/float(MAXITER_SQR)))); + color3 *= color3; + gl_FragColor = vec4(vec3(color3.r+color3.g+color3.b),1.); +} \ No newline at end of file diff --git a/samples/HerokuShaders/Assets/6238.frag b/samples/HerokuShaders/Assets/6238.frag new file mode 100644 index 000000000..deee719e8 --- /dev/null +++ b/samples/HerokuShaders/Assets/6238.frag @@ -0,0 +1,28 @@ +//http://glsl.heroku.com/e#6238.0 + + +uniform float time; +uniform vec2 mouse; +uniform vec2 resolution; + +void main( void ) { + + vec3 color1 = vec3(1.7, 0.25, 0.5); + vec3 color2 = vec3(0.5, 0.7, 0.25); + vec3 color3 = vec3(0.25, 0.5, 0.7); + + vec2 point1 = resolution/2.0 + vec2(sin(time*2.0) * 10.0, cos(time*2.0) * 5.0); + vec2 point2 = resolution/2.0 + vec2(sin(time)*75.0, cos(time)*50.0); + vec2 point3 = resolution/2.0 + vec2(sin(time)*25.0, sin(time*2.0)*50.0)*2.0; + + vec2 dist1 = gl_FragCoord.xy - point1; + float intensity1 = pow(32.0/(0.01+length(dist1)), 2.0); + + vec2 dist2 = gl_FragCoord.xy - point2; + float intensity2 = pow(3.0/(0.01+length(dist2)), 2.0); + + vec2 dist3 = gl_FragCoord.xy - point3; + float intensity3 = pow(62.0/(0.01+length(dist3)), 1.0); + + gl_FragColor = vec4((color1*intensity1 + color2*intensity2 + color3*intensity3)*mod(gl_FragCoord.y, 2.0),1.0); +} \ No newline at end of file diff --git a/samples/HerokuShaders/Assets/6284.1.frag b/samples/HerokuShaders/Assets/6284.1.frag new file mode 100644 index 000000000..4d2b4cc31 --- /dev/null +++ b/samples/HerokuShaders/Assets/6284.1.frag @@ -0,0 +1,20 @@ +//http://glsl.heroku.com/e#6284.1 + + +uniform float time; +uniform vec2 mouse; +uniform vec2 resolution; + +void main( void ) { + + vec2 position = ( gl_FragCoord.xy / resolution.xy ) + mouse / 1.0; + + float color = 0.0; + color += sin( position.x * cos( time / 15.0 ) * 80.0 ) + cos( position.y * cos( time / 15.0 ) * 10.0 ); + color += sin( position.y * sin( time / 10.0 ) * 40.0 ) + cos( position.x * sin( time / 25.0 ) * 40.0 ); + color += sin( position.x * sin( time / 5.0 ) * 10.0 ) + sin( position.y * sin( time / 35.0 ) * 80.0 ); + color *= sin( time / 10.0 ) * 0.5; + + gl_FragColor = vec4( vec3( color, color * 0.1, sin( color + time / 9.0 ) * 0.75 ), 1.0 ); + +} \ No newline at end of file diff --git a/samples/HerokuShaders/Assets/6286.frag b/samples/HerokuShaders/Assets/6286.frag new file mode 100644 index 000000000..290357977 --- /dev/null +++ b/samples/HerokuShaders/Assets/6286.frag @@ -0,0 +1,23 @@ +//http://glsl.heroku.com/e#6286.0 + + +uniform float time; +uniform vec2 mouse; +uniform vec2 resolution; +varying vec2 surfacePosition; + +void main( void ) { + vec2 p = surfacePosition; + float speed = 0.45; + vec3 color = vec3(.4,.1,.8); + vec2 loc = vec2(cos(time/1.6*speed)/1.9-cos(time/.8*speed)/3.8, + sin(time/1.6*speed)/1.9-sin(time/.8*speed)/3.8 + ); + float depth; + for(int i = 0; i < 100; i+=1){ + p = vec2(p.x*p.x-p.y*p.y,2.0*p.x*p.y)+loc; + depth = float(i); + if((p.x*p.x+p.y*p.y) >= 4.0) break; + } + gl_FragColor = vec4(clamp(color*depth*0.05, 0.0, 10.0)*mod(gl_FragCoord.y, 2.0), 1.0 ); +} \ No newline at end of file diff --git a/samples/HerokuShaders/Assets/6288.1.frag b/samples/HerokuShaders/Assets/6288.1.frag new file mode 100644 index 000000000..e769404a6 --- /dev/null +++ b/samples/HerokuShaders/Assets/6288.1.frag @@ -0,0 +1,32 @@ +//http://glsl.heroku.com/e#6288.1 + + +uniform float time; +uniform vec2 mouse; +uniform vec2 resolution; + + +void main( void ) +{ + + vec2 uPos = ( gl_FragCoord.xy / resolution.xy );//normalize wrt y axis + //suPos -= vec2((resolution.x/resolution.y)/2.0, 0.0);//shift origin to center + + uPos.x -= 1.0; + uPos.y -= 0.5; + + vec3 color = vec3(0.0); + float vertColor = 0.0; + for( float i = 0.0; i < 15.0; ++i ) + { + float t = time * (0.9); + + uPos.y += sin( uPos.x*i + t+i/2.0 ) * 0.1; + float fTemp = abs(1.0 / uPos.y / 100.0); + vertColor += fTemp; + color += vec3( fTemp*(10.0-i)/10.0, fTemp*i/10.0, pow(fTemp,1.5)*1.5 ); + } + + vec4 color_final = vec4(color, 1.0); + gl_FragColor = color_final; +} \ No newline at end of file diff --git a/samples/HerokuShaders/Assets/heroku.vert b/samples/HerokuShaders/Assets/heroku.vert new file mode 100644 index 000000000..00e20fafa --- /dev/null +++ b/samples/HerokuShaders/Assets/heroku.vert @@ -0,0 +1,11 @@ + +attribute vec3 position; +attribute vec2 surfacePosAttrib; +varying vec2 surfacePosition; + +void main() { + + surfacePosition = surfacePosAttrib; + gl_Position = vec4( position, 1.0 ); + +} \ No newline at end of file diff --git a/samples/HerokuShaders/Assets/readme.txt b/samples/HerokuShaders/Assets/readme.txt new file mode 100644 index 000000000..6d008e674 --- /dev/null +++ b/samples/HerokuShaders/Assets/readme.txt @@ -0,0 +1 @@ +These shaders are taken from http://glsl.heroku.com \ No newline at end of file diff --git a/samples/HerokuShaders/HerokuShaders.hxproj b/samples/HerokuShaders/HerokuShaders.hxproj new file mode 100644 index 000000000..2000dc231 --- /dev/null +++ b/samples/HerokuShaders/HerokuShaders.hxproj @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/HerokuShaders/Source/Main.hx b/samples/HerokuShaders/Source/Main.hx new file mode 100644 index 000000000..85c6ae2e7 --- /dev/null +++ b/samples/HerokuShaders/Source/Main.hx @@ -0,0 +1,199 @@ +package; + + +import haxe.Timer; +import lime.gl.GL; +import lime.gl.GLBuffer; +import lime.gl.GLProgram; +import lime.gl.GLShader; +import lime.gl.GLUniformLocation; +import lime.geometry.Matrix3D; +import lime.utils.Float32Array; +import lime.utils.Assets; +import lime.Lime; + + +class Main { + + + private static var fragmentShaders = [ #if mobile "6284.1", "6238", "6147.1", "5891.5", "5805.18", "5492", "5398.8" #else "6286", "6288.1", "6284.1", "6238", "6223.2", "6175", "6162", "6147.1", "6049", "6043.1", "6022", "5891.5", "5805.18", "5812", "5733", "5454.21", "5492", "5359.8", "5398.8", "4278.1" #end ]; + private static var maxTime = 7; + + private var backbufferUniform:GLUniformLocation; + private var buffer:GLBuffer; + private var currentIndex:Int; + private var currentProgram:GLProgram; + private var currentTime:Float; + private var lime:Lime; + private var mouseUniform:GLUniformLocation; + private var positionAttribute:Int; + private var resolutionUniform:GLUniformLocation; + private var startTime:Float; + private var surfaceSizeUniform:GLUniformLocation; + private var timeUniform:GLUniformLocation; + private var vertexPosition:Int; + + + public function new () {} + + + private function compile ():Void { + + var program = GL.createProgram (); + var vertex = Assets.getText ("assets/heroku.vert"); + + #if desktop + var fragment = ""; + #else + var fragment = "precision mediump float;"; + #end + + fragment += Assets.getText ("assets/" + fragmentShaders[currentIndex] + ".frag"); + + var vs = createShader (vertex, GL.VERTEX_SHADER); + var fs = createShader (fragment, GL.FRAGMENT_SHADER); + + if (vs == null || fs == null) return; + + GL.attachShader (program, vs); + GL.attachShader (program, fs); + + GL.deleteShader (vs); + GL.deleteShader (fs); + + GL.linkProgram (program); + + if (GL.getProgramParameter (program, GL.LINK_STATUS) == 0) { + + trace (GL.getProgramInfoLog (program)); + trace ("VALIDATE_STATUS: " + GL.getProgramParameter (program, GL.VALIDATE_STATUS)); + trace ("ERROR: " + GL.getError ()); + return; + + } + + if (currentProgram != null) { + + GL.deleteProgram (currentProgram); + + } + + currentProgram = program; + + positionAttribute = GL.getAttribLocation (currentProgram, "surfacePosAttrib"); + GL.enableVertexAttribArray (positionAttribute); + + vertexPosition = GL.getAttribLocation (currentProgram, "position"); + GL.enableVertexAttribArray (vertexPosition); + + timeUniform = GL.getUniformLocation (program, "time"); + mouseUniform = GL.getUniformLocation (program, "mouse"); + resolutionUniform = GL.getUniformLocation (program, "resolution"); + backbufferUniform = GL.getUniformLocation (program, "backbuffer"); + surfaceSizeUniform = GL.getUniformLocation (program, "surfaceSize"); + + startTime = Timer.stamp (); + currentTime = startTime; + + } + + + private function createShader (source:String, type:Int):GLShader { + + var shader = GL.createShader (type); + GL.shaderSource (shader, source); + GL.compileShader (shader); + + if (GL.getShaderParameter (shader, GL.COMPILE_STATUS) == 0) { + + trace (GL.getShaderInfoLog (shader)); + return null; + + } + + return shader; + + } + + + private function randomizeArray (array:Array):Array { + + var arrayCopy = array.copy (); + var randomArray = new Array (); + + while (arrayCopy.length > 0) { + + var randomIndex = Math.round (Math.random () * (arrayCopy.length - 1)); + randomArray.push (arrayCopy.splice (randomIndex, 1)[0]); + + } + + return randomArray; + + } + + + public function ready (lime:Lime) { + + this.lime = lime; + + fragmentShaders = randomizeArray (fragmentShaders); + currentIndex = 0; + + buffer = GL.createBuffer (); + GL.bindBuffer (GL.ARRAY_BUFFER, buffer); + GL.bufferData (GL.ARRAY_BUFFER, new Float32Array ([ -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0 ]), GL.STATIC_DRAW); + GL.bindBuffer (GL.ARRAY_BUFFER, null); + + compile (); + + } + + + public function render ():Void { + + if (currentProgram == null) return; + + currentTime = Timer.stamp () - startTime; + + GL.viewport (0, 0, lime.config.width, lime.config.height); + GL.useProgram (currentProgram); + + GL.uniform1f (timeUniform, currentTime); + GL.uniform2f (mouseUniform, 0.1, 0.1); //GL.uniform2f (mouseUniform, (stage.mouseX / stage.stageWidth) * 2 - 1, (stage.mouseY / stage.stageHeight) * 2 - 1); + GL.uniform2f (resolutionUniform, lime.config.width, lime.config.height); + GL.uniform1i (backbufferUniform, 0 ); + GL.uniform2f (surfaceSizeUniform, lime.config.width, lime.config.height); + + GL.bindBuffer (GL.ARRAY_BUFFER, buffer); + GL.vertexAttribPointer (positionAttribute, 2, GL.FLOAT, false, 0, 0); + GL.vertexAttribPointer (vertexPosition, 2, GL.FLOAT, false, 0, 0); + + GL.clearColor (0, 0, 0, 1); + GL.clear (GL.COLOR_BUFFER_BIT | GL.DEPTH_BUFFER_BIT ); + GL.drawArrays (GL.TRIANGLES, 0, 6); + GL.bindBuffer (GL.ARRAY_BUFFER, null); + + } + + + public function update ():Void { + + if (currentTime > maxTime && fragmentShaders.length > 1) { + + currentIndex++; + + if (currentIndex > fragmentShaders.length - 1) { + + currentIndex = 0; + + } + + compile (); + + } + + } + + +} \ No newline at end of file diff --git a/samples/HerokuShaders/project.lime b/samples/HerokuShaders/project.lime new file mode 100644 index 000000000..425753154 --- /dev/null +++ b/samples/HerokuShaders/project.lime @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/HerokuShaders/Assets/.keep b/samples/SimpleAudioExample/Assets/.keep similarity index 100% rename from examples/HerokuShaders/Assets/.keep rename to samples/SimpleAudioExample/Assets/.keep diff --git a/examples/SimpleAudioExample/Assets/ambience.ogg b/samples/SimpleAudioExample/Assets/ambience.ogg similarity index 100% rename from examples/SimpleAudioExample/Assets/ambience.ogg rename to samples/SimpleAudioExample/Assets/ambience.ogg diff --git a/examples/SimpleAudioExample/Assets/sound.ogg b/samples/SimpleAudioExample/Assets/sound.ogg similarity index 100% rename from examples/SimpleAudioExample/Assets/sound.ogg rename to samples/SimpleAudioExample/Assets/sound.ogg diff --git a/examples/SimpleAudioExample/Assets/sound.wav b/samples/SimpleAudioExample/Assets/sound.wav similarity index 100% rename from examples/SimpleAudioExample/Assets/sound.wav rename to samples/SimpleAudioExample/Assets/sound.wav diff --git a/examples/SimpleAudioExample/Assets/sound_licenses.txt b/samples/SimpleAudioExample/Assets/sound_licenses.txt similarity index 100% rename from examples/SimpleAudioExample/Assets/sound_licenses.txt rename to samples/SimpleAudioExample/Assets/sound_licenses.txt diff --git a/examples/SimpleAudioExample/project.lime.xml b/samples/SimpleAudioExample/project.lime.xml similarity index 100% rename from examples/SimpleAudioExample/project.lime.xml rename to samples/SimpleAudioExample/project.lime.xml diff --git a/examples/SimpleAudioExample/src/Main.hx b/samples/SimpleAudioExample/src/Main.hx similarity index 100% rename from examples/SimpleAudioExample/src/Main.hx rename to samples/SimpleAudioExample/src/Main.hx diff --git a/samples/SimpleOpenGL/Assets/lime.png b/samples/SimpleOpenGL/Assets/lime.png new file mode 100644 index 000000000..5afb8060b Binary files /dev/null and b/samples/SimpleOpenGL/Assets/lime.png differ diff --git a/samples/SimpleOpenGL/SimpleOpenGLView.hxproj b/samples/SimpleOpenGL/SimpleOpenGLView.hxproj new file mode 100644 index 000000000..789136620 --- /dev/null +++ b/samples/SimpleOpenGL/SimpleOpenGLView.hxproj @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/SimpleOpenGL/Source/Main.hx b/samples/SimpleOpenGL/Source/Main.hx new file mode 100644 index 000000000..8bdfccbaa --- /dev/null +++ b/samples/SimpleOpenGL/Source/Main.hx @@ -0,0 +1,215 @@ +package; + + +import format.png.Reader; +import format.png.Tools; +import haxe.io.BytesInput; +import lime.gl.GL; +import lime.gl.GLBuffer; +import lime.gl.GLProgram; +import lime.gl.GLTexture; +import lime.geometry.Matrix3D; +import lime.utils.Assets; +import lime.utils.Float32Array; +import lime.utils.UInt8Array; +import lime.Lime; + + +class Main { + + + private var imageData:UInt8Array; + private var imageHeight:Int; + private var imageWidth:Int; + private var imageUniform:Int; + private var lime:Lime; + private var modelViewMatrixUniform:Int; + private var projectionMatrixUniform:Int; + private var shaderProgram:GLProgram; + private var texCoordAttribute:Int; + private var texCoordBuffer:GLBuffer; + private var texture:GLTexture; + private var vertexAttribute:Int; + private var vertexBuffer:GLBuffer; + + + public function new () {} + + + private function createBuffers ():Void { + + var vertices = [ + + imageWidth, imageHeight, 0, + 0, imageHeight, 0, + imageWidth, 0, 0, + 0, 0, 0 + + ]; + + vertexBuffer = GL.createBuffer (); + GL.bindBuffer (GL.ARRAY_BUFFER, vertexBuffer); + GL.bufferData (GL.ARRAY_BUFFER, new Float32Array (cast vertices), GL.STATIC_DRAW); + GL.bindBuffer (GL.ARRAY_BUFFER, null); + + var texCoords = [ + + 1, 1, + 0, 1, + 1, 0, + 0, 0, + + ]; + + texCoordBuffer = GL.createBuffer (); + GL.bindBuffer (GL.ARRAY_BUFFER, texCoordBuffer); + GL.bufferData (GL.ARRAY_BUFFER, new Float32Array (cast texCoords), GL.STATIC_DRAW); + GL.bindBuffer (GL.ARRAY_BUFFER, null); + + } + + + private function createTexture ():Void { + + texture = GL.createTexture (); + GL.bindTexture (GL.TEXTURE_2D, texture); + GL.texImage2D (GL.TEXTURE_2D, 0, GL.RGBA, imageHeight, imageHeight, 0, GL.RGBA, GL.UNSIGNED_BYTE, imageData); + GL.texParameteri (GL.TEXTURE_2D, GL.TEXTURE_MAG_FILTER, GL.LINEAR); + GL.texParameteri (GL.TEXTURE_2D, GL.TEXTURE_MIN_FILTER, GL.LINEAR); + GL.bindTexture (GL.TEXTURE_2D, null); + + } + + + private function initializeShaders ():Void { + + var vertexShaderSource = + + "attribute vec3 aVertexPosition; + attribute vec2 aTexCoord; + varying vec2 vTexCoord; + + uniform mat4 uModelViewMatrix; + uniform mat4 uProjectionMatrix; + + void main(void) { + vTexCoord = aTexCoord; + gl_Position = uProjectionMatrix * uModelViewMatrix * vec4 (aVertexPosition, 1.0); + }"; + + var vertexShader = GL.createShader (GL.VERTEX_SHADER); + GL.shaderSource (vertexShader, vertexShaderSource); + GL.compileShader (vertexShader); + + if (GL.getShaderParameter (vertexShader, GL.COMPILE_STATUS) == 0) { + + throw "Error compiling vertex shader"; + + } + + var fragmentShaderSource = + + "varying vec2 vTexCoord; + uniform sampler2D uImage0; + + void main(void) + { + gl_FragColor = texture2D (uImage0, vTexCoord).bgra; + }"; + + var fragmentShader = GL.createShader (GL.FRAGMENT_SHADER); + GL.shaderSource (fragmentShader, fragmentShaderSource); + GL.compileShader (fragmentShader); + + if (GL.getShaderParameter (fragmentShader, GL.COMPILE_STATUS) == 0) { + + throw "Error compiling fragment shader"; + + } + + shaderProgram = GL.createProgram (); + GL.attachShader (shaderProgram, vertexShader); + GL.attachShader (shaderProgram, fragmentShader); + GL.linkProgram (shaderProgram); + + if (GL.getProgramParameter (shaderProgram, GL.LINK_STATUS) == 0) { + + throw "Unable to initialize the shader program."; + + } + + vertexAttribute = GL.getAttribLocation (shaderProgram, "aVertexPosition"); + texCoordAttribute = GL.getAttribLocation (shaderProgram, "aTexCoord"); + projectionMatrixUniform = GL.getUniformLocation (shaderProgram, "uProjectionMatrix"); + modelViewMatrixUniform = GL.getUniformLocation (shaderProgram, "uModelViewMatrix"); + imageUniform = GL.getUniformLocation (shaderProgram, "uImage0"); + + } + + + public function ready (lime:Lime):Void { + + this.lime = lime; + + var bytes = Assets.getBytes ("assets/lime.png"); + var byteInput = new BytesInput (bytes, 0, bytes.length); + var png = new Reader (byteInput).read (); + var data = Tools.extract32 (png); + var header = Tools.getHeader (png); + + imageWidth = header.width; + imageHeight = header.height; + imageData = new UInt8Array (data.getData ()); + + initializeShaders (); + + createBuffers (); + createTexture (); + + } + + + private function render ():Void { + + GL.viewport (0, 0, lime.config.width, lime.config.height); + + GL.clearColor (1.0, 1.0, 1.0, 1.0); + GL.clear (GL.COLOR_BUFFER_BIT); + + var positionX = (lime.config.width - imageWidth) / 2; + var positionY = (lime.config.height - imageHeight) / 2; + + var projectionMatrix = Matrix3D.createOrtho (0, lime.config.width, lime.config.height, 0, 1000, -1000); + var modelViewMatrix = Matrix3D.create2D (positionX, positionY, 1, 0); + + GL.useProgram (shaderProgram); + GL.enableVertexAttribArray (vertexAttribute); + GL.enableVertexAttribArray (texCoordAttribute); + + GL.activeTexture (GL.TEXTURE0); + GL.bindTexture (GL.TEXTURE_2D, texture); + GL.enable (GL.TEXTURE_2D); + + GL.bindBuffer (GL.ARRAY_BUFFER, vertexBuffer); + GL.vertexAttribPointer (vertexAttribute, 3, GL.FLOAT, false, 0, 0); + GL.bindBuffer (GL.ARRAY_BUFFER, texCoordBuffer); + GL.vertexAttribPointer (texCoordAttribute, 2, GL.FLOAT, false, 0, 0); + + GL.uniformMatrix3D (projectionMatrixUniform, false, projectionMatrix); + GL.uniformMatrix3D (modelViewMatrixUniform, false, modelViewMatrix); + GL.uniform1i (imageUniform, 0); + + GL.drawArrays (GL.TRIANGLE_STRIP, 0, 4); + + GL.bindBuffer (GL.ARRAY_BUFFER, null); + GL.disable (GL.TEXTURE_2D); + GL.bindTexture (GL.TEXTURE_2D, null); + + GL.disableVertexAttribArray (vertexAttribute); + GL.disableVertexAttribArray (texCoordAttribute); + GL.useProgram (null); + + } + + +} \ No newline at end of file diff --git a/samples/SimpleOpenGL/project.lime b/samples/SimpleOpenGL/project.lime new file mode 100644 index 000000000..263de6c0b --- /dev/null +++ b/samples/SimpleOpenGL/project.lime @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file