Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
164 commits
Select commit Hold shift + click to select a range
16ef7ea
add ao support
njbrown Mar 25, 2026
eaf2963
add new library and ao shader
njbrown Mar 25, 2026
e494445
fix random generation and default prop values
njbrown Mar 25, 2026
ffe75a6
add curvature node
njbrown Mar 25, 2026
05f4d31
add swirl, rays and masked blur nodes
njbrown Mar 25, 2026
7c90466
add basis for bevel node
njbrown Mar 26, 2026
350a811
move new bevel to v3
njbrown Mar 26, 2026
c72f5b2
bevelv2 complete
njbrown Mar 26, 2026
d0a5e20
add curvature shapes props to bevel
njbrown Mar 26, 2026
cb4eba6
reimplement floodfill nodes
njbrown Mar 26, 2026
24aa086
remove duplicate nodes in v3
njbrown Mar 26, 2026
284422b
fix middle mouse panning for now
njbrown Mar 26, 2026
85c2650
add curve node, prop and widget
njbrown Mar 29, 2026
572d17d
centralize code generation and node boilerplate code
njbrown Mar 29, 2026
36c32ba
complete curve featureset
njbrown Mar 29, 2026
3d1b911
add blurhq
njbrown Apr 15, 2026
7dd95f6
add auto levels node
njbrown Apr 15, 2026
e0e0414
add distance node
njbrown Apr 15, 2026
bfb519d
add edge detection node
njbrown May 18, 2026
c29ecca
add color to mask node
njbrown May 18, 2026
3221d44
add rough grain
njbrown May 18, 2026
0651f9d
add directional scratches
njbrown May 18, 2026
bbc221c
make scratches seamless
njbrown May 18, 2026
5c3b51b
add vibrance
njbrown May 18, 2026
8aa67fa
add high pass
njbrown May 18, 2026
0f42166
add emboss
njbrown May 18, 2026
3f2da97
add voronoise fractal
njbrown May 18, 2026
7c8b619
make voronoi fractal seamless
njbrown May 18, 2026
e50859d
add makteittile
njbrown May 18, 2026
24869ee
fix diagonal
njbrown May 18, 2026
3d075b5
add toon gradient
njbrown May 18, 2026
932a252
add height blend
njbrown May 18, 2026
d027187
add domain warp
njbrown May 18, 2026
8bfdbbb
new batch of nodes
njbrown May 18, 2026
321f268
add curve icon
njbrown May 18, 2026
f33207f
make blurhq seamless
njbrown May 20, 2026
d9391de
implement file save
njbrown May 20, 2026
67d1948
fix save position offset
njbrown May 23, 2026
0dbea3f
display project name in title
njbrown May 23, 2026
69951a5
handle node deletion properly
njbrown May 23, 2026
396eea7
fix curvature
njbrown May 23, 2026
54dbfb3
add recent files menu
njbrown May 23, 2026
63387db
properly cleanup projects
njbrown May 23, 2026
95c15bf
make offset 0 in tilesmapler by default
njbrown May 23, 2026
6223305
make blur scale invariant
njbrown May 23, 2026
a22bdfc
render textures using linear sampling
njbrown May 23, 2026
cb21e32
add alpha and bump mesh detail
njbrown May 24, 2026
3a9c92e
fix tiling default props
njbrown May 24, 2026
458b41e
make bevelv2 scale invariant
njbrown May 24, 2026
ab04146
add new hdri
njbrown May 24, 2026
febb862
increase sphere generation perf
njbrown May 24, 2026
353f88d
remove original bevel from v3 lib
njbrown May 24, 2026
64e1fb2
display bool prop widget
njbrown May 24, 2026
36161e4
disable backface culling
njbrown May 24, 2026
e926dbb
optimize mesh generation
njbrown May 24, 2026
bcb7cc4
add rounded ends to cylinder
njbrown May 24, 2026
50b1ef7
add spread node
njbrown May 25, 2026
71afbf5
add status bar with progress bar
njbrown May 25, 2026
6006931
fix status bar alignment
njbrown May 25, 2026
c1f83c1
add github build script
njbrown May 29, 2026
b1d0e0b
notify discord on successful build
njbrown May 30, 2026
9df25f6
switch to aws for nightlies
njbrown May 30, 2026
756e687
add experimental v3 normal map node
njbrown May 31, 2026
6c3841e
comment out makeittile
njbrown May 31, 2026
b257ecb
refine gaussian blur
njbrown May 31, 2026
ab248ba
add perlin noise
njbrown May 31, 2026
cc949c0
add perlin noise 3d
njbrown May 31, 2026
b5a7319
remove old perlin2d
njbrown May 31, 2026
6a06105
add blend node
njbrown Jun 1, 2026
1e03749
fix blend node filter order
njbrown Jun 1, 2026
f9729f0
load and display alphas channels
njbrown Jun 1, 2026
85c7992
simplify overlay
njbrown Jun 1, 2026
329cde6
fix blending
njbrown Jun 1, 2026
34bd0d1
and x and y for solid cell nodes
njbrown Jun 6, 2026
3028b90
fix prop widget update flow
njbrown Jun 6, 2026
49332e7
fix preview screen panning
njbrown Jun 6, 2026
8a943b3
add props for frames and comments
njbrown Jun 6, 2026
d7331db
update frame props
njbrown Jun 6, 2026
3cfdca6
display texture channel above node
njbrown Jun 7, 2026
b379e6f
map range no longer affects alpha channel
njbrown Jun 7, 2026
239b35d
begin copy/paste impl
njbrown Jun 7, 2026
860dc9b
invalidate nodes after copy/paste
njbrown Jun 7, 2026
24b75fc
paste now happens relative to view
njbrown Jun 7, 2026
bc578b7
disable scrolling in comboboxes
njbrown Jun 7, 2026
7e5178b
add about dialog
njbrown Jun 7, 2026
bd422a0
add prop accordion
njbrown Jun 7, 2026
1cd9c01
display port names
njbrown Jun 7, 2026
0fdf57f
add undo/redo
njbrown Jun 10, 2026
81a51b1
add bricks2 node
njbrown Jun 14, 2026
cefc88b
pin windows build
njbrown Jun 15, 2026
7899592
update slack build message
njbrown Jun 15, 2026
310d7a8
render alpha channel in 3d view
njbrown Jun 20, 2026
373520b
add Set Alpha node
njbrown Jun 20, 2026
973997f
remove ok and cancel buttons from color picker
njbrown Jun 20, 2026
7323152
add library migration system
njbrown Jun 20, 2026
be4f9c4
show alert dialog before upgrade
njbrown Jun 20, 2026
64eafd7
fix old texture checking
njbrown Jun 20, 2026
304af37
implement dragging to window to open file
njbrown Jun 20, 2026
e458c45
fix image node save/load
njbrown Jun 20, 2026
398163e
match old bevel to new one on upgrade
njbrown Jun 21, 2026
ec0ee15
add sentry for error tracking
njbrown Jun 26, 2026
7438f0a
fix missing curl dep
njbrown Jun 26, 2026
f18f59e
tidy up telemetry
njbrown Jun 26, 2026
17ee858
add git hash to version
njbrown Jun 26, 2026
c59ac6c
fix crashpad build issues in ci build
njbrown Jun 27, 2026
e759268
fix ci: use inproc on macos, fix windows ps1 copy syntax
njbrown Jun 28, 2026
1ed6444
upload debug info to sentry post build
njbrown Jun 30, 2026
26d6a25
fix multithreading-based memory access and queueing bugs
njbrown Jul 6, 2026
992c73b
add crash testing inside main gated by flag
njbrown Jul 15, 2026
a44f0c1
fix symbolification generation in gh action for linux
njbrown Jul 15, 2026
12b2f1c
add manual windows crash to test symbolication in sentry
njbrown Jul 15, 2026
934a772
add manual crash test to mac build
njbrown Jul 15, 2026
30bf653
bump to macos version
njbrown Jul 15, 2026
5f0376c
add mac inproc test
njbrown Jul 16, 2026
5274f62
mac crash hack
njbrown Jul 16, 2026
f696500
switch to using crashpad in mac builds
njbrown Jul 16, 2026
01316a8
cmake crashpad fix
njbrown Jul 16, 2026
ca4051b
bump patch
njbrown Jul 16, 2026
ca8e85e
update macOS build to use Xcode 15 for compatibility with Qt 6.7.x
njbrown Jul 16, 2026
b93cd52
replace qmap [] lookups with .value()
njbrown Jul 19, 2026
c51872b
tidy up texture channels on node deletion
njbrown Jul 19, 2026
3cee848
fix cases of missing nodes causing null pointer dereferencing
njbrown Jul 19, 2026
7234de1
fix potential crash caused by missing node render data
njbrown Jul 19, 2026
3f4089e
fix potential memory issues due to incorrect texture size
njbrown Jul 19, 2026
f2030ef
properly free mesh in destructor
njbrown Jul 19, 2026
32aea7d
replace asserts with null pointers
njbrown Jul 19, 2026
3ff80ba
tidy up some init and pointer logic
njbrown Jul 19, 2026
e0133cd
force deployment to use keyring over gh tokens
njbrown Jul 19, 2026
01c102f
add app version to status bar
njbrown Jul 19, 2026
9144458
add build version and hash to final builds
njbrown Jul 19, 2026
4b803e1
lay ground work for theming
njbrown Jul 27, 2026
0232466
add dockmanager style sheet support
njbrown Jul 27, 2026
afafdd0
style prop widgets
njbrown Jul 27, 2026
215b736
tidy up library style
njbrown Jul 27, 2026
fc533dd
theme nodegraph
njbrown Jul 27, 2026
333b7b8
style 2d/3d widgets
njbrown Jul 27, 2026
34abd06
tidy up
njbrown Jul 27, 2026
8327cc0
ui tidy up and build script style check
njbrown Jul 27, 2026
d4a9414
icon tidy up
njbrown Jul 28, 2026
039faa9
adjust gutter width and color
njbrown Jul 28, 2026
43e8eea
add qss hotreload by default and remove ads tab accent
njbrown Jul 30, 2026
e21238b
add segfault errors in viewer3d
njbrown Jul 30, 2026
1660791
more tidying up
njbrown Jul 30, 2026
2c9ec0c
fix cases of input texture spill over between disconnected nodes
njbrown Aug 2, 2026
62a5175
properly mark disconnected nodes as dirty
njbrown Aug 2, 2026
dde2bda
address texture state leak
njbrown Aug 2, 2026
9d94335
add fast ao and upgrade ao algo
njbrown Aug 2, 2026
b96c7c6
add launcher
njbrown Aug 6, 2026
a148d4e
reparent upgrade dialog
njbrown Aug 6, 2026
7fd3f0b
implement update checking
njbrown Aug 29, 2026
8734902
add icon to download button
njbrown Aug 30, 2026
581638b
fix sql dep on linux
njbrown Aug 30, 2026
fc66fd6
add empty state in launcher
njbrown Aug 30, 2026
96beef4
add new batch of skies
njbrown Aug 30, 2026
6160c92
make launch grid responsive
njbrown Aug 30, 2026
0fe29c4
fix launcher layout gap
njbrown Aug 30, 2026
1987565
add crash consent dialog
njbrown Aug 30, 2026
113adfc
add rotation to env
njbrown Aug 30, 2026
edbd459
adjust studio rotation
njbrown Aug 30, 2026
5539f03
add shortcut keys
njbrown Aug 30, 2026
4b90b40
add checkbox to selected model/sky
njbrown Aug 30, 2026
d8bfa02
update textures to libv3
njbrown Aug 30, 2026
a1ee737
add breadcrumbs for better error handling and handle resolution chang…
njbrown Sep 1, 2026
ba1deac
fix number parsing
njbrown Sep 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
310 changes: 291 additions & 19 deletions .github/workflows/build.yml

Large diffs are not rendered by default.

6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,8 @@ compile_commands.json
CTestTestfile.cmake
_deps

build/
build/
build-sentry-test/

# Secrets — Sentry auth token, org/project slugs
.env
41 changes: 41 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,29 @@ cmake_minimum_required(VERSION 3.10)

project(qtcompleteapp VERSION 0.1 LANGUAGES CXX)

# sentry-native (Crashpad backend for out-of-process crash capture)
include(FetchContent)
FetchContent_Declare(
sentry
GIT_REPOSITORY https://github.com/getsentry/sentry-native.git
GIT_TAG 0.7.20
)
set(SENTRY_BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
if(WIN32)
set(SENTRY_BACKEND "crashpad" CACHE STRING "" FORCE)
set(SENTRY_TRANSPORT "winhttp" CACHE STRING "" FORCE)
elseif(APPLE)
# Crashpad: out-of-process minidumps with full thread stacks (symbolicated via
# the uploaded dSYM), same as Win/Linux. The inproc backend delivered crashes
# but with no stack frames on Apple Silicon, so reports were unsymbolicatable.
set(SENTRY_BACKEND "crashpad" CACHE STRING "" FORCE)
set(SENTRY_TRANSPORT "curl" CACHE STRING "" FORCE)
else()
set(SENTRY_BACKEND "crashpad" CACHE STRING "" FORCE)
set(SENTRY_TRANSPORT "curl" CACHE STRING "" FORCE)
endif()
FetchContent_MakeAvailable(sentry)

# Find Qt6 with GuiPrivate before adding subdirectories that need it
find_package(Qt6 COMPONENTS Core Gui Widgets REQUIRED)

Expand All @@ -16,6 +39,12 @@ set(BUILD_EXAMPLES OFF CACHE BOOL "Don't build ADS examples" FORCE)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/ads)
# set_target_properties(qtadvanceddocking-qt6 PROPERTIES BUILD_STATIC TRUE)

# Theme / design-token system (single source of truth for colors, QSS, palette)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/theme)

# Launcher data layer (index.db + thumbs.db). Headless, no widgets.
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/catalog)

# Node Graph
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/nodegraph)

Expand All @@ -28,3 +57,15 @@ add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/colorpicker)
# Main App
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/texturelab)

# Unit tests (QtTest). Off in release builds; enable with -DTEXTURELAB_BUILD_TESTS=ON.
option(TEXTURELAB_BUILD_TESTS "Build the unit test suite" ON)
if(TEXTURELAB_BUILD_TESTS)
find_package(Qt6 COMPONENTS Test QUIET)
if(Qt6Test_FOUND)
enable_testing()
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/tests)
else()
message(STATUS "Qt6 Test module not found — skipping unit tests")
endif()
endif()

5 changes: 4 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,10 @@ install Qt 6 and required dependencies
Note: Linux needs libmesa:
https://doc.qt.io/qt-6/linux.html

sudo apt install build-essential libgl1-mesa-dev libxkbcommon-dev libvulkan-dev
sudo apt install build-essential libgl1-mesa-dev libxkbcommon-dev libvulkan-dev libcurl4-openssl-dev

Note: libcurl4-openssl-dev is required by sentry-native (crash reporting).
Without it, CMake fails with "CURL: Required feature AsynchDNS is not found".

```

Expand Down
28 changes: 28 additions & 0 deletions gh-build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#!/usr/bin/env bash
set -euo pipefail

source .env

# Force gh to use the keyring login (which has repo scope). gh prefers the
# GH_TOKEN / GITHUB_TOKEN env vars over keyring auth, and the token exported
# from the shell only has read:packages scope, which 403s on workflow dispatch.
unset GH_TOKEN GITHUB_TOKEN

REPO="njbrown/texturelab"
WORKFLOW="build.yml"
BRANCH="${1:-$(git rev-parse --abbrev-ref HEAD)}"

echo "Triggering build for branch: $BRANCH"
gh workflow run "$WORKFLOW" --repo "$REPO" --ref "$BRANCH"

echo "Waiting for run to start..."
sleep 3

RUN_ID=$(gh run list --repo "$REPO" --workflow "$WORKFLOW" --branch "$BRANCH" --limit 1 --json databaseId -q '.[0].databaseId')

echo "Run ID: $RUN_ID"
echo "https://github.com/$REPO/actions/runs/$RUN_ID"

if [[ "${2:-}" == "--watch" || "${1:-}" == "--watch" ]]; then
gh run watch "$RUN_ID" --repo "$REPO"
fi
139 changes: 139 additions & 0 deletions resources/icons/ads/close-button-disabled.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
139 changes: 139 additions & 0 deletions resources/icons/ads/close-button.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading