2024-08-02 13:50:36 +02:00
|
|
|
import os
|
|
|
|
import glob
|
|
|
|
import shutil
|
|
|
|
from pathlib import Path
|
|
|
|
|
|
|
|
# Simple Script to generate/update Shaders
|
|
|
|
# WHY? Cause having this stupid .v.pica files in
|
|
|
|
# sourcecode is pain with some buildsystems
|
|
|
|
|
2025-01-09 20:22:49 +01:00
|
|
|
license_text = """
|
|
|
|
/*
|
|
|
|
MIT License
|
|
|
|
|
|
|
|
Copyright (c) 2024 tobid7
|
|
|
|
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
|
|
of this software and associated documentation files (the "Software"), to deal
|
|
|
|
in the Software without restriction, including without limitation the rights
|
|
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
|
|
copies of the Software, and to permit persons to whom the Software is
|
|
|
|
furnished to do so, subject to the following conditions:
|
|
|
|
|
|
|
|
The above copyright notice and this permission notice shall be included in all
|
|
|
|
copies or substantial portions of the Software.
|
|
|
|
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
|
|
SOFTWARE.
|
|
|
|
*/
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
2024-08-02 13:50:36 +02:00
|
|
|
def file2array(path, custom_incluse_path):
|
|
|
|
print(path)
|
|
|
|
cip = len(custom_incluse_path)
|
|
|
|
sip = ''
|
|
|
|
if cip > 0:
|
|
|
|
sip = custom_incluse_path
|
|
|
|
name = Path(path).stem
|
|
|
|
filei = open(path, 'rb')
|
|
|
|
buf = filei.read()
|
|
|
|
filei.close()
|
|
|
|
fs = open(name + '.cpp', 'w')
|
2025-01-09 20:22:49 +01:00
|
|
|
fs.write("// THIS FILE WAS GENERATED BY build_shaders.py!!!\n")
|
|
|
|
fs.write(license_text)
|
2024-08-02 13:50:36 +02:00
|
|
|
fs.write('#include <'+ sip + name + '.hpp>\n\n')
|
|
|
|
fs.write('// clang-format off\n')
|
|
|
|
fs.write('unsigned char ' + name + '[] = {\n')
|
|
|
|
for byte in buf:
|
|
|
|
fs.write(hex(byte) + ', ')
|
|
|
|
fs.write('\n};\n')
|
|
|
|
fs.write('// clang-format on\n')
|
|
|
|
fs.write('size_t ' + name + '_size = ' + hex(len(buf)) + ';')
|
|
|
|
fs.close()
|
|
|
|
fh = open(name + '.hpp', 'w')
|
2025-01-09 20:22:49 +01:00
|
|
|
fh.write("// THIS FILE WAS GENERATED BY build_shaders.py!!!\n")
|
|
|
|
fh.write('#pragma once\n')
|
|
|
|
fh.write(license_text)
|
2024-08-02 13:50:36 +02:00
|
|
|
fh.write('#include <cstddef>\n\n')
|
|
|
|
fh.write('extern unsigned char ' + name + '[];\n')
|
|
|
|
fh.write('extern size_t ' + name + '_size;')
|
|
|
|
fh.close()
|
|
|
|
|
|
|
|
def build_shader(path):
|
|
|
|
p = os.path.dirname(path)
|
|
|
|
n = Path(Path(path).stem).stem
|
|
|
|
os.system('picasso -o ' + p + '/' + n + '.shbin ' + path)
|
|
|
|
|
|
|
|
def cleanup():
|
|
|
|
t3x = glob.glob('shaders/*.shbin')
|
|
|
|
for f in t3x:
|
|
|
|
os.remove(f)
|
|
|
|
|
|
|
|
def install_code(what, where):
|
|
|
|
if Path(what).is_dir:
|
|
|
|
os.error('Must be a file!!!')
|
|
|
|
shutil.move(what, where + Path(what).name)
|
|
|
|
|
|
|
|
print("Generating...")
|
|
|
|
shaders = glob.glob('shaders/*v.pica')
|
|
|
|
for object in shaders:
|
|
|
|
name = Path(Path(object).stem).stem
|
|
|
|
bp = os.path.dirname(object)
|
|
|
|
build_shader(object)
|
2025-02-22 00:23:48 +01:00
|
|
|
file2array(bp + '/' + name + '.shbin', 'pd/lithium/')
|
|
|
|
install_code(name + '.cpp', 'source/lithium/')
|
|
|
|
install_code(name + '.hpp', 'include/pd/lithium/')
|
2024-08-02 13:50:36 +02:00
|
|
|
|
|
|
|
cleanup()
|
|
|
|
print("Done")
|