Add embedded assets, splash screens, and asset loading support
Features added: - Embedded main.lua and Lua files support (EMBED_MAIN option) - Embedded assets support (EMBED_ASSETS option) - Splash screens with dual logo display (always embedded) - Asset loading progress tracking API (BeginAssetLoading, UpdateAssetLoading, EndAssetLoading) - Custom font embedding for splash/loading screens - --log flag for Windows console control - --no-logo flag to skip splash screens in development - Python scripts for embedding (embed_lua.py, embed_assets.py, embed_logo.py, embed_font.py) - Documentation (EMBEDDING.md, ASSET_LOADING.md, SPLASH_SCREENS.md) This allows building single-executable releases with all Lua code and assets embedded.
This commit is contained in:
64
embed_logo.py
Normal file
64
embed_logo.py
Normal file
@@ -0,0 +1,64 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Embed logo image files into C header for splash screens.
|
||||
Usage: python embed_logo.py <output.h> <raylib_logo.png> <reilua_logo.png>
|
||||
"""
|
||||
|
||||
import sys
|
||||
import os
|
||||
|
||||
def embed_file(file_path, var_name):
|
||||
"""Convert a file to a C byte array"""
|
||||
with open(file_path, 'rb') as f:
|
||||
data = f.read()
|
||||
|
||||
output = f"/* {os.path.basename(file_path)} */\n"
|
||||
output += f"static const unsigned char {var_name}[] = {{\n"
|
||||
|
||||
# Write bytes in rows of 16
|
||||
for i in range(0, len(data), 16):
|
||||
chunk = data[i:i+16]
|
||||
hex_values = ', '.join(f'0x{b:02x}' for b in chunk)
|
||||
output += f" {hex_values},\n"
|
||||
|
||||
output += "};\n"
|
||||
output += f"static const unsigned int {var_name}_size = {len(data)};\n\n"
|
||||
|
||||
return output
|
||||
|
||||
def main():
|
||||
if len(sys.argv) != 4:
|
||||
print("Usage: python embed_logo.py <output.h> <raylib_logo.png> <reilua_logo.png>")
|
||||
sys.exit(1)
|
||||
|
||||
output_file = sys.argv[1]
|
||||
raylib_logo = sys.argv[2]
|
||||
reilua_logo = sys.argv[3]
|
||||
|
||||
# Check if files exist
|
||||
if not os.path.exists(raylib_logo):
|
||||
print(f"Error: {raylib_logo} not found!")
|
||||
sys.exit(1)
|
||||
|
||||
if not os.path.exists(reilua_logo):
|
||||
print(f"Error: {reilua_logo} not found!")
|
||||
sys.exit(1)
|
||||
|
||||
# Generate header content
|
||||
header_content = "/* Auto-generated embedded logo files */\n"
|
||||
header_content += "#pragma once\n\n"
|
||||
|
||||
# Embed both logo files
|
||||
header_content += embed_file(raylib_logo, "embedded_raylib_logo")
|
||||
header_content += embed_file(reilua_logo, "embedded_reilua_logo")
|
||||
|
||||
# Write to output file
|
||||
with open(output_file, 'w') as f:
|
||||
f.write(header_content)
|
||||
|
||||
print(f"Generated {output_file}")
|
||||
print(f" - Embedded {raylib_logo} ({os.path.getsize(raylib_logo)} bytes)")
|
||||
print(f" - Embedded {reilua_logo} ({os.path.getsize(reilua_logo)} bytes)")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user