cleanup, and minor performance improvements, but overal using doubles instead of floats in the fragment shader, rendering speed has gone down, but now you can zoom further

This commit is contained in:
Sander Hautvast 2020-10-23 23:06:34 +02:00
parent 62785bd02a
commit 69d47c6767
3 changed files with 280 additions and 274 deletions

View file

@ -1,3 +1,5 @@
* my first nim project https://nim-lang.org/ * my first nim project https://nim-lang.org/
* also: my first opengl project, manually translated from c++ found in https://physicspython.wordpress.com/2020/02/16/visualizing-the-mandelbrot-set-using-opengl-part-1/ * also: my first opengl project, manually translated from c++ found in https://physicspython.wordpress.com/2020/02/16/visualizing-the-mandelbrot-set-using-opengl-part-1/
* works at least on my mac * works at least on my mac
* start with `nimble run`
* use arrow keys to navigate en ESC to quit

View file

@ -1,25 +1,22 @@
import nimgl/[glfw, opengl] import nimgl/[glfw, opengl]
# keeps track of the GL program and the shaders, to interact with GL
var GLData: tuple[program, vertexShader, fragmentShader: uint32] var GLData: tuple[program, vertexShader, fragmentShader: uint32]
const const
WIN_WIDTH = 1000 WIN_WIDTH = 1000
WIN_HEIGHT = 800 WIN_HEIGHT = 800
# navigation parameters
var var
center_x = 0.0f center_x = 0.0f
center_y = 0.0f center_y = 0.0f
zoom:float64 = 1.0 zoom:float64 = 1.0
dx=0.0 dx = -0.001
dy = 0.0 dy = 0.0
zf=0.99 zf = 0.999
# handle keys
proc keyProc(window: GLFWWindow, key: int32, scancode: int32, action: int32, mods: int32): void {.cdecl.} = proc keyProc(window: GLFWWindow, key: int32, scancode: int32, action: int32, mods: int32): void {.cdecl.} =
# if key == GLFWKey.ESCAPE and action == GLFWPress:
# window.setWindowShouldClose(true)
# proc process_input(window: GLFWwindow)
if action == GLFWPress: if action == GLFWPress:
if key == GLFWKey.ESCAPE: if key == GLFWKey.ESCAPE:
window.setWindowShouldClose(true) window.setWindowShouldClose(true)
@ -32,7 +29,7 @@ proc keyProc(window: GLFWWindow, key: int32, scancode: int32, action: int32, mod
if key == GLFWKey.RIGHT: if key == GLFWKey.RIGHT:
dx += 0.001f; dx += 0.001f;
# prints an error message if necessary (if the shader won't)
proc logShaderCompilationFailure(shader: uint32, shader_path:string) = proc logShaderCompilationFailure(shader: uint32, shader_path:string) =
var logSize: int32 var logSize: int32
glGetShaderiv(shader, GL_INFO_LOG_LENGTH, logSize.addr) glGetShaderiv(shader, GL_INFO_LOG_LENGTH, logSize.addr)
@ -46,6 +43,7 @@ proc logShaderCompilationFailure(shader: uint32, shader_path:string) =
dealloc(logStr) dealloc(logStr)
quit(-1) quit(-1)
# prints an error message if necessary
proc logProgramLinkingError() = proc logProgramLinkingError() =
var logSize: int32 var logSize: int32
glGetProgramiv(GLData.program, GL_INFO_LOG_LENGTH, logSize.addr) glGetProgramiv(GLData.program, GL_INFO_LOG_LENGTH, logSize.addr)
@ -57,6 +55,7 @@ proc logProgramLinkingError() =
dealloc(logStr) dealloc(logStr)
quit(-1) quit(-1)
# compiles a shader given a source file and a type
proc addShader(shader_path: string, shader_type: GLenum):uint32 = proc addShader(shader_path: string, shader_type: GLenum):uint32 =
let let
shadercode = readFile(shader_path) shadercode = readFile(shader_path)
@ -72,6 +71,7 @@ proc addShader(shader_path: string, shader_type: GLenum):uint32 =
return shader return shader
# loads program and shaders
proc initShaders(vertex_shader_path: string, fragment_shader_path: string) = proc initShaders(vertex_shader_path: string, fragment_shader_path: string) =
GLData.program = glCreateProgram() GLData.program = glCreateProgram()
GLData.vertexShader = addShader(vertex_shader_path, GL_VERTEX_SHADER) GLData.vertexShader = addShader(vertex_shader_path, GL_VERTEX_SHADER)
@ -83,6 +83,7 @@ proc initShaders(vertex_shader_path: string, fragment_shader_path: string) =
if success == 0: logProgramLinkingError() if success == 0: logProgramLinkingError()
# pass data to the fragment shader
proc set_float(name: string, value:float) = proc set_float(name: string, value:float) =
glUniform1f(glGetUniformLocation(GLData.program, name.cstring()), value.cfloat()); glUniform1f(glGetUniformLocation(GLData.program, name.cstring()), value.cfloat());
@ -107,6 +108,7 @@ proc main() =
assert glInit() assert glInit()
# two triangles that together make up the entire window
var vertices = @[ var vertices = @[
-1.0f, -1.0f, -0.0f, -1.0f, -1.0f, -0.0f,
1.0f, 1.0f, -0.0f, 1.0f, 1.0f, -0.0f,
@ -120,6 +122,7 @@ proc main() =
# | .' | # | .' |
# 0'---3 # 0'---3
# load the data into GL
var mesh: tuple[vao,vbo,ebo: uint32] var mesh: tuple[vao,vbo,ebo: uint32]
glGenVertexArrays(1, mesh.vao.addr) glGenVertexArrays(1, mesh.vao.addr)
@ -141,11 +144,13 @@ proc main() =
glBindVertexArray(mesh.vao) glBindVertexArray(mesh.vao)
initShaders("src/mandelbrot/shader.vert", "src/mandelbrot/shader.frag") initShaders("src/mandelbrot/shader.vert", "src/mandelbrot/shader.frag")
while not window.windowShouldClose:
glClearColor(0.2, 0.2, 0.2, 0.5)
glUseProgram(GLData.program) glUseProgram(GLData.program)
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT) glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT)
glBindVertexArray(mesh.vao)
# main loop
while not window.windowShouldClose:
# update zoom params
zoom *= zf zoom *= zf
if zf < 0.0: zf = 0.0 if zf < 0.0: zf = 0.0
center_y += dy * zoom center_y += dy * zoom
@ -155,11 +160,11 @@ proc main() =
if center_x > 1.0f: center_x = 1.0f if center_x > 1.0f: center_x = 1.0f
if center_x < -1.0f: center_x = -1.0f if center_x < -1.0f: center_x = -1.0f
# pass the data to the shader
set_float("zoom", zoom) set_float("zoom", zoom)
set_float("center_x", center_x) set_float("center_x", center_x)
set_float("center_y", center_y) set_float("center_y", center_y)
glBindVertexArray(mesh.vao)
glDrawElements(GL_TRIANGLES, indices.len.cint, GL_UNSIGNED_INT, nil) glDrawElements(GL_TRIANGLES, indices.len.cint, GL_UNSIGNED_INT, nil)
window.swapBuffers() window.swapBuffers()
glfwPollEvents() glfwPollEvents()

View file

@ -2,7 +2,6 @@
in vec4 gl_FragCoord; in vec4 gl_FragCoord;
out vec4 fragColor; out vec4 fragColor;
//out float gl_FragDepth;
uniform float center_x; uniform float center_x;
uniform float center_y; uniform float center_y;
@ -12,267 +11,267 @@ uniform float zoom;
const vec3 colors[256] = vec3[256]( const vec3 colors[256] = vec3[256](
vec3(0.0,0.0,0.0), vec3(0.0,0.0,0.0),
vec3(128.0,0.0,0.0), vec3(0.5,0.0,0.0),
vec3(0.0,128.0,0.0), vec3(0.0,0.5,0.0),
vec3(128.0,128.0,0.0), vec3(0.5,0.5,0.0),
vec3(0.0,0.0,128.0), vec3(0.0,0.0,0.5),
vec3(128.0,0.0,128.0), vec3(0.5,0.0,0.5),
vec3(0.0,128.0,128.0), vec3(0.0,0.5,0.5),
vec3(192.0,192.0,192.0), vec3(0.75,0.75,0.75),
vec3(128.0,128.0,128.0), vec3(0.5,0.5,0.5),
vec3(255.0,0.0,0.0), vec3(0.99609375,0.0,0.0),
vec3(0.0,255.0,0.0), vec3(0.0,0.99609375,0.0),
vec3(255.0,255.0,0.0), vec3(0.99609375,0.99609375,0.0),
vec3(0.0,0.0,255.0), vec3(0.0,0.0,0.99609375),
vec3(255.0,0.0,255.0), vec3(0.99609375,0.0,0.99609375),
vec3(0.0,255.0,255.0), vec3(0.0,0.99609375,0.99609375),
vec3(255.0,255.0,255.0), vec3(0.99609375,0.99609375,0.99609375),
vec3(0.0,0.0,0.0), vec3(0.0,0.0,0.0),
vec3(0.0,0.0,95.0), vec3(0.0,0.0,0.37109375),
vec3(0.0,0.0,135.0), vec3(0.0,0.0,0.52734375),
vec3(0.0,0.0,175.0), vec3(0.0,0.0,0.68359375),
vec3(0.0,0.0,215.0), vec3(0.0,0.0,0.83984375),
vec3(0.0,0.0,255.0), vec3(0.0,0.0,0.99609375),
vec3(0.0,95.0,0.0), vec3(0.0,0.37109375,0.0),
vec3(0.0,95.0,95.0), vec3(0.0,0.37109375,0.37109375),
vec3(0.0,95.0,135.0), vec3(0.0,0.37109375,0.52734375),
vec3(0.0,95.0,175.0), vec3(0.0,0.37109375,0.68359375),
vec3(0.0,95.0,215.0), vec3(0.0,0.37109375,0.83984375),
vec3(0.0,95.0,255.0), vec3(0.0,0.37109375,0.99609375),
vec3(0.0,135.0,0.0), vec3(0.0,0.52734375,0.0),
vec3(0.0,135.0,95.0), vec3(0.0,0.52734375,0.37109375),
vec3(0.0,135.0,135.0), vec3(0.0,0.52734375,0.52734375),
vec3(0.0,135.0,175.0), vec3(0.0,0.52734375,0.68359375),
vec3(0.0,135.0,215.0), vec3(0.0,0.52734375,0.83984375),
vec3(0.0,135.0,255.0), vec3(0.0,0.52734375,0.99609375),
vec3(0.0,175.0,0.0), vec3(0.0,0.68359375,0.0),
vec3(0.0,175.0,95.0), vec3(0.0,0.68359375,0.37109375),
vec3(0.0,175.0,135.0), vec3(0.0,0.68359375,0.52734375),
vec3(0.0,175.0,175.0), vec3(0.0,0.68359375,0.68359375),
vec3(0.0,175.0,215.0), vec3(0.0,0.68359375,0.83984375),
vec3(0.0,175.0,255.0), vec3(0.0,0.68359375,0.99609375),
vec3(0.0,215.0,0.0), vec3(0.0,0.83984375,0.0),
vec3(0.0,215.0,95.0), vec3(0.0,0.83984375,0.37109375),
vec3(0.0,215.0,135.0), vec3(0.0,0.83984375,0.52734375),
vec3(0.0,215.0,175.0), vec3(0.0,0.83984375,0.68359375),
vec3(0.0,215.0,215.0), vec3(0.0,0.83984375,0.83984375),
vec3(0.0,215.0,255.0), vec3(0.0,0.83984375,0.99609375),
vec3(0.0,255.0,0.0), vec3(0.0,0.99609375,0.0),
vec3(0.0,255.0,95.0), vec3(0.0,0.99609375,0.37109375),
vec3(0.0,255.0,135.0), vec3(0.0,0.99609375,0.52734375),
vec3(0.0,255.0,175.0), vec3(0.0,0.99609375,0.68359375),
vec3(0.0,255.0,215.0), vec3(0.0,0.99609375,0.83984375),
vec3(0.0,255.0,255.0), vec3(0.0,0.99609375,0.99609375),
vec3(95.0,0.0,0.0), vec3(0.37109375,0.0,0.0),
vec3(95.0,0.0,95.0), vec3(0.37109375,0.0,0.37109375),
vec3(95.0,0.0,135.0), vec3(0.37109375,0.0,0.52734375),
vec3(95.0,0.0,175.0), vec3(0.37109375,0.0,0.68359375),
vec3(95.0,0.0,215.0), vec3(0.37109375,0.0,0.83984375),
vec3(95.0,0.0,255.0), vec3(0.37109375,0.0,0.99609375),
vec3(95.0,95.0,0.0), vec3(0.37109375,0.37109375,0.0),
vec3(95.0,95.0,95.0), vec3(0.37109375,0.37109375,0.37109375),
vec3(95.0,95.0,135.0), vec3(0.37109375,0.37109375,0.52734375),
vec3(95.0,95.0,175.0), vec3(0.37109375,0.37109375,0.68359375),
vec3(95.0,95.0,215.0), vec3(0.37109375,0.37109375,0.83984375),
vec3(95.0,95.0,255.0), vec3(0.37109375,0.37109375,0.99609375),
vec3(95.0,135.0,0.0), vec3(0.37109375,0.52734375,0.0),
vec3(95.0,135.0,95.0), vec3(0.37109375,0.52734375,0.37109375),
vec3(95.0,135.0,135.0), vec3(0.37109375,0.52734375,0.52734375),
vec3(95.0,135.0,175.0), vec3(0.37109375,0.52734375,0.68359375),
vec3(95.0,135.0,215.0), vec3(0.37109375,0.52734375,0.83984375),
vec3(95.0,135.0,255.0), vec3(0.37109375,0.52734375,0.99609375),
vec3(95.0,175.0,0.0), vec3(0.37109375,0.68359375,0.0),
vec3(95.0,175.0,95.0), vec3(0.37109375,0.68359375,0.37109375),
vec3(95.0,175.0,135.0), vec3(0.37109375,0.68359375,0.52734375),
vec3(95.0,175.0,175.0), vec3(0.37109375,0.68359375,0.68359375),
vec3(95.0,175.0,215.0), vec3(0.37109375,0.68359375,0.83984375),
vec3(95.0,175.0,255.0), vec3(0.37109375,0.68359375,0.99609375),
vec3(95.0,215.0,0.0), vec3(0.37109375,0.83984375,0.0),
vec3(95.0,215.0,95.0), vec3(0.37109375,0.83984375,0.37109375),
vec3(95.0,215.0,135.0), vec3(0.37109375,0.83984375,0.52734375),
vec3(95.0,215.0,175.0), vec3(0.37109375,0.83984375,0.68359375),
vec3(95.0,215.0,215.0), vec3(0.37109375,0.83984375,0.83984375),
vec3(95.0,215.0,255.0), vec3(0.37109375,0.83984375,0.99609375),
vec3(95.0,255.0,0.0), vec3(0.37109375,0.99609375,0.0),
vec3(95.0,255.0,95.0), vec3(0.37109375,0.99609375,0.37109375),
vec3(95.0,255.0,135.0), vec3(0.37109375,0.99609375,0.52734375),
vec3(95.0,255.0,175.0), vec3(0.37109375,0.99609375,0.68359375),
vec3(95.0,255.0,215.0), vec3(0.37109375,0.99609375,0.83984375),
vec3(95.0,255.0,255.0), vec3(0.37109375,0.99609375,0.99609375),
vec3(135.0,0.0,0.0), vec3(0.52734375,0.0,0.0),
vec3(135.0,0.0,95.0), vec3(0.52734375,0.0,0.37109375),
vec3(135.0,0.0,135.0), vec3(0.52734375,0.0,0.52734375),
vec3(135.0,0.0,175.0), vec3(0.52734375,0.0,0.68359375),
vec3(135.0,0.0,215.0), vec3(0.52734375,0.0,0.83984375),
vec3(135.0,0.0,255.0), vec3(0.52734375,0.0,0.99609375),
vec3(135.0,95.0,0.0), vec3(0.52734375,0.37109375,0.0),
vec3(135.0,95.0,95.0), vec3(0.52734375,0.37109375,0.37109375),
vec3(135.0,95.0,135.0), vec3(0.52734375,0.37109375,0.52734375),
vec3(135.0,95.0,175.0), vec3(0.52734375,0.37109375,0.68359375),
vec3(135.0,95.0,215.0), vec3(0.52734375,0.37109375,0.83984375),
vec3(135.0,95.0,255.0), vec3(0.52734375,0.37109375,0.99609375),
vec3(135.0,135.0,0.0), vec3(0.52734375,0.52734375,0.0),
vec3(135.0,135.0,95.0), vec3(0.52734375,0.52734375,0.37109375),
vec3(135.0,135.0,135.0), vec3(0.52734375,0.52734375,0.52734375),
vec3(135.0,135.0,175.0), vec3(0.52734375,0.52734375,0.68359375),
vec3(135.0,135.0,215.0), vec3(0.52734375,0.52734375,0.83984375),
vec3(135.0,135.0,255.0), vec3(0.52734375,0.52734375,0.99609375),
vec3(135.0,175.0,0.0), vec3(0.52734375,0.68359375,0.0),
vec3(135.0,175.0,95.0), vec3(0.52734375,0.68359375,0.37109375),
vec3(135.0,175.0,135.0), vec3(0.52734375,0.68359375,0.52734375),
vec3(135.0,175.0,175.0), vec3(0.52734375,0.68359375,0.68359375),
vec3(135.0,175.0,215.0), vec3(0.52734375,0.68359375,0.83984375),
vec3(135.0,175.0,255.0), vec3(0.52734375,0.68359375,0.99609375),
vec3(135.0,215.0,0.0), vec3(0.52734375,0.83984375,0.0),
vec3(135.0,215.0,95.0), vec3(0.52734375,0.83984375,0.37109375),
vec3(135.0,215.0,135.0), vec3(0.52734375,0.83984375,0.52734375),
vec3(135.0,215.0,175.0), vec3(0.52734375,0.83984375,0.68359375),
vec3(135.0,215.0,215.0), vec3(0.52734375,0.83984375,0.83984375),
vec3(135.0,215.0,255.0), vec3(0.52734375,0.83984375,0.99609375),
vec3(135.0,255.0,0.0), vec3(0.52734375,0.99609375,0.0),
vec3(135.0,255.0,95.0), vec3(0.52734375,0.99609375,0.37109375),
vec3(135.0,255.0,135.0), vec3(0.52734375,0.99609375,0.52734375),
vec3(135.0,255.0,175.0), vec3(0.52734375,0.99609375,0.68359375),
vec3(135.0,255.0,215.0), vec3(0.52734375,0.99609375,0.83984375),
vec3(135.0,255.0,255.0), vec3(0.52734375,0.99609375,0.99609375),
vec3(175.0,0.0,0.0), vec3(0.68359375,0.0,0.0),
vec3(175.0,0.0,95.0), vec3(0.68359375,0.0,0.37109375),
vec3(175.0,0.0,135.0), vec3(0.68359375,0.0,0.52734375),
vec3(175.0,0.0,175.0), vec3(0.68359375,0.0,0.68359375),
vec3(175.0,0.0,215.0), vec3(0.68359375,0.0,0.83984375),
vec3(175.0,0.0,255.0), vec3(0.68359375,0.0,0.99609375),
vec3(175.0,95.0,0.0), vec3(0.68359375,0.37109375,0.0),
vec3(175.0,95.0,95.0), vec3(0.68359375,0.37109375,0.37109375),
vec3(175.0,95.0,135.0), vec3(0.68359375,0.37109375,0.52734375),
vec3(175.0,95.0,175.0), vec3(0.68359375,0.37109375,0.68359375),
vec3(175.0,95.0,215.0), vec3(0.68359375,0.37109375,0.83984375),
vec3(175.0,95.0,255.0), vec3(0.68359375,0.37109375,0.99609375),
vec3(175.0,135.0,0.0), vec3(0.68359375,0.52734375,0.0),
vec3(175.0,135.0,95.0), vec3(0.68359375,0.52734375,0.37109375),
vec3(175.0,135.0,135.0), vec3(0.68359375,0.52734375,0.52734375),
vec3(175.0,135.0,175.0), vec3(0.68359375,0.52734375,0.68359375),
vec3(175.0,135.0,215.0), vec3(0.68359375,0.52734375,0.83984375),
vec3(175.0,135.0,255.0), vec3(0.68359375,0.52734375,0.99609375),
vec3(175.0,175.0,0.0), vec3(0.68359375,0.68359375,0.0),
vec3(175.0,175.0,95.0), vec3(0.68359375,0.68359375,0.37109375),
vec3(175.0,175.0,135.0), vec3(0.68359375,0.68359375,0.52734375),
vec3(175.0,175.0,175.0), vec3(0.68359375,0.68359375,0.68359375),
vec3(175.0,175.0,215.0), vec3(0.68359375,0.68359375,0.83984375),
vec3(175.0,175.0,255.0), vec3(0.68359375,0.68359375,0.99609375),
vec3(175.0,215.0,0.0), vec3(0.68359375,0.83984375,0.0),
vec3(175.0,215.0,95.0), vec3(0.68359375,0.83984375,0.37109375),
vec3(175.0,215.0,135.0), vec3(0.68359375,0.83984375,0.52734375),
vec3(175.0,215.0,175.0), vec3(0.68359375,0.83984375,0.68359375),
vec3(175.0,215.0,215.0), vec3(0.68359375,0.83984375,0.83984375),
vec3(175.0,215.0,255.0), vec3(0.68359375,0.83984375,0.99609375),
vec3(175.0,255.0,0.0), vec3(0.68359375,0.99609375,0.0),
vec3(175.0,255.0,95.0), vec3(0.68359375,0.99609375,0.37109375),
vec3(175.0,255.0,135.0), vec3(0.68359375,0.99609375,0.52734375),
vec3(175.0,255.0,175.0), vec3(0.68359375,0.99609375,0.68359375),
vec3(175.0,255.0,215.0), vec3(0.68359375,0.99609375,0.83984375),
vec3(175.0,255.0,255.0), vec3(0.68359375,0.99609375,0.99609375),
vec3(215.0,0.0,0.0), vec3(0.83984375,0.0,0.0),
vec3(215.0,0.0,95.0), vec3(0.83984375,0.0,0.37109375),
vec3(215.0,0.0,135.0), vec3(0.83984375,0.0,0.52734375),
vec3(215.0,0.0,175.0), vec3(0.83984375,0.0,0.68359375),
vec3(215.0,0.0,215.0), vec3(0.83984375,0.0,0.83984375),
vec3(215.0,0.0,255.0), vec3(0.83984375,0.0,0.99609375),
vec3(215.0,95.0,0.0), vec3(0.83984375,0.37109375,0.0),
vec3(215.0,95.0,95.0), vec3(0.83984375,0.37109375,0.37109375),
vec3(215.0,95.0,135.0), vec3(0.83984375,0.37109375,0.52734375),
vec3(215.0,95.0,175.0), vec3(0.83984375,0.37109375,0.68359375),
vec3(215.0,95.0,215.0), vec3(0.83984375,0.37109375,0.83984375),
vec3(215.0,95.0,255.0), vec3(0.83984375,0.37109375,0.99609375),
vec3(215.0,135.0,0.0), vec3(0.83984375,0.52734375,0.0),
vec3(215.0,135.0,95.0), vec3(0.83984375,0.52734375,0.37109375),
vec3(215.0,135.0,135.0), vec3(0.83984375,0.52734375,0.52734375),
vec3(215.0,135.0,175.0), vec3(0.83984375,0.52734375,0.68359375),
vec3(215.0,135.0,215.0), vec3(0.83984375,0.52734375,0.83984375),
vec3(215.0,135.0,255.0), vec3(0.83984375,0.52734375,0.99609375),
vec3(215.0,175.0,0.0), vec3(0.83984375,0.68359375,0.0),
vec3(215.0,175.0,95.0), vec3(0.83984375,0.68359375,0.37109375),
vec3(215.0,175.0,135.0), vec3(0.83984375,0.68359375,0.52734375),
vec3(215.0,175.0,175.0), vec3(0.83984375,0.68359375,0.68359375),
vec3(215.0,175.0,215.0), vec3(0.83984375,0.68359375,0.83984375),
vec3(215.0,175.0,255.0), vec3(0.83984375,0.68359375,0.99609375),
vec3(215.0,215.0,0.0), vec3(0.83984375,0.83984375,0.0),
vec3(215.0,215.0,95.0), vec3(0.83984375,0.83984375,0.37109375),
vec3(215.0,215.0,135.0), vec3(0.83984375,0.83984375,0.52734375),
vec3(215.0,215.0,175.0), vec3(0.83984375,0.83984375,0.68359375),
vec3(215.0,215.0,215.0), vec3(0.83984375,0.83984375,0.83984375),
vec3(215.0,215.0,255.0), vec3(0.83984375,0.83984375,0.99609375),
vec3(215.0,255.0,0.0), vec3(0.83984375,0.99609375,0.0),
vec3(215.0,255.0,95.0), vec3(0.83984375,0.99609375,0.37109375),
vec3(215.0,255.0,135.0), vec3(0.83984375,0.99609375,0.52734375),
vec3(215.0,255.0,175.0), vec3(0.83984375,0.99609375,0.68359375),
vec3(215.0,255.0,215.0), vec3(0.83984375,0.99609375,0.83984375),
vec3(215.0,255.0,255.0), vec3(0.83984375,0.99609375,0.99609375),
vec3(255.0,0.0,0.0), vec3(0.99609375,0.0,0.0),
vec3(255.0,0.0,95.0), vec3(0.99609375,0.0,0.37109375),
vec3(255.0,0.0,135.0), vec3(0.99609375,0.0,0.52734375),
vec3(255.0,0.0,175.0), vec3(0.99609375,0.0,0.68359375),
vec3(255.0,0.0,215.0), vec3(0.99609375,0.0,0.83984375),
vec3(255.0,0.0,255.0), vec3(0.99609375,0.0,0.99609375),
vec3(255.0,95.0,0.0), vec3(0.99609375,0.37109375,0.0),
vec3(255.0,95.0,95.0), vec3(0.99609375,0.37109375,0.37109375),
vec3(255.0,95.0,135.0), vec3(0.99609375,0.37109375,0.52734375),
vec3(255.0,95.0,175.0), vec3(0.99609375,0.37109375,0.68359375),
vec3(255.0,95.0,215.0), vec3(0.99609375,0.37109375,0.83984375),
vec3(255.0,95.0,255.0), vec3(0.99609375,0.37109375,0.99609375),
vec3(255.0,135.0,0.0), vec3(0.99609375,0.52734375,0.0),
vec3(255.0,135.0,95.0), vec3(0.99609375,0.52734375,0.37109375),
vec3(255.0,135.0,135.0), vec3(0.99609375,0.52734375,0.52734375),
vec3(255.0,135.0,175.0), vec3(0.99609375,0.52734375,0.68359375),
vec3(255.0,135.0,215.0), vec3(0.99609375,0.52734375,0.83984375),
vec3(255.0,135.0,255.0), vec3(0.99609375,0.52734375,0.99609375),
vec3(255.0,175.0,0.0), vec3(0.99609375,0.68359375,0.0),
vec3(255.0,175.0,95.0), vec3(0.99609375,0.68359375,0.37109375),
vec3(255.0,175.0,135.0), vec3(0.99609375,0.68359375,0.52734375),
vec3(255.0,175.0,175.0), vec3(0.99609375,0.68359375,0.68359375),
vec3(255.0,175.0,215.0), vec3(0.99609375,0.68359375,0.83984375),
vec3(255.0,175.0,255.0), vec3(0.99609375,0.68359375,0.99609375),
vec3(255.0,215.0,0.0), vec3(0.99609375,0.83984375,0.0),
vec3(255.0,215.0,95.0), vec3(0.99609375,0.83984375,0.37109375),
vec3(255.0,215.0,135.0), vec3(0.99609375,0.83984375,0.52734375),
vec3(255.0,215.0,175.0), vec3(0.99609375,0.83984375,0.68359375),
vec3(255.0,215.0,215.0), vec3(0.99609375,0.83984375,0.83984375),
vec3(255.0,215.0,255.0), vec3(0.99609375,0.83984375,0.99609375),
vec3(255.0,255.0,0.0), vec3(0.99609375,0.99609375,0.0),
vec3(255.0,255.0,95.0), vec3(0.99609375,0.99609375,0.37109375),
vec3(255.0,255.0,135.0), vec3(0.99609375,0.99609375,0.52734375),
vec3(255.0,255.0,175.0), vec3(0.99609375,0.99609375,0.68359375),
vec3(255.0,255.0,215.0), vec3(0.99609375,0.99609375,0.83984375),
vec3(255.0,255.0,255.0), vec3(0.99609375,0.99609375,0.99609375),
vec3(8.0,8.0,8.0), vec3(0.03125,0.03125,0.03125),
vec3(18.0,18.0,18.0), vec3(0.0703125,0.0703125,0.0703125),
vec3(28.0,28.0,28.0), vec3(0.109375,0.109375,0.109375),
vec3(38.0,38.0,38.0), vec3(0.1484375,0.1484375,0.1484375),
vec3(48.0,48.0,48.0), vec3(0.1875,0.1875,0.1875),
vec3(58.0,58.0,58.0), vec3(0.2265625,0.2265625,0.2265625),
vec3(68.0,68.0,68.0), vec3(0.265625,0.265625,0.265625),
vec3(78.0,78.0,78.0), vec3(0.3046875,0.3046875,0.3046875),
vec3(88.0,88.0,88.0), vec3(0.34375,0.34375,0.34375),
vec3(98.0,98.0,98.0), vec3(0.3828125,0.3828125,0.3828125),
vec3(108.0,108.0,108.0), vec3(0.421875,0.421875,0.421875),
vec3(118.0,118.0,118.0), vec3(0.4609375,0.4609375,0.4609375),
vec3(128.0,128.0,128.0), vec3(0.5,0.5,0.5),
vec3(138.0,138.0,138.0), vec3(0.5390625,0.5390625,0.5390625),
vec3(148.0,148.0,148.0), vec3(0.578125,0.578125,0.578125),
vec3(158.0,158.0,158.0), vec3(0.6171875,0.6171875,0.6171875),
vec3(168.0,168.0,168.0), vec3(0.65625,0.65625,0.65625),
vec3(178.0,178.0,178.0), vec3(0.6953125,0.6953125,0.6953125),
vec3(188.0,188.0,188.0), vec3(0.734375,0.734375,0.734375),
vec3(198.0,198.0,198.0), vec3(0.7734375,0.7734375,0.7734375),
vec3(208.0,208.0,208.0), vec3(0.8125,0.8125,0.8125),
vec3(218.0,218.0,218.0), vec3(0.8515625,0.8515625,0.8515625),
vec3(228.0,228.0,228.0), vec3(0.890625,0.890625,0.890625),
vec3(238.0,238.0,238.0) vec3(0.9296875,0.9296875,0.9296875)
); );
int get_iterations() int get_iterations()
{ {
double real = ((gl_FragCoord.x / 1000.0f - 1.2f) * zoom + center_x) * 1.5f; double real = ((gl_FragCoord.x / 1000.0f - 1.2f) * zoom + center_x) * 1.5f;
double imag = ((gl_FragCoord.y / 800.0f - 0.7f) * zoom + center_y) * 1.5f; double imag = ((gl_FragCoord.y / 800.0f - 0.9f) * zoom + center_y) * 1.5f;
int iterations = 0; int iterations = 0;
@ -306,7 +305,7 @@ vec4 return_color()
} }
int colorIndex = int((float(iter)/float(MAX_ITERATIONS))*256); int colorIndex = int((float(iter)/float(MAX_ITERATIONS))*256);
vec3 color = colors[colorIndex]; vec3 color = colors[colorIndex];
return vec4(color.x/256, color.y/256, color.z/256, 1.0); return vec4(color.x, color.y, color.z, 1.0);
} }