From 147dc8ea810d9be0f965b1b80a208956f944d7fc Mon Sep 17 00:00:00 2001 From: Bernie Innocenti Date: Fri, 7 Jul 2017 21:21:29 -0400 Subject: [PATCH] Move shaders and textures into subdirectories. --- shaders/mandelwow.frag | 25 +++++++++++++++++++++++++ shaders/mandelwow.vert | 15 +++++++++++++++ shaders/shaded.frag | 9 +++++++++ shaders/shaded.vert | 24 ++++++++++++++++++++++++ shaders/solid.frag | 8 ++++++++ shaders/solid.vert | 12 ++++++++++++ textures/c64-font-color.png | Bin 0 -> 2574 bytes textures/c64-font.gray | Bin 0 -> 16384 bytes textures/c64-font.png | Bin 0 -> 886 bytes 9 files changed, 93 insertions(+) create mode 100644 shaders/mandelwow.frag create mode 100644 shaders/mandelwow.vert create mode 100644 shaders/shaded.frag create mode 100644 shaders/shaded.vert create mode 100644 shaders/solid.frag create mode 100644 shaders/solid.vert create mode 100644 textures/c64-font-color.png create mode 100644 textures/c64-font.gray create mode 100644 textures/c64-font.png diff --git a/shaders/mandelwow.frag b/shaders/mandelwow.frag new file mode 100644 index 0000000..0551a34 --- /dev/null +++ b/shaders/mandelwow.frag @@ -0,0 +1,25 @@ +#version 100 +precision highp float; +varying vec2 c; +varying vec2 z; + +void main() { + float zx = z.x; + float zy = z.y; + const int maxiter = 64; + for (int iter = maxiter; iter > 0; iter--) { + float zx2 = zx * zx; + float zy2 = zy * zy; + if (zx2 * zy2 > 4.0) { + float index = float(iter) / float(maxiter); + gl_FragColor = vec4(index, 0.1, 1.0 - index / 2.0, 0.8 - index * index); + return; + } + zy = zx * zy * 2.0 + c.y; + zx = zx2 - zy2 + c.x; + } + gl_FragColor = vec4((sin(z.y) + 1.0) / 4.0, + (sin(z.x) + 1.0) / 4.0, + (sin(c.x) + 1.0) / 4.0, + 1.0); +} diff --git a/shaders/mandelwow.vert b/shaders/mandelwow.vert new file mode 100644 index 0000000..0e67eda --- /dev/null +++ b/shaders/mandelwow.vert @@ -0,0 +1,15 @@ +#version 100 +uniform mat4 perspective; +uniform mat4 view; +uniform mat4 model; +uniform vec2 z0; +attribute mediump vec3 position; +varying mediump vec2 c; +varying mediump vec2 z; + +void main() { + mat4 modelview = view * model; + gl_Position = perspective * modelview * vec4(position, 1.0); + c = vec2(position.x, position.y); + z = vec2(z0.x, z0.y); +} diff --git a/shaders/shaded.frag b/shaders/shaded.frag new file mode 100644 index 0000000..492644f --- /dev/null +++ b/shaders/shaded.frag @@ -0,0 +1,9 @@ +#version 300 es +precision lowp float; + +flat in vec4 color; +out vec4 color_out; + +void main() { + color_out = color; +} diff --git a/shaders/shaded.vert b/shaders/shaded.vert new file mode 100644 index 0000000..c7c7fa1 --- /dev/null +++ b/shaders/shaded.vert @@ -0,0 +1,24 @@ +#version 300 es +precision lowp float; + +in vec3 position; +in vec3 normal; +flat out vec4 color; // Shaded color + +uniform mat4 model; +uniform mat4 perspview; +uniform vec3 col; + +void main() { + mat4 m = perspview * model; + vec3 dark = col * 0.1; + vec3 u_light = vec3( 0.5, -0.7, -0.6); + vec3 v_normal = transpose(inverse(mat3(model))) * normal; + + float distance = model[3][2]; + float attenuation = 1. / (1. + distance * distance * 0.05); + float brightness = max(dot(normalize(v_normal), normalize(u_light)) * attenuation, 0.0); + color = vec4(mix(dark, col, brightness), 1.0); + + gl_Position = m * vec4(position, 1.0); +} diff --git a/shaders/solid.frag b/shaders/solid.frag new file mode 100644 index 0000000..2fed3bf --- /dev/null +++ b/shaders/solid.frag @@ -0,0 +1,8 @@ +#version 300 es +precision lowp float; + +out vec4 color; + +void main() { + color = vec4(1.0, 1.0, 1.0, 1.0); +} diff --git a/shaders/solid.vert b/shaders/solid.vert new file mode 100644 index 0000000..6dd30a4 --- /dev/null +++ b/shaders/solid.vert @@ -0,0 +1,12 @@ +#version 300 es +precision lowp float; + +in vec3 position; +uniform mat4 perspective; +uniform mat4 view; +uniform mat4 model; + +void main() { + mat4 modelview = view * model; + gl_Position = perspective * modelview * vec4(position, 1.0); +} diff --git a/textures/c64-font-color.png b/textures/c64-font-color.png new file mode 100644 index 0000000000000000000000000000000000000000..61d5e562182f778ff515ce57181e1163f87088d5 GIT binary patch literal 2574 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 literal 0 HcmV?d00001 diff --git a/textures/c64-font.gray b/textures/c64-font.gray new file mode 100644 index 0000000000000000000000000000000000000000..ab49a6b93c706bdb73ca5f955e45b94d299ff26b GIT binary patch literal 16384 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 literal 0 HcmV?d00001 diff --git a/textures/c64-font.png b/textures/c64-font.png new file mode 100644 index 0000000000000000000000000000000000000000..4342a5db80f814d0b261fb5a47bdeb7ccfa5d63c GIT binary patch literal 886 zcmV-+1Bv{JP)qT5<00009a7bBm000XT z000XT0n*)m`~Uz0C`m*?R7l6|m9c6gNf3tXXlOfVq+_EB#Of6W1V%wIo9%Nn7Ssh6 zLXlU&&~vY`Z!@r|9>UqC3KcBZ_gA;HE42@f%Wtr;=cDVd>gj*}A))3{isWfVk$qen z*hv&G+(!b_L1^cP*lVxD+HZMO6!aQ3u`2sR0nZ8$xd+(t3xM>4^uk^RKO6nobRc>+ z07U5RLxQ>TvC6+jtfqy6ZRqy=q{n;?5b!F$iM@1K!G1cuif%i4p}X%D(%9 zE-T6|biiXU4JOQCCH(mlh4L@QyZx8W!XiFN5VUV|L4O68-*a&n@& zjTnT(Hhy`D*Y<8vOqOsjV)PQw~=(5&yQG@@*wAz$!Zsz#jQ zB!xH1scPI@Tr}uJnWm$oqvLwAC;S@tdIwgHRxMDsq~+N_E+xmKTh8wQH0GtIfR$UV z3djXy19}C}p57jErr&7Jr_&8^cL3x13YIya4G?WjX!FB-1y^?AHV!j^W*;d zKR@2*$76wAFyl-P#$B+vrvmtusAtLrEY{P0Hc=iK_W*D6)3jbxfSN9x9^NJ_su~9H zftqIfsc4igrj13{r&fWRph5H$=^L?s#H)_mEHp;?j*rs9z(_6`NJ)Kag;ImwTazvIzALgUHVapSA`&5juW@9NL|$ZdZ7 z)yBn-7M$DsIJNol*5=35=EtA!^27aWez-P2T$>-R%@5bcMgC{-H>(5$IL|`cSpWb4 M07*qoM6N<$f(Xm17ytkO literal 0 HcmV?d00001 -- 2.25.1