GLShaderNodeEditor icon indicating copy to clipboard operation
GLShaderNodeEditor copied to clipboard

Node Editor of OpenGL Shaders

OpenGL Shader Node Editor

Thumb

This is an OpenGL shader node editor based on Dear ImGui and ImNodes, which deals with GLSL shaders, including dynamic creation, linking, uniforms setting, and buffers binding in runtime via GUI operations. Basically it covers most of the C++ OpenGL client coding throughout the rendering pipeline.

  • Programs

    Program
    A program can link multiple shaders for a rendering pipeline.

  • Framebuffers

    Framebuffer

  • Textures

    Texture
    Visualization of OpenGL texture objects.

  • Nodes

    • Event Nodes

      EventNodes

      • On Init
        Will be executed once whenever the "start" or "restart" command is sent.
      • On Frame
        Will be executed every frame during "running" state.
    • Program Node
      • Attributes
        ProgramNodeAttribsArray ProgramNodeAttribsCompute
        • Dispatch Type: glDrawArray() or glDispatchCompute()
        • Framebuffer: screen or user created framebuffer
        • Draw Mode: 1st param of glDrawArray()
        • Size: 3rd param of glDrawArray() (The 2nd param will always be 0)
        • Work Group Size X/Y/Z: params of glDispatchCompute()

      ProgramNode

      • Node Inputs
        • Flow In
        • Uniforms
        • Uniform Blocks
        • Shader Storage Buffers
      • Node Outputs
        • Flow Out
        • Image Uniforms
        • Shader Storage Buffers
        • Framebuffer Attachments
    • Block Node

      BlockNode
      Can be either a Uniform Block or a Shader Storage Buffer Block.
      BlockNodeAttribs
      Only block pins with same sizes can be linked.

    • Texture Node

      TextureNode

    • Image Node

      ImageNode

      • Node Inputs
        • Texture Object
      • Node Outputs
        • Image Object
        • Texture Object
    • Ping-pong Node

      PingPongNode
      Can process Image Objects or Shader Storage Buffers

    • Time Node

      TimeNode

    • Mouse Position Node

      MousePosNode

Integration with any OpenGL Project

  • You can find a simple example OpenGL application in main.cpp.

Other libraries used:

  • GLEW: https://github.com/nigels-com/glew
  • GLFW: https://github.com/glfw/glfw
  • OpenGL Mathematics: https://github.com/g-truc/glm
  • tiny file dialogs: https://sourceforge.net/projects/tinyfiledialogs/
  • stb: https://github.com/nothings/stb
  • Source Sans: https://github.com/adobe-fonts/source-sans
  • Fork Awesome: https://github.com/ForkAwesome/Fork-Awesome