Text-based texture UI and Rasterizer.
TextUR is a terminal-based editor for text-based textures or images.
This is a tool for generating textures to be used with DungGine
.
![image](https://private-user-images.githubusercontent.com/32767250/350562296-bfb04801-8969-418f-b5bd-0c24d37eb0b3.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzYyNjEsIm5iZiI6MTczOTU3NTk2MSwicGF0aCI6Ii8zMjc2NzI1MC8zNTA1NjIyOTYtYmZiMDQ4MDEtODk2OS00MThmLWI1YmQtMGMyNGQzN2ViMGIzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIzMzI0MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPThiZTkxMzlmNDJjOGJkZGJiMjNiMWVhN2Q4ZmI5NTljY2VlYmY2Nzk3ZjI5MzJhM2Y4YThkNjJhYWIxYjRiYjEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.AQYF7471MoTgH8U5Q23c0uAnDXQo8WJGR00JSsi4RqA)
- Load existing texture :
./textel -f <filename>
. - Create new texture or overwrite existing texture :
./textel -f <filename> -s <num_rows> <num_cols>
. - Trace over another texture :
./textel -f <main_texture_filename> -t <trace_texture_filename>
. - Convert texture made up of bright textels from the textel presets in TextUR to a corresponding dark texture which then can be used for rendering shadows in e.g.
DungGine
. The program exits when conversion is completed :./textel -f <source_texture_filename> -c <target_texture_filename>
.
WASD
(lower case) or arrow keys : navigates the cursor or selects a textel preset in the textel menu. When in the textel menu, left and right (orA
andD
) scrolls from material to material for quicker navigation among the different textel presets.SHIFT + WASD
(upper case) keys : scrolls the texture page-wise.- Space : enter selected textel preset under cursor.
Z
: undo.SHIFT + Z
: redo.C
: clear textel under cursor.V
: toggle drawing of vertical coordinates.H
: toggle drawing of horizontal coordinates.SHIFT + V
: toggle drawing of vertical guide line from the horizontal coordinate axis.SHIFT + H
: toggle drawing of horizontal guide line from the vertical coordinate axis.-
: toggle hide/show textel presets menu.X
: export (save) work to current file.B
: brush-stroke. Forms a circle, filled with the currently selected textel preset.SHIFT + B
: big brush-stroke.R
: randomized brush-stroke. Same as theB
key, but fills the circle with textels according to a normal random distribution. You can re-generate until you get the desired result.SHIFT + R
: randomized big brush-stroke. Same as theSHIFT + B
key, but fills the circle with textels according to a normal random distribution. You can re-generate until you get the desired result.F
: fill screen. Fills the texture with the currently selected textel preset where the bounding box of the screen is currently located over the texture.P
: pick a textel from under the cursor and hilite the corresponding preset in the menu.L
: show location of cursor.G
: goto new cursor location. Press backspace to clear the last digit, press tab to toggle between R and C coordinate fields and press enter to confirm. PressingG
again toggles the input box.T
: toggle show/hide of tracing texture.I
: toggle inverted textels (i.e. toggle between dark and bright textel presets).M
: toggle show/hide of material id:s.Q
: quit.
Add a file named custom_textel_presets
.
The file format looks like this:
'<normal-char>', <normal-fg-color>, <normal-bg-color>, <normal-material>
'<shadow-char>', <shadow-fg-color>, <shadow-bg-color>, <shadow-material>
<textel-preset-name>
'<normal-char>', <normal-fg-color>, <normal-bg-color>, <normal-material>
'<shadow-char>', <shadow-fg-color>, <shadow-bg-color>, <shadow-material>
<textel-preset-name>
...etc...
So e.g.
'%', Magenta, Cyan, 28
'%', DarkMagenta, DarkCyan, 28
Magic Stone
produces the following textel preset at the end of the list:
![image](https://private-user-images.githubusercontent.com/32767250/348466303-30343240-befd-4242-a60c-1cbe4f72b992.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzYyNjEsIm5iZiI6MTczOTU3NTk2MSwicGF0aCI6Ii8zMjc2NzI1MC8zNDg0NjYzMDMtMzAzNDMyNDAtYmVmZC00MjQyLWE2MGMtMWNiZTRmNzJiOTkyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIzMzI0MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTBkM2Y1ODJkNmIzYTNhMDkxNTgxN2E1YTExYmVmZjU4M2VmYzUxNzgwZWM5MzA5NzJlZjJhZDdhY2E1OGIzNWQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.mWWzprwNrgHqtVYJO0xxPM_aJYczWa_IEBMawbkakLA)
Look in the source code for which material number that is appropriate to use for your custom presets.
![image](https://private-user-images.githubusercontent.com/32767250/347116981-1628f6b5-0956-4c56-b307-13a5a4dea5e7.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzYyNjEsIm5iZiI6MTczOTU3NTk2MSwicGF0aCI6Ii8zMjc2NzI1MC8zNDcxMTY5ODEtMTYyOGY2YjUtMDk1Ni00YzU2LWIzMDctMTNhNWE0ZGVhNWU3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIzMzI0MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWMxZjI3ZTNkNTczMzY2YjI0Yzc5OTEzN2JlZGJmNWYxMTNjMjAxZDRmNzc0NjcxMzU2NGY5MGRiYzhlOWQ1ZTgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.Myj8IkfJ0EA-zxHRrB3D_29ze6DkyeIoY0_CFHqs3gU)
![image](https://private-user-images.githubusercontent.com/32767250/347169443-a8bf9850-5499-49fe-8aea-a98cd00f0f01.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzYyNjEsIm5iZiI6MTczOTU3NTk2MSwicGF0aCI6Ii8zMjc2NzI1MC8zNDcxNjk0NDMtYThiZjk4NTAtNTQ5OS00OWZlLThhZWEtYTk4Y2QwMGYwZjAxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIzMzI0MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTY3YTdiNjczMGViMjUyYjcxZjZiNTVjOGY3MzFjNWFkYzczMmE2ZmZmZDc4ZTQ0Y2E1MDNkMzUwNmE1NWFmNmYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.GqOg9H6RBX5km5u263pavDZtL4KwNc72ejDyvxaSfIc)
![image](https://private-user-images.githubusercontent.com/32767250/348250761-a33490ae-3921-431d-8d15-477f2566b279.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzYyNjEsIm5iZiI6MTczOTU3NTk2MSwicGF0aCI6Ii8zMjc2NzI1MC8zNDgyNTA3NjEtYTMzNDkwYWUtMzkyMS00MzFkLThkMTUtNDc3ZjI1NjZiMjc5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIzMzI0MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWM1NjY5YjNjMTA1N2Y3ZDM5ZWI4YmY1NzAxMDI2MzYwZWFkZmYwNGE5MzdhNDIyZmE3Y2Y0OTEwMThhZDgwMjAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.jwCp4EM9pDMnqgtEWKN5PsMXNG4_Qb7l1rIUkKbhRe4)
![image](https://private-user-images.githubusercontent.com/32767250/348469479-622e7c0d-a166-4bea-be0a-f348bdb58fb2.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzYyNjEsIm5iZiI6MTczOTU3NTk2MSwicGF0aCI6Ii8zMjc2NzI1MC8zNDg0Njk0NzktNjIyZTdjMGQtYTE2Ni00YmVhLWJlMGEtZjM0OGJkYjU4ZmIyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIzMzI0MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTFhODgwMWE4ZDFhM2ZjNmQxZjBjMTU3MmRiMTVkN2FhNjU3ZWY1YTZhNDE5MjJjMzg4YWE5YTgxNzMyYmU1ZGEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.H8ePjaA6gNMBj3xu9s7GvY8eFqbxeMLnaV3OS2F1hEM)
![image](https://private-user-images.githubusercontent.com/32767250/348251007-0286226c-a18c-48b6-98d3-adc183e51bc2.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzYyNjEsIm5iZiI6MTczOTU3NTk2MSwicGF0aCI6Ii8zMjc2NzI1MC8zNDgyNTEwMDctMDI4NjIyNmMtYTE4Yy00OGI2LTk4ZDMtYWRjMTgzZTUxYmMyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIzMzI0MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTA4MTJhN2MzMTgyMzU0MDNhYzFiYTNkOTcyOWJmMjgwYjhiNDhhYmMyMmQ3ZjEzNTk1ZWIxODkxM2NjOGNjZjUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.4b8RS_TWPzVDzEmn5CIvVFLF-s313nTHddnqB_8_AYc)
![image](https://private-user-images.githubusercontent.com/32767250/348253649-18ddb12d-acec-476d-81f8-6798624ede9d.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzYyNjEsIm5iZiI6MTczOTU3NTk2MSwicGF0aCI6Ii8zMjc2NzI1MC8zNDgyNTM2NDktMThkZGIxMmQtYWNlYy00NzZkLTgxZjgtNjc5ODYyNGVkZTlkLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIzMzI0MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWY0OGFhNWNjZDNmNmNiYTBiNDM2ZTcwNjgwYjczN2UwM2Q4Yzg4Y2U3M2MzODYzNzBlNmVmOGY4NWZhMzE3NTkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.sVByy64A69mxT9ziYbTcp6yBXYjzyQFZS-rlEjzlyIA)
![image](https://private-user-images.githubusercontent.com/32767250/348457402-eee16100-d7f4-4ea5-936b-1826b185a6e3.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzYyNjEsIm5iZiI6MTczOTU3NTk2MSwicGF0aCI6Ii8zMjc2NzI1MC8zNDg0NTc0MDItZWVlMTYxMDAtZDdmNC00ZWE1LTkzNmItMTgyNmIxODVhNmUzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIzMzI0MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWE1MjgxZjM4NmIwMDk4MzY2YThhMDgzYjg3YzVjM2E0ZDJkMDM0ZmQ5YWIxZGNhNDQ3OWIyOWI2NDAzMDA5NzEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.52xl0FzmxAfImWC0Hy9pfQWz8fp3JmJXzABXqG46TJ8)
![image](https://private-user-images.githubusercontent.com/32767250/348253723-4d79d619-63f6-435b-a2c4-3477006c7980.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzYyNjEsIm5iZiI6MTczOTU3NTk2MSwicGF0aCI6Ii8zMjc2NzI1MC8zNDgyNTM3MjMtNGQ3OWQ2MTktNjNmNi00MzViLWEyYzQtMzQ3NzAwNmM3OTgwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIzMzI0MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTE2M2M2OWRmZTY2YWM0NDI4OTFkYzdhNzA3MjI3NWI1YzBlZTc0Y2Q5YmUzM2ExODU5Zjk1OWMxZWJjMzMxZTYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.ou1G72i6AZ9yagP_ecWqQ-zddAKTSkxYP8UKp85Eb4c)
![image](https://private-user-images.githubusercontent.com/32767250/348457480-cdbd8aa9-40ab-4eaa-85f5-73f864206e4b.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzYyNjEsIm5iZiI6MTczOTU3NTk2MSwicGF0aCI6Ii8zMjc2NzI1MC8zNDg0NTc0ODAtY2RiZDhhYTktNDBhYi00ZWFhLTg1ZjUtNzNmODY0MjA2ZTRiLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIzMzI0MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWE0Zjk3YmZkMmI3NWI3ZjIxYTk1ZDEyYzc2YmM0OGE2Y2E4ZTFhMzVjMDAyMWU0ODU1YzcyY2M1ZTIxZDEzYmEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.0HDHutjbff9mwn5tK58Lh6RZsp9KkRgmf22JJnbWtqg)
Bright mode textels (normal mode):
![image](https://private-user-images.githubusercontent.com/32767250/348254075-71eac9f5-a9d2-4c61-a6c4-b4bbaea4ea02.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzYyNjEsIm5iZiI6MTczOTU3NTk2MSwicGF0aCI6Ii8zMjc2NzI1MC8zNDgyNTQwNzUtNzFlYWM5ZjUtYTlkMi00YzYxLWE2YzQtYjRiYmFlYTRlYTAyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIzMzI0MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTcwNDcxNjUxY2JhMTU1ODM3MjgwOTE3OTMzY2VmYmE5MTFiNzIxOTdjMzA4MmMzMGQ4YjY1ZWVkZDIzYTExYmQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.45igTS1AiuZ-JbZILLZU0hjUqvfcILyvYZBpGd5t5m0)
Dark mode textels (shadow mode):
![image](https://private-user-images.githubusercontent.com/32767250/348254128-dc68fc8a-bb14-45b6-8c4f-f701034ffc37.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzYyNjEsIm5iZiI6MTczOTU3NTk2MSwicGF0aCI6Ii8zMjc2NzI1MC8zNDgyNTQxMjgtZGM2OGZjOGEtYmIxNC00NWI2LThjNGYtZjcwMTAzNGZmYzM3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIzMzI0MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTA1M2FjMmUzN2E5YjdhOTBlMTExN2U0Yzk5NDdhMjZiYmQwZWNjNjUxNjMxZmFmNDA1OThiNThjY2QwMWExZGImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.kCcLKPTtPp1LkBXN4s58qvLJr3OdNBJMOtrav0_B8ms)
Dark mode texture (shadow texture):
![image](https://private-user-images.githubusercontent.com/32767250/348457057-ad90f507-8797-45ac-8781-47be1ed6ecdc.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzYyNjEsIm5iZiI6MTczOTU3NTk2MSwicGF0aCI6Ii8zMjc2NzI1MC8zNDg0NTcwNTctYWQ5MGY1MDctODc5Ny00NWFjLTg3ODEtNDdiZTFlZDZlY2RjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIzMzI0MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWFhMzJkODE4Mzg4MmMyZGFmYzE0YWQ5ODcxODVkODVlNjIyODRkNDQyYjM0NGI3MTcwMmU3MDMxNTgwNmUyYzcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.XYleeMdQf-ZQgXK93_VTwLfiPqLgLvZf1Z1P95PTSeA)
Unsaved changes indicator:
![image](https://private-user-images.githubusercontent.com/32767250/348457149-25d7d238-6d35-441e-96cd-463edf94973b.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzYyNjEsIm5iZiI6MTczOTU3NTk2MSwicGF0aCI6Ii8zMjc2NzI1MC8zNDg0NTcxNDktMjVkN2QyMzgtNmQzNS00NDFlLTk2Y2QtNDYzZWRmOTQ5NzNiLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIzMzI0MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWUyMzRlNGQ3MGNkOWJjMDgwYjIzYTUwNTk0ZTIxZWM5Mzc5MjE2NzhmYTZmODJmNTBjZTU5ZDAwYTI3N2Q1ZTUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.6PEyFc-6Ze6U2koMywujllTOmvFpSEDDxgb3XtruGc4)
Confirmation screen for attempting to quit while there are unsaved changes:
![image](https://private-user-images.githubusercontent.com/32767250/348457298-1b5e0b9a-41c8-4098-a0b0-77771cf32456.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzYyNjEsIm5iZiI6MTczOTU3NTk2MSwicGF0aCI6Ii8zMjc2NzI1MC8zNDg0NTcyOTgtMWI1ZTBiOWEtNDFjOC00MDk4LWEwYjAtNzc3NzFjZjMyNDU2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIzMzI0MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTI2NGQ1YWUwOTIxZWYyMTYzY2MxZGYyZGQ3OTU5YjBmYmE0ZGVlOWEyNWI1ZmJmMWYxZjZhMmZjZmQ1NjJhMmMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.2JbMepnQH4KeHKhF_BQq2H0lr_BoF9B6eOGJmvnzwqk)
Custom textel "Magic Stone":
![image](https://private-user-images.githubusercontent.com/32767250/348466303-30343240-befd-4242-a60c-1cbe4f72b992.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzYyNjEsIm5iZiI6MTczOTU3NTk2MSwicGF0aCI6Ii8zMjc2NzI1MC8zNDg0NjYzMDMtMzAzNDMyNDAtYmVmZC00MjQyLWE2MGMtMWNiZTRmNzJiOTkyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIzMzI0MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTBkM2Y1ODJkNmIzYTNhMDkxNTgxN2E1YTExYmVmZjU4M2VmYzUxNzgwZWM5MzA5NzJlZjJhZDdhY2E1OGIzNWQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.mWWzprwNrgHqtVYJO0xxPM_aJYczWa_IEBMawbkakLA)
- Small brush stroke using
B
key (upper left corner). - Big brush stroke using
SHIFT + B
key (lower left corner). - Small randomized brush stroke using
R
key (upper right corner). - Big randomized brush stroke using
SHIFT + R
key (lower right corner).
![image](https://private-user-images.githubusercontent.com/32767250/348563921-f91f3af1-dec0-4cf3-bf25-1af7567f3d99.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzYyNjEsIm5iZiI6MTczOTU3NTk2MSwicGF0aCI6Ii8zMjc2NzI1MC8zNDg1NjM5MjEtZjkxZjNhZjEtZGVjMC00Y2YzLWJmMjUtMWFmNzU2N2YzZDk5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIzMzI0MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWZiNWY1YTI4OGVlMjBiYzJhMTI5ZTc3YWQzOGY1MGZjMzI3Y2NhMDBhMTA2N2M1YzUyNDMwOGQ2NDg4YmVmNzAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.3qfJqTDj8Pzb5KznEUy4dVGpK1GyD1_EuTvkkI8s5Yk)
There are two options on dealing with repo dependencies:
This method will ensure that you are running the latest stable versions of the dependencies that work with TextUR
.
The script fetch-dependencies.py
used for this was created by Thibaut Buchert.
fetch-dependencies.py
is used in the following scripts below:
After a successful build, the scripts will then prompt you with the question if you want to run the program (it will be run with a demo texture).
When the script has been successfully run for the first time, you can then go to sub-folder TextUR
and use the build.sh
/ build.bat
script instead.
Run the following script:
setup_and_build.bat
Run the following script:
setup_and_build.sh
In this method we basically outline the things done in the setup_and_build
-scripts in Option 1.
This method is more suitable for development as we're not necessarily working with "locked" dependencies.
You need the following header-only libraries:
- https://github.com/razterizer/Core
- https://github.com/razterizer/Termin8or
Make sure the folder structure looks like this:
<my_source_code_dir>/lib/Core/ ; Core repo workspace/checkout goes here.
<my_source_code_dir>/lib/Termin8or/ ; Termin8or repo workspace/checkout goes here.
<my_source_code_dir>TextUR/ ; TextUR repo workspace/checkout goes here.
These repos are not guaranteed to all the time work with the latest version of TextUR
. If you want the more stable aproach then look at Option 1 instead.
Then just open <my_source_code_dir>/TextUR/TextUR/TextUR.sln
and build and run. That's it!
You can also build it by going to <my_source_code_dir>/TextUR/TextUR/
and build with build.bat
.
Then you run by typing x64\Release\textur
followed by the appropriate command line arguments.
Goto <my_source_code_dir>/TextUR/TextUR/
and build with ./build.sh
.
Then run by typing ./bin/textur
and apply the appropriate command line arguments (see beginning of README.md).