From ff660050ff820f45564ee14d64dfd0a58dfa98ac Mon Sep 17 00:00:00 2001 From: SolitudeSF Date: Wed, 23 Oct 2019 23:06:27 +0300 Subject: [PATCH] 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,