{"id":24738413,"url":"https://github.com/houmain/gpupad","last_synced_at":"2026-03-15T11:54:37.193Z","repository":{"id":39451733,"uuid":"89869072","full_name":"houmain/gpupad","owner":"houmain","description":"A flexible GLSL and HLSL shader editor and IDE.","archived":false,"fork":false,"pushed_at":"2024-10-17T18:33:44.000Z","size":16075,"stargazers_count":134,"open_issues_count":1,"forks_count":7,"subscribers_count":6,"default_branch":"main","last_synced_at":"2024-10-20T02:41:56.700Z","etag":null,"topics":["compute","cross-platform","editor","glsl","glsl-shaders","gpgpu","gpupad","hlsl","hlsl-shaders","javascript","opengl","shaders","vulkan"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/houmain.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-04-30T18:28:09.000Z","updated_at":"2024-10-17T18:33:47.000Z","dependencies_parsed_at":"2024-08-09T08:30:30.284Z","dependency_job_id":"4e0a503a-dccf-4149-9acf-5fd313390a56","html_url":"https://github.com/houmain/gpupad","commit_stats":null,"previous_names":[],"tags_count":43,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/houmain%2Fgpupad","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/houmain%2Fgpupad/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/houmain%2Fgpupad/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/houmain%2Fgpupad/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/houmain","download_url":"https://codeload.github.com/houmain/gpupad/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247393569,"owners_count":20931812,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["compute","cross-platform","editor","glsl","glsl-shaders","gpgpu","gpupad","hlsl","hlsl-shaders","javascript","opengl","shaders","vulkan"],"created_at":"2025-01-27T22:37:06.569Z","updated_at":"2026-03-15T11:54:37.187Z","avatar_url":"https://github.com/houmain.png","language":"C++","readme":"\n# GPUpad\n\n\u003cp\u003e\n\u003ca href=\"https://github.com/houmain/gpupad/actions/workflows/build.yml\"\u003e\n\u003cimg alt=\"Build\" src=\"https://github.com/houmain/gpupad/actions/workflows/build.yml/badge.svg\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/houmain/gpupad/issues\"\u003e\n\u003cimg alt=\"Issues\" src=\"https://img.shields.io/github/issues-raw/houmain/gpupad.svg\"/\u003e\u003c/a\u003e\n\n\u003ca href=\"#features\"\u003eFeatures\u003c/a\u003e |\n\u003ca href=\"#screenshots\"\u003eScreenshots\u003c/a\u003e |\n\u003ca href=\"#introduction\"\u003eIntroduction\u003c/a\u003e |\n\u003ca href=\"#installation\"\u003eInstallation\u003c/a\u003e |\n\u003ca href=\"#building\"\u003eBuilding\u003c/a\u003e |\n\u003ca href=\"https://github.com/houmain/gpupad/blob/main/CHANGELOG.md\"\u003eChangelog\u003c/a\u003e\n\u003c/p\u003e\n\nA lightweight editor for GLSL and HLSL shaders and a fully-featured IDE for developing GPU based algorithms.\n\n## Features\n\n* OpenGL, Vulkan and Direct3D 12 renderer.\n* Decent source editor with automatic indentation, brace highlighting, rectangular selection\u0026hellip;\n* GLSL, HLSL and JavaScript syntax highlighting with basic auto completion.\n* Possibility to evaluate shader programs with completely customizeable input and render state.\n* Continuous validation of standalone shader and script files.\n* Automatically defined printf function for printf-debugging.\n* JavaScript expressions to define uniform input.\n* Custom actions to extend the functionality.\n* Dumping of preprocessed source, SPIR-V and glslang AST.\n* Reading and writing of image files ([KTX](https://github.com/KhronosGroup/KTX-Software) and DDS for 3D/Array textures, block compressed textures, cube maps\u0026hellip;).\n* Streaming video files to textures (only when built with the optional dependency `Qt6Multimedia`).\n* Editor for structured binary files.\n* Advanced hot reloading of externally modified files.\n* [Base16](https://github.com/chriskempson/base16-schemes-source) theme support.\n* Sample sessions in the Help menu.\n\n## Screenshots\n\n\u003ca href=\"screenshot1.png\"\u003e\u003cimg  style=\"vertical-align: top\" src=\"screenshot1.png\" height=\"280\"\u003e\u003c/a\u003e \u0026nbsp;\n\u003ca href=\"screenshot2.png\"\u003e\u003cimg src=\"screenshot2.png\" height=\"380\"\u003e\u003c/a\u003e\n\n## Introduction\n\n### Getting Started\nTo get started, you can open and play around with the sample sessions in the *Help* menu.\n\nThe sample sessions can also be used as templates - saving a session As... copies all the dependencies to the new location.\n\n### Session\nIn order to try out the shaders, the session allows to define draw and compute calls, together with the pipeline state and data the programs should operate on.\n\nIt can be populated with items from the *Session* menu or the context menu. Undo/redo, copy/paste and drag/drop should work as expected (also between multiple instances).\nIt is even possible to drag the items to and from a text editor (they are serialized as JSON).\n\n### Evaluation\nThe session can be evaluated manually *[F6]*, automatically whenever something relevant changes *[F7]* or steadily *[F8]*, for animations.\nAll items which contributed to the last evaluation are highlighted.\n\n### Items\nThe items of a session pretty much correspond the concepts known from writing OpenGL or Vulkan applications:\n\n- **Call** -\nMost prominently are the draw, compute and ray trace calls. Whenever the session is evaluated, all active calls are evaluated in consecutive order. They can be de-/activated using the checkbox.\nThe elapsed time of each call is output to the *Message* window (measured using GPU timer queries).\n\n- **Program** -\nConsists of one or multiple shaders, which are linked together, so they can be used by draw or compute calls.\n\n- **Texture** -\nAll kind of color, depth or stencil textures can be created. They serve as sample sources, image in- and outputs and target attachments. They can be backed by files.\n\n- **Target** -\nSpecifies where draws calls should render to. Multiple images can be attached. Depending on the attached image's type, different render states can be configured.\n\n- **Binding** -\nAllows to bind data to a program's uniforms, samplers, images and buffers. A binding affects all subsequent calls, until it is replaced by a binding with the same name, or the scope ends (see *Groups*). The name of a binding needs to match the name of a program's binding point.\n\n- **Buffer** -\nBuffer blocks define the structure of a region within a binary. They consist of rows with multiple fields of some data type. Buffers can be backed by binary files.\n\n- **Stream** -\nServes as the input for vertex shaders. A stream consists of multiple attributes, which get their data from the referenced buffer blocks.\n\n- **Group** -\nAllows to structure more complex sessions. They open a new scope unless *inline scope* is checked. Items within a scope are not visible for items outside the scope (they do not appear in the combo boxes).\n\n- **Script** -\nAllows to define JavaScript functions and variables in script files, which can subsequently be used in uniform binding expressions.\nScripts can also be used to dynamically populate the session and generate buffer and texture data.\nThere is one JavaScript state for the whole session and the scripts are evaluated in consecutive order (*Group* scopes do not have an effect).\n\n- **Acceleration Structure** -\nAllows to define the instances and geometry for ray tracing calls.\n\n## Scripting\n\n\u003cdetails\u003e\n\u003csummary\u003eInitial documentation of the available script objects.\u003c/summary\u003e\n\n:warning: Please use the discussions section for requesting additional information or functionality.\n\n### App\n\n- `frameIndex: Number`\n- `frameRate: Number`\n- `time: Number`\n- `timeDelta: Number`\n- `date: [Number]` - The current date (year, month, day, time in seconds).\n- `keyboard: Keyboard`\n- `mouse: Mouse`\n- `session: Session`\n- `callAction(id, arguments...) -\u003e result`\n- `enumerateFiles(pattern) -\u003e [filename]`\n- `loadLibrary(filename) -\u003e Library?`\n- `openEditor(filename, title?) -\u003e Editor?`\n- `openFileDialog(pattern) -\u003e filename: String?`\n- `readTextFile(filename) -\u003e String?`\n- `writeTextFile(filename, String) -\u003e Bool`\n- `writeBinaryFile(filename, Data) -\u003e Bool`\n\n### Session\n- `name: String`\n- `items: [Item]`\n- `selection: [Item]`\n- `findItem(ItemIdent, origin: ItemIdent?, subItems: Bool?) -\u003e Item?`\n- `findItems(ItemIdent, origin: ItemIdent?, subItems: Bool?) -\u003e [Item]`\n- `getParentItem(ItemIdent) -\u003e Item?`\n- `insertItem(parent: ItemIdent?, object) -\u003e Item`\n- `insertItemAfter(sibling: ItemIdent, object) -\u003e Item`\n- `insertItemBefore(sibling: ItemIdent, object) -\u003e Item`\n- `deleteItem(ItemIdent)`\n- `clearItems(ItemIdent)`\n- `replaceItems(parent: ItemIdent, [Object])`\n- `openEditor(ItemIdent) -\u003e Editor?`\n- `setBlockData(ItemIdent, Data)`\n- `setBufferData(ItemIdent, Data)`\n- `setScriptSource(ItemIdent, Data)`\n- `setShaderSource(ItemIdent, Data)`\n- `setTextureData(ItemIdent, Data)`\n- `processShader(shader: ItemIdent, type: String) -\u003e String/Data`\n- `getBufferHandle(ItemIdent) -\u003e Number`\n- `getTextureHandle(ItemIdent) -\u003e Number`\n\n### Editor\n\n- `viewportSize: [width, height]`\n\n### Mouse\n\n- `button: [State]` - The state of each mouse button (0 = Up, 1 = Down, 2 = Pressed, -1 = Released).\n- `coord: [x, y]`\n- `delta: [x, y]`\n- `fragCoord: [x, y]`\n- `prevCoord: [x, y]`\n- `prevFragCoord: [x, y]`\n- `editorSize: [width, height]`\n\n### Keyboard\n\n- `keys: [State]` - The state of each key (0 = Up, 1 = Down, 2 = Pressed, -1 = Released).\n\n\u003c/details\u003e\n\n## Installation\n\n### Arch Linux and derivatives\n\nAn up to date build can be installed from the [AUR](https://aur.archlinux.org/packages/gpupad-git/).\n\n### Windows and other Linux distributions\n\nA portable build can be downloaded from the [latest release](https://github.com/houmain/gpupad/releases/latest) page.\n\n## Building\n\nA C++20 conforming compiler is required. A script for the\n[CMake](https://cmake.org) build system is provided.\nIt depends on the following libraries, which can be installed using a package manager like [vcpkg](https://github.com/microsoft/vcpkg/) or by other means:\n\n- [Qt6](https://doc.qt.io/qt-6/get-and-install-qt.html)\n- [KDGpu](https://github.com/houmain/KDGpu) (automatically pulled as submodule)\n- [glslang](https://github.com/KhronosGroup/glslang)\n- [spirv-cross](https://github.com/KhronosGroup/SPIRV-Cross)\n- [libktx](https://github.com/KhronosGroup/KTX-Software)\n- [vulkan-memory-allocator](https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator)\n- [Slang](https://https://shader-slang.org)\n- [spdlog](https://github.com/gabime/spdlog)\n- [OpenImageIO](https://github.com/AcademySoftwareFoundation/OpenImageIO) (optional)\n\n### Building on Debian Linux and derivatives:\n\n```bash\n# install dependencies\nsudo apt install build-essential git cmake qtdeclarative6-dev libdrm-dev pkg-config libxcb*-dev libx11-dev libxrandr-dev glslang-tools\n\n# check out source\ngit clone --recurse-submodules https://github.com/houmain/gpupad\ncd gpupad\n\n# install vcpkg\ngit clone --depth=1 https://github.com/microsoft/vcpkg.git\nvcpkg/bootstrap-vcpkg.sh -disableMetrics\n\n# install additional dependencies using vcpkg\nvcpkg/vcpkg install vulkan \"ktx[vulkan]\" spirv-cross spirv-tools vulkan-memory-allocator spdlog\n\n# build\ncmake -B build -DCMAKE_TOOLCHAIN_FILE=vcpkg/scripts/buildsystems/vcpkg.cmake\ncmake --build build -j4\n```\n\n### Building on Windows:\n\n```bash\ncmd\n\n# install Qt6\n# https://doc.qt.io/qt-6/get-and-install-qt.html\n\n# check out source\ngit clone --recurse-submodules https://github.com/houmain/gpupad\ncd gpupad\n\n# install vcpkg\ngit clone --depth=1 https://github.com/microsoft/vcpkg.git\nvcpkg\\bootstrap-vcpkg -disableMetrics\n\n# install dependencies using vcpkg\nvcpkg\\vcpkg install vulkan \"ktx[vulkan]\" glslang spirv-cross spirv-tools vulkan-memory-allocator spdlog directx-dxc\n\n# generate Visual Studio solution (set correct path to Qt installation)\ncmake -B build -DCMAKE_PREFIX_PATH=C:\\Qt\\6.9.0\\msvc2022_64 -DCMAKE_TOOLCHAIN_FILE=vcpkg\\scripts\\buildsystems\\vcpkg.cmake\n\n# build Debug version and copy all dependencies to build directory\ncmake --build build --config Debug\ncmake --install build --config Debug --component Application --prefix %CD%\\build\\Debug\n\n# open solution (Visual Studio solutions prior to 2026 have .sln extension)\nstart build\\gpupad.slnx\n```\n\n## License\n\nGPUpad is released under the GNU GPLv3. Please see `LICENSE` for license details.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhoumain%2Fgpupad","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhoumain%2Fgpupad","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhoumain%2Fgpupad/lists"}