Sync of all the shaders from upstream + LoadFontData did not match anymore with C and crashed on MacOS
This commit is contained in:
parent
21d83c60a9
commit
7cd46c491f
82 changed files with 767 additions and 753 deletions
|
|
@ -41,7 +41,7 @@ public class FontSdf
|
||||||
|
|
||||||
// Loading font data from memory data
|
// Loading font data from memory data
|
||||||
// Parameters > font size: 16, no chars array provided (0), chars count: 95 (autogenerate chars array)
|
// Parameters > font size: 16, no chars array provided (0), chars count: 95 (autogenerate chars array)
|
||||||
fontDefault.Glyphs = LoadFontData(fileData, (int)fileSize, 16, null, 95, FontType.Default);
|
fontDefault.Glyphs = LoadFontData(fileData, (int)fileSize, 16, null, 95, FontType.Default, &fontDefault.GlyphCount);
|
||||||
// Parameters > chars count: 95, font size: 16, chars padding in image: 4 px, pack method: 0 (default)
|
// Parameters > chars count: 95, font size: 16, chars padding in image: 4 px, pack method: 0 (default)
|
||||||
Image atlas = GenImageFontAtlas(fontDefault.Glyphs, &fontDefault.Recs, 95, 16, 4, 0);
|
Image atlas = GenImageFontAtlas(fontDefault.Glyphs, &fontDefault.Recs, 95, 16, 4, 0);
|
||||||
fontDefault.Texture = LoadTextureFromImage(atlas);
|
fontDefault.Texture = LoadTextureFromImage(atlas);
|
||||||
|
|
@ -52,7 +52,7 @@ public class FontSdf
|
||||||
fontSDF.BaseSize = 16;
|
fontSDF.BaseSize = 16;
|
||||||
fontSDF.GlyphCount = 95;
|
fontSDF.GlyphCount = 95;
|
||||||
// Parameters > font size: 16, no chars array provided (0), chars count: 0 (defaults to 95)
|
// Parameters > font size: 16, no chars array provided (0), chars count: 0 (defaults to 95)
|
||||||
fontSDF.Glyphs = LoadFontData(fileData, (int)fileSize, 16, null, 0, FontType.Sdf);
|
fontSDF.Glyphs = LoadFontData(fileData, (int)fileSize, 16, null, 0, FontType.Sdf, &fontDefault.GlyphCount);
|
||||||
// Parameters > chars count: 95, font size: 16, chars padding in image: 0 px, pack method: 1 (Skyline algorythm)
|
// Parameters > chars count: 95, font size: 16, chars padding in image: 0 px, pack method: 1 (Skyline algorythm)
|
||||||
atlas = GenImageFontAtlas(fontSDF.Glyphs, &fontSDF.Recs, 95, 16, 0, 1);
|
atlas = GenImageFontAtlas(fontSDF.Glyphs, &fontSDF.Recs, 95, 16, 0, 1);
|
||||||
fontSDF.Texture = LoadTextureFromImage(atlas);
|
fontSDF.Texture = LoadTextureFromImage(atlas);
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ uniform mat4 mvp;
|
||||||
varying vec2 fragTexCoord;
|
varying vec2 fragTexCoord;
|
||||||
varying vec4 fragColor;
|
varying vec4 fragColor;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -10,11 +10,11 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
const vec2 size = vec2(800, 450); // render size
|
const vec2 size = vec2(800, 450); // Framebuffer size
|
||||||
const float samples = 5.0; // pixels per axis; higher = bigger glow, worse performance
|
const float samples = 5.0; // Pixels per axis; higher = bigger glow, worse performance
|
||||||
const float quality = 2.5; // lower = smaller glow, better quality
|
const float quality = 2.5; // Defines size factor: Lower = smaller glow, better quality
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
// NOTE: Render size values must be passed from code
|
// NOTE: Render size values must be passed from code
|
||||||
const float renderWidth = 800.0;
|
const float renderWidth = 800.0;
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
float hatchOffsetY = 5.0;
|
float hatchOffsetY = 5.0;
|
||||||
float lumThreshold01 = 0.9;
|
float lumThreshold01 = 0.9;
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
// NOTE: Render size values must be passed from code
|
// NOTE: Render size values must be passed from code
|
||||||
const float renderWidth = 800.0;
|
const float renderWidth = 800.0;
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ float angle = 0.0;
|
||||||
vec2 VectorRotateTime(vec2 v, float speed)
|
vec2 VectorRotateTime(vec2 v, float speed)
|
||||||
{
|
{
|
||||||
float time = uTime*speed;
|
float time = uTime*speed;
|
||||||
float localTime = fract(time); // The time domain this works on is 1 sec.
|
float localTime = fract(time); // The time domain this works on is 1 sec
|
||||||
|
|
||||||
if ((localTime >= 0.0) && (localTime < 0.25)) angle = 0.0;
|
if ((localTime >= 0.0) && (localTime < 0.25)) angle = 0.0;
|
||||||
else if ((localTime >= 0.25) && (localTime < 0.50)) angle = PI/4.0*sin(2.0*PI*localTime - PI/2.0);
|
else if ((localTime >= 0.25) && (localTime < 0.50)) angle = PI/4.0*sin(2.0*PI*localTime - PI/2.0);
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -7,12 +7,12 @@ precision mediump float;
|
||||||
The Sieve of Eratosthenes -- a simple shader by ProfJski
|
The Sieve of Eratosthenes -- a simple shader by ProfJski
|
||||||
An early prime number sieve: https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
|
An early prime number sieve: https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
|
||||||
|
|
||||||
The screen is divided into a square grid of boxes, each representing an integer value.
|
The screen is divided into a square grid of boxes, each representing an integer value
|
||||||
Each integer is tested to see if it is a prime number. Primes are colored white.
|
Each integer is tested to see if it is a prime number. Primes are colored white
|
||||||
Non-primes are colored with a color that indicates the smallest factor which evenly divdes our integer.
|
Non-primes are colored with a color that indicates the smallest factor which evenly divdes our integer
|
||||||
|
|
||||||
You can change the scale variable to make a larger or smaller grid.
|
You can change the scale variable to make a larger or smaller grid
|
||||||
Total number of integers displayed = scale squared, so scale = 100 tests the first 10,000 integers.
|
Total number of integers displayed = scale squared, so scale = 100 tests the first 10,000 integers
|
||||||
|
|
||||||
WARNING: If you make scale too large, your GPU may bog down!
|
WARNING: If you make scale too large, your GPU may bog down!
|
||||||
|
|
||||||
|
|
@ -38,7 +38,7 @@ vec4 Colorizer(float counter, float maxSize)
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
vec4 color = vec4(1.0);
|
vec4 color = vec4(1.0);
|
||||||
float scale = 1000.0; // Makes 100x100 square grid. Change this variable to make a smaller or larger grid.
|
float scale = 1000.0; // Makes 100x100 square grid. Change this variable to make a smaller or larger grid
|
||||||
float value = scale*floor(fragTexCoord.y*scale) + floor(fragTexCoord.x*scale); // Group pixels into boxes representing integer values
|
float value = scale*floor(fragTexCoord.y*scale) + floor(fragTexCoord.x*scale); // Group pixels into boxes representing integer values
|
||||||
int valuei = int(value);
|
int valuei = int(value);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
const float PI = 3.1415926535;
|
const float PI = 3.1415926535;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ varying vec3 fragNormal;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
#define MAX_LIGHTS 4
|
#define MAX_LIGHTS 4
|
||||||
#define LIGHT_DIRECTIONAL 0
|
#define LIGHT_DIRECTIONAL 0
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
#version 100
|
#version 100
|
||||||
|
|
||||||
#extension GL_EXT_frag_depth : enable // Extension required for writing depth
|
#extension GL_EXT_frag_depth : enable // Extension required for writing depth
|
||||||
|
|
||||||
precision mediump float; // Precision required for OpenGL ES2 (WebGL)
|
precision mediump float; // Precision required for OpenGL ES2 (WebGL)
|
||||||
|
|
||||||
varying vec2 fragTexCoord;
|
varying vec2 fragTexCoord;
|
||||||
|
|
@ -11,6 +13,7 @@ uniform vec4 colDiffuse;
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
vec4 texelColor = texture2D(texture0, fragTexCoord);
|
vec4 texelColor = texture2D(texture0, fragTexCoord);
|
||||||
|
|
||||||
gl_FragColor = texelColor*colDiffuse*fragColor;
|
gl_FragColor = texelColor*colDiffuse*fragColor;
|
||||||
gl_FragDepthEXT = gl_FragCoord.z;
|
gl_FragDepthEXT = gl_FragCoord.z;
|
||||||
}
|
}
|
||||||
|
|
@ -1,8 +1,11 @@
|
||||||
#version 100
|
#version 100
|
||||||
|
|
||||||
#extension GL_EXT_frag_depth : enable //Extension required for writing depth
|
#extension GL_EXT_frag_depth : enable //Extension required for writing depth
|
||||||
#extension GL_OES_standard_derivatives : enable //Extension used for fwidth()
|
#extension GL_OES_standard_derivatives : enable //Extension used for fwidth()
|
||||||
precision mediump float; // Precision required for OpenGL ES2 (WebGL)
|
|
||||||
|
|
||||||
|
#define ZERO 0
|
||||||
|
|
||||||
|
precision mediump float; // Precision required for OpenGL ES2 (WebGL)
|
||||||
|
|
||||||
// Input vertex attributes (from vertex shader)
|
// Input vertex attributes (from vertex shader)
|
||||||
varying vec2 fragTexCoord;
|
varying vec2 fragTexCoord;
|
||||||
|
|
@ -17,15 +20,14 @@ uniform vec3 camPos;
|
||||||
uniform vec3 camDir;
|
uniform vec3 camDir;
|
||||||
uniform vec2 screenCenter;
|
uniform vec2 screenCenter;
|
||||||
|
|
||||||
#define ZERO 0
|
// SRC: https://learnopengl.com/Advanced-OpenGL/Depth-testing
|
||||||
|
float CalcDepth(in vec3 rd, in float Idist)
|
||||||
// https://learnopengl.com/Advanced-OpenGL/Depth-testing
|
{
|
||||||
float CalcDepth(in vec3 rd, in float Idist){
|
|
||||||
float local_z = dot(normalize(camDir),rd)*Idist;
|
float local_z = dot(normalize(camDir),rd)*Idist;
|
||||||
return (1.0/(local_z) - 1.0/0.01)/(1.0/1000.0 -1.0/0.01);
|
return (1.0/(local_z) - 1.0/0.01)/(1.0/1000.0 -1.0/0.01);
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://iquilezles.org/articles/distfunctions/
|
// SRC: https://iquilezles.org/articles/distfunctions/
|
||||||
float sdHorseshoe(in vec3 p, in vec2 c, in float r, in float le, vec2 w)
|
float sdHorseshoe(in vec3 p, in vec2 c, in float r, in float le, vec2 w)
|
||||||
{
|
{
|
||||||
p.x = abs(p.x);
|
p.x = abs(p.x);
|
||||||
|
|
@ -57,11 +59,10 @@ float sdSixWayCutHollowSphere( vec3 p, float r, float h, float t )
|
||||||
|
|
||||||
float w = sqrt(r*r-h*h);
|
float w = sqrt(r*r-h*h);
|
||||||
|
|
||||||
return ((h*q.x<w*q.y) ? length(q-vec2(w,h)) :
|
return ((h*q.x<w*q.y) ? length(q-vec2(w,h)) : abs(length(q)-r)) - t;
|
||||||
abs(length(q)-r) ) - t;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://iquilezles.org/articles/boxfunctions
|
// SRC: https://iquilezles.org/articles/boxfunctions
|
||||||
vec2 iBox(in vec3 ro, in vec3 rd, in vec3 rad)
|
vec2 iBox(in vec3 ro, in vec3 rd, in vec3 rad)
|
||||||
{
|
{
|
||||||
vec3 m = 1.0/rd;
|
vec3 m = 1.0/rd;
|
||||||
|
|
@ -69,6 +70,7 @@ vec2 iBox( in vec3 ro, in vec3 rd, in vec3 rad )
|
||||||
vec3 k = abs(m)*rad;
|
vec3 k = abs(m)*rad;
|
||||||
vec3 t1 = -n - k;
|
vec3 t1 = -n - k;
|
||||||
vec3 t2 = -n + k;
|
vec3 t2 = -n + k;
|
||||||
|
|
||||||
return vec2(max(max(t1.x, t1.y), t1.z),
|
return vec2(max(max(t1.x, t1.y), t1.z),
|
||||||
min(min(t2.x, t2.y), t2.z));
|
min(min(t2.x, t2.y), t2.z));
|
||||||
}
|
}
|
||||||
|
|
@ -78,20 +80,23 @@ vec2 opU( vec2 d1, vec2 d2 )
|
||||||
return (d1.x<d2.x) ? d1 : d2;
|
return (d1.x<d2.x) ? d1 : d2;
|
||||||
}
|
}
|
||||||
|
|
||||||
vec2 map( in vec3 pos ){
|
vec2 map(in vec3 pos)
|
||||||
|
{
|
||||||
vec2 res = vec2(sdHorseshoe(pos-vec3(-1.0,0.08, 1.0), vec2(cos(1.3),sin(1.3)), 0.2, 0.3, vec2(0.03,0.5)), 11.5) ;
|
vec2 res = vec2(sdHorseshoe(pos-vec3(-1.0,0.08, 1.0), vec2(cos(1.3),sin(1.3)), 0.2, 0.3, vec2(0.03,0.5)), 11.5) ;
|
||||||
res = opU(res, vec2(sdSixWayCutHollowSphere(pos-vec3(0.0, 1.0, 0.0), 4.0, 3.5, 0.5), 4.5)) ;
|
res = opU(res, vec2(sdSixWayCutHollowSphere(pos-vec3(0.0, 1.0, 0.0), 4.0, 3.5, 0.5), 4.5)) ;
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://www.shadertoy.com/view/Xds3zN
|
// SRC: https://www.shadertoy.com/view/Xds3zN
|
||||||
vec2 raycast( in vec3 ro, in vec3 rd ){
|
vec2 raycast(in vec3 ro, in vec3 rd)
|
||||||
|
{
|
||||||
vec2 res = vec2(-1.0,-1.0);
|
vec2 res = vec2(-1.0,-1.0);
|
||||||
|
|
||||||
float tmin = 1.0;
|
float tmin = 1.0;
|
||||||
float tmax = 20.0;
|
float tmax = 20.0;
|
||||||
|
|
||||||
// raytrace floor plane
|
// Raytrace floor plane
|
||||||
float tp1 = (-ro.y)/rd.y;
|
float tp1 = (-ro.y)/rd.y;
|
||||||
if (tp1>0.0)
|
if (tp1>0.0)
|
||||||
{
|
{
|
||||||
|
|
@ -253,7 +258,8 @@ vec4 render( in vec3 ro, in vec3 rd)
|
||||||
return vec4(vec3(clamp(col,0.0,1.0)),t);
|
return vec4(vec3(clamp(col,0.0,1.0)),t);
|
||||||
}
|
}
|
||||||
|
|
||||||
vec3 CalcRayDir(vec2 nCoord){
|
vec3 CalcRayDir(vec2 nCoord)
|
||||||
|
{
|
||||||
vec3 horizontal = normalize(cross(camDir,vec3(.0 , 1.0, .0)));
|
vec3 horizontal = normalize(cross(camDir,vec3(.0 , 1.0, .0)));
|
||||||
vec3 vertical = normalize(cross(horizontal,camDir));
|
vec3 vertical = normalize(cross(horizontal,camDir));
|
||||||
return normalize(camDir + horizontal*nCoord.x + vertical*nCoord.y);
|
return normalize(camDir + horizontal*nCoord.x + vertical*nCoord.y);
|
||||||
|
|
@ -283,6 +289,7 @@ void main()
|
||||||
color = res.xyz;
|
color = res.xyz;
|
||||||
depth = CalcDepth(rd,res.w);
|
depth = CalcDepth(rd,res.w);
|
||||||
}
|
}
|
||||||
|
|
||||||
gl_FragColor = vec4(color , 1.0);
|
gl_FragColor = vec4(color , 1.0);
|
||||||
gl_FragDepthEXT = depth;
|
gl_FragDepthEXT = depth;
|
||||||
}
|
}
|
||||||
|
|
@ -6,22 +6,19 @@ precision mediump float;
|
||||||
varying vec2 fragTexCoord;
|
varying vec2 fragTexCoord;
|
||||||
varying vec4 fragColor;
|
varying vec4 fragColor;
|
||||||
|
|
||||||
uniform vec2 screenDims; // Dimensions of the screen
|
|
||||||
uniform vec2 c; // c.x = real, c.y = imaginary component. Equation done is z^2 + c
|
uniform vec2 c; // c.x = real, c.y = imaginary component. Equation done is z^2 + c
|
||||||
uniform vec2 offset; // Offset of the scale.
|
uniform vec2 offset; // Offset of the scale
|
||||||
uniform float zoom; // Zoom of the scale.
|
uniform float zoom; // Zoom of the scale
|
||||||
|
|
||||||
// NOTE: Maximum number of shader for-loop iterations depend on GPU,
|
// NOTE: Maximum number of shader for-loop iterations depend on GPU,
|
||||||
// for example, on RasperryPi for this examply only supports up to 60
|
// for example, on RasperryPi for this examply only supports up to 60
|
||||||
const int MAX_ITERATIONS = 48; // Max iterations to do
|
const int maxIterations = 255; // Max iterations to do.
|
||||||
|
const float colorCycles = 1.0; // Number of times the color palette repeats.
|
||||||
|
|
||||||
// Square a complex number
|
// Square a complex number
|
||||||
vec2 ComplexSquare(vec2 z)
|
vec2 ComplexSquare(vec2 z)
|
||||||
{
|
{
|
||||||
return vec2(
|
return vec2(z.x*z.x - z.y*z.y, z.x*z.y*2.0);
|
||||||
z.x * z.x - z.y * z.y,
|
|
||||||
z.x * z.y * 2.0
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert Hue Saturation Value (HSV) color into RGB
|
// Convert Hue Saturation Value (HSV) color into RGB
|
||||||
|
|
@ -35,30 +32,32 @@ vec3 Hsv2rgb(vec3 c)
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
/**********************************************************************************************
|
/**********************************************************************************************
|
||||||
Julia sets use a function z^2 + c, where c is a constant.
|
Julia sets use a function z^2 + c, where c is a constant
|
||||||
This function is iterated until the nature of the point is determined.
|
This function is iterated until the nature of the point is determined
|
||||||
|
|
||||||
If the magnitude of the number becomes greater than 2, then from that point onward
|
If the magnitude of the number becomes greater than 2, then from that point onward
|
||||||
the number will get bigger and bigger, and will never get smaller (tends towards infinity).
|
the number will get bigger and bigger, and will never get smaller (tends towards infinity)
|
||||||
2^2 = 4, 4^2 = 8 and so on.
|
2^2 = 4, 4^2 = 8 and so on
|
||||||
So at 2 we stop iterating.
|
So at 2 we stop iterating
|
||||||
|
|
||||||
If the number is below 2, we keep iterating.
|
If the number is below 2, we keep iterating
|
||||||
But when do we stop iterating if the number is always below 2 (it converges)?
|
But when do we stop iterating if the number is always below 2 (it converges)?
|
||||||
That is what MAX_ITERATIONS is for.
|
That is what maxIterations is for
|
||||||
Then we can divide the iterations by the MAX_ITERATIONS value to get a normalized value that we can
|
Then we can divide the iterations by the maxIterations value to get a normalized value
|
||||||
then map to a color.
|
that we can then map to a color
|
||||||
|
|
||||||
We use dot product (z.x * z.x + z.y * z.y) to determine the magnitude (length) squared.
|
We use dot product (z.x*z.x + z.y*z.y) to determine the magnitude (length) squared
|
||||||
And once the magnitude squared is > 4, then magnitude > 2 is also true (saves computational power).
|
And once the magnitude squared is > 4, then magnitude > 2 is also true (saves computational power)
|
||||||
*************************************************************************************************/
|
*************************************************************************************************/
|
||||||
|
|
||||||
// The pixel coordinates are scaled so they are on the mandelbrot scale
|
// The pixel coordinates are scaled so they are on the mandelbrot scale
|
||||||
// NOTE: fragTexCoord already comes as normalized screen coordinates but offset must be normalized before scaling and zoom
|
// NOTE: fragTexCoord already comes as normalized screen coordinates but offset must be normalized before scaling and zoom
|
||||||
vec2 z = vec2((fragTexCoord.x + offset.x/screenDims.x)*2.5/zoom, (fragTexCoord.y + offset.y/screenDims.y)*1.5/zoom);
|
vec2 z = vec2((fragTexCoord.x - 0.5)*2.5, (fragTexCoord.y - 0.5)*1.5)/zoom;
|
||||||
|
z.x += offset.x;
|
||||||
|
z.y += offset.y;
|
||||||
|
|
||||||
int iter = 0;
|
int iter = 0;
|
||||||
for (int iterations = 0; iterations < 60; iterations++)
|
for (int iterations = 0; iterations < maxIterations; iterations++)
|
||||||
{
|
{
|
||||||
z = ComplexSquare(z) + c; // Iterate function
|
z = ComplexSquare(z) + c; // Iterate function
|
||||||
if (dot(z, z) > 4.0) break;
|
if (dot(z, z) > 4.0) break;
|
||||||
|
|
@ -66,18 +65,18 @@ void main()
|
||||||
iter = iterations;
|
iter = iterations;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Another few iterations decreases errors in the smoothing calculation.
|
// Another few iterations decreases errors in the smoothing calculation
|
||||||
// See http://linas.org/art-gallery/escape/escape.html for more information.
|
// See http://linas.org/art-gallery/escape/escape.html for more information
|
||||||
z = ComplexSquare(z) + c;
|
z = ComplexSquare(z) + c;
|
||||||
z = ComplexSquare(z) + c;
|
z = ComplexSquare(z) + c;
|
||||||
|
|
||||||
// This last part smooths the color (again see link above).
|
// This last part smooths the color (again see link above)
|
||||||
float smoothVal = float(iter) + 1.0 - (log(log(length(z)))/log(2.0));
|
float smoothVal = float(iter) + 1.0 - (log(log(length(z)))/log(2.0));
|
||||||
|
|
||||||
// Normalize the value so it is between 0 and 1.
|
// Normalize the value so it is between 0 and 1
|
||||||
float norm = smoothVal/float(MAX_ITERATIONS);
|
float norm = smoothVal/float(maxIterations);
|
||||||
|
|
||||||
// If in set, color black. 0.999 allows for some float accuracy error.
|
// If in set, color black. 0.999 allows for some float accuracy error
|
||||||
if (norm > 0.999) gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);
|
if (norm > 0.999) gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);
|
||||||
else gl_FragColor = vec4(Hsv2rgb(vec3(norm, 1.0, 1.0)), 1.0);
|
else gl_FragColor = vec4(Hsv2rgb(vec3(norm*colorCycles, 1.0, 1.0)), 1.0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,18 +12,12 @@ varying vec3 fragNormal;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
#define MAX_LIGHTS 4
|
#define MAX_LIGHTS 4
|
||||||
#define LIGHT_DIRECTIONAL 0
|
#define LIGHT_DIRECTIONAL 0
|
||||||
#define LIGHT_POINT 1
|
#define LIGHT_POINT 1
|
||||||
|
|
||||||
struct MaterialProperty {
|
|
||||||
vec3 color;
|
|
||||||
int useSampler;
|
|
||||||
sampler2D sampler;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct Light {
|
struct Light {
|
||||||
int enabled;
|
int enabled;
|
||||||
int type;
|
int type;
|
||||||
|
|
@ -46,6 +40,8 @@ void main()
|
||||||
vec3 viewD = normalize(viewPos - fragPosition);
|
vec3 viewD = normalize(viewPos - fragPosition);
|
||||||
vec3 specular = vec3(0.0);
|
vec3 specular = vec3(0.0);
|
||||||
|
|
||||||
|
vec4 tint = colDiffuse*fragColor;
|
||||||
|
|
||||||
// NOTE: Implement here your fragment shader code
|
// NOTE: Implement here your fragment shader code
|
||||||
|
|
||||||
for (int i = 0; i < MAX_LIGHTS; i++)
|
for (int i = 0; i < MAX_LIGHTS; i++)
|
||||||
|
|
@ -73,7 +69,7 @@ void main()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
vec4 finalColor = (texelColor*((colDiffuse + vec4(specular, 1.0))*vec4(lightDot, 1.0)));
|
vec4 finalColor = (texelColor*((tint + vec4(specular, 1.0))*vec4(lightDot, 1.0)));
|
||||||
finalColor += texelColor*(ambient/10.0);
|
finalColor += texelColor*(ambient/10.0);
|
||||||
|
|
||||||
// Gamma correction
|
// Gamma correction
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ varying vec2 fragTexCoord;
|
||||||
varying vec4 fragColor;
|
varying vec4 fragColor;
|
||||||
varying vec3 fragNormal;
|
varying vec3 fragNormal;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
// https://github.com/glslify/glsl-inverse
|
// https://github.com/glslify/glsl-inverse
|
||||||
mat3 inverse(mat3 m)
|
mat3 inverse(mat3 m)
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ varying vec2 fragTexCoord;
|
||||||
varying vec4 fragColor;
|
varying vec4 fragColor;
|
||||||
varying vec3 fragNormal;
|
varying vec3 fragNormal;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ uniform sampler2D mask;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
uniform int frame;
|
uniform int frame;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue