From ff660050ff820f45564ee14d64dfd0a58dfa98ac Mon Sep 17 00:00:00 2001 From: SolitudeSF Date: Wed, 23 Oct 2019 23:06:27 +0300 Subject: [PATCH 1/4] Add support for custom user shaders. By default loaded from `$XDG_CONFIG_DIR/boomer/shader.{vs,fs}` with fallback to builtin shaders. --- src/boomer.nim | 34 +++++++++++++++++++++++++++------- src/config.nim | 2 ++ 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/boomer.nim b/src/boomer.nim index 198d9df..77cf02c 100644 --- a/src/boomer.nim +++ b/src/boomer.nim @@ -20,8 +20,8 @@ proc readShader(file: string): Shader = const isDebug = not (defined(danger) or defined(release)) - vertexShader = readShader "boomer.vs" - fragmentShader = readShader "boomer.fs" + defaultVertexShader = readShader "boomer.vs" + defaultFragmentShader = readShader "boomer.fs" proc newShader(shader: Shader, kind: GLenum): GLuint = result = glCreateShader(kind) @@ -78,19 +78,39 @@ proc draw(screenshot: Image, camera: var Camera, shader, vao, texture: GLuint) = proc main() = var config = defaultConfig - let configFile = block: - if paramCount() > 0: - paramStr(1) - else: - getConfigDir() / "boomer" / "config" + let + boomerDir = getConfigDir() / "boomer" + configFile = block: + if paramCount() > 0: + paramStr(1) + else: + boomerDir / "config" if existsFile configFile: config = loadConfig(configFile) else: stderr.writeLine configFile & " doesn't exist. Using default values. " + if config.vertexShader.len == 0: + config.vertexShader = boomerDir / "shader.vs" + + if config.fragmentShader.len == 0: + config.fragmentShader = boomerDir / "shader.fs" + echo "Using config: ", config + var vertexShader = block: + if config.vertexShader != "default" and existsFile config.vertexShader: + readShader config.vertexShader + else: + defaultVertexShader + + var fragmentShader = block: + if config.fragmentShader != "default" and existsFile config.fragmentShader: + readShader config.fragmentShader + else: + defaultFragmentShader + # Fetching pixel data from X var display = XOpenDisplay(nil) diff --git a/src/config.nim b/src/config.nim index b4fa9da..2b3569f 100644 --- a/src/config.nim +++ b/src/config.nim @@ -7,6 +7,8 @@ type Config* = object scaleFriction*: float scalePanning*: float fps*: int + vertexShader*: string + fragmentShader*: string const defaultConfig* = Config( scrollSpeed: 1.0, From 2c338d6a9d585dee8a1e19e24addec2c5ce05409 Mon Sep 17 00:00:00 2001 From: rexim Date: Wed, 30 Oct 2019 23:56:00 +0700 Subject: [PATCH 2/4] Introduce comments to the config syntax --- src/config.nim | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/config.nim b/src/config.nim index 2b3569f..9597fe0 100644 --- a/src/config.nim +++ b/src/config.nim @@ -41,7 +41,10 @@ macro parseObject(obj: typed, key, val: string) = proc loadConfig*(filePath: string): Config = result = defaultConfig - for line in filePath.lines: + for rawLine in filePath.lines: + let line = rawLine.strip + if line.len > 0 and line[0] == '#': + continue let pair = line.split('=', 1) let key = pair[0].strip let value = pair[1].strip From a56b27ec75240b7b99a4eab0952bc86a43ced5f9 Mon Sep 17 00:00:00 2001 From: rexim Date: Thu, 31 Oct 2019 00:19:27 +0700 Subject: [PATCH 3/4] Reduce complexity --- src/boomer.nim | 27 ++++++++++----------------- src/config.nim | 2 -- 2 files changed, 10 insertions(+), 19 deletions(-) diff --git a/src/boomer.nim b/src/boomer.nim index 77cf02c..e66146b 100644 --- a/src/boomer.nim +++ b/src/boomer.nim @@ -80,34 +80,27 @@ proc main() = var config = defaultConfig let boomerDir = getConfigDir() / "boomer" - configFile = block: - if paramCount() > 0: - paramStr(1) - else: - boomerDir / "config" + configFile = boomerDir / "config" if existsFile configFile: config = loadConfig(configFile) else: stderr.writeLine configFile & " doesn't exist. Using default values. " - if config.vertexShader.len == 0: - config.vertexShader = boomerDir / "shader.vs" - - if config.fragmentShader.len == 0: - config.fragmentShader = boomerDir / "shader.fs" - echo "Using config: ", config - var vertexShader = block: - if config.vertexShader != "default" and existsFile config.vertexShader: - readShader config.vertexShader + let customVertexShaderPath = boomerDir / "boomer.vs" + let customFragmentShaderPath = boomerDir / "boomer.fs" + + var vertexShader: Shader = block: + if existsFile customVertexShaderPath: + readShader customVertexShaderPath else: defaultVertexShader var fragmentShader = block: - if config.fragmentShader != "default" and existsFile config.fragmentShader: - readShader config.fragmentShader + if existsFile customFragmentShaderPath: + readShader customFragmentShaderPath else: defaultFragmentShader @@ -164,7 +157,7 @@ proc main() = var wmName = "boomer" var wmClass = "Boomer" var hints = TXClassHint(res_name: wmName, res_class: wmClass) - + discard XStoreName(display, win, wmName) discard XSetClassHint(display, win, addr(hints)) diff --git a/src/config.nim b/src/config.nim index 9597fe0..57ab867 100644 --- a/src/config.nim +++ b/src/config.nim @@ -7,8 +7,6 @@ type Config* = object scaleFriction*: float scalePanning*: float fps*: int - vertexShader*: string - fragmentShader*: string const defaultConfig* = Config( scrollSpeed: 1.0, From 75d697c05471a6cb09f578d8d9a1dc36bca018be Mon Sep 17 00:00:00 2001 From: rexim Date: Thu, 31 Oct 2019 00:23:27 +0700 Subject: [PATCH 4/4] Use glsl extension for shader files --- src/boomer.nim | 8 ++++---- src/{boomer.fs => frag.glsl} | 0 src/{boomer.vs => vert.glsl} | 0 3 files changed, 4 insertions(+), 4 deletions(-) rename src/{boomer.fs => frag.glsl} (100%) rename src/{boomer.vs => vert.glsl} (100%) diff --git a/src/boomer.nim b/src/boomer.nim index e66146b..dcd5263 100644 --- a/src/boomer.nim +++ b/src/boomer.nim @@ -20,8 +20,8 @@ proc readShader(file: string): Shader = const isDebug = not (defined(danger) or defined(release)) - defaultVertexShader = readShader "boomer.vs" - defaultFragmentShader = readShader "boomer.fs" + defaultVertexShader = readShader "vert.glsl" + defaultFragmentShader = readShader "frag.glsl" proc newShader(shader: Shader, kind: GLenum): GLuint = result = glCreateShader(kind) @@ -89,8 +89,8 @@ proc main() = echo "Using config: ", config - let customVertexShaderPath = boomerDir / "boomer.vs" - let customFragmentShaderPath = boomerDir / "boomer.fs" + let customVertexShaderPath = boomerDir / "vert.glsl" + let customFragmentShaderPath = boomerDir / "frag.glsl" var vertexShader: Shader = block: if existsFile customVertexShaderPath: diff --git a/src/boomer.fs b/src/frag.glsl similarity index 100% rename from src/boomer.fs rename to src/frag.glsl diff --git a/src/boomer.vs b/src/vert.glsl similarity index 100% rename from src/boomer.vs rename to src/vert.glsl