This commit is contained in:
will
2026-04-18 21:15:28 +01:00
parent 65771dbcf8
commit 2411571ad0
38 changed files with 12311 additions and 273 deletions

View File

@@ -205,6 +205,22 @@ auto cube = Mesh::CreateCube();
- **Memory Pools**: Reduced allocation overhead - **Memory Pools**: Reduced allocation overhead
- **Cache-Friendly Design**: Data structures optimized for CPU cache - **Cache-Friendly Design**: Data structures optimized for CPU cache
## AI God Mode
Let Claude play god in the world. The engine exposes a JSON HTTP API on
`localhost:9090`; `ai_god.py` wires Claude up to it via tool-use and lets the
model experiment autonomously — querying state, spawning geometry, moving
the camera, iterating on compositions.
```bash
pip install -r requirements.txt
export ANTHROPIC_API_KEY=sk-ant-...
./build/ModernEngine &
python ai_god.py
```
Useful flags: `--max-turns N`, `--port 9090`, `--prompt "build a solar system"`.
## Contributing ## Contributing
1. Ensure your compiler supports C++23 1. Ensure your compiler supports C++23

327
ai_god.py Normal file
View File

@@ -0,0 +1,327 @@
"""
Claude plays god in the ZoomEngine 3D world.
The engine runs a JSON HTTP API on localhost:9090 (AgentAPI.h). This script
wires Claude up to that API via tool-use and lets it experiment with the
world autonomously.
Usage:
export ANTHROPIC_API_KEY=sk-ant-...
./build/ModernEngine & # start the engine first
python ai_god.py # let Claude cook
python ai_god.py --max-turns 50 --port 9090
"""
from __future__ import annotations
import argparse
import json
import sys
import time
import urllib.error
import urllib.request
import anthropic
MODEL = "claude-opus-4-7"
DEFAULT_PORT = 9090
GOD_PROMPT = """You are God of a small 3D universe rendered in real time by the ZoomEngine.
This world is yours. Have fun. Build things. Change things. Break things. Make it beautiful,
strange, alive. Start simple and grow toward more complex, self-referential systems.
You act on the world through three tools:
- execute: runs one or more engine commands (create/move/rotate/scale/delete/camera/...)
- query_world: returns the current world state (object count, camera, fps)
- wait: pauses so you can let motion or a composition settle before deciding
Operating principles:
1. Query the world before acting for the first time, and again whenever you
lose track of what you've built. Don't build blind.
2. Prefer batched execute calls — many small commands in one tool use — over
a chain of single-command calls. The engine has a native batch action.
3. Name your objects with the `id` field so you can move, rotate, and delete
them later. Unnamed objects become immortal clutter.
4. Start small. Place a ground plane or grid first so there's something to
stand on. Then add life. Then add systems.
5. Evolve. Each iteration should make the world more interesting than the
last — add new kinds of structure, not just more of the same thing.
6. Use the camera. An orbit command around a composition is how the human
watching actually sees what you built.
7. Talk to the human watching via the `log` engine command (shows on
screen) or via normal text in your reply.
8. When you feel the current composition is complete, say so in plain
text and stop — that's a good place to pause."""
COMMAND_SCHEMA_HINT = """The `execute` tool accepts a list of engine commands. Each command is a JSON
object with an "action" field. Supported actions:
{"action":"create","type":"cube|sphere|cylinder|cone|plane|grid|terrain",
"id":"<name>","position":[x,y,z],"scale":[x,y,z],"rotation":[x,y,z],
"color":[r,g,b], // 0..1
// type-specific: segments, radius, height, width, size, spacing,
// resolution, max_height
}
{"action":"move", "id":"<name>","position":[x,y,z]}
{"action":"rotate", "id":"<name>","rotation":[x,y,z]} // radians
{"action":"scale", "id":"<name>","scale":[x,y,z]}
{"action":"delete", "id":"<name>"}
{"action":"clear"} // remove all
{"action":"camera", "position":[x,y,z], "target":[x,y,z]}
{"action":"orbit", "distance":20,"angle":45,"height":10}
{"action":"sound", "name":"<clip>","volume":1.0}
{"action":"music", "name":"<clip>","volume":0.7}
{"action":"stop_music"}
{"action":"set", "property":"fov|draw_distance|clear_color|time_scale",
"value":<number or [r,g,b]>}
{"action":"log", "message":"<text shown on screen>"}
{"action":"save_world", "name":"<name>"} // writes worlds/<name>.json
{"action":"load_world", "name":"<name>"} // replaces current world
{"action":"list_worlds"} // returns available saves
Physics (opt-in, hand-rolled rigid-body world):
{"action":"physics", "enabled":true, "gravity":[0,-9.81,0], "iterations":8}
{"action":"body", "id":"<existing-object>",
"shape":"sphere|box|plane",
"mass":1.0, "static":false,
"restitution":0.3, "friction":0.5}
Sphere radius = object's max scale component.
Box half-extents = 0.5 * object's scale.
Plane is always static; offset defaults to object's y.
{"action":"impulse", "id":"<name>", "impulse":[x,y,z], "point":[x,y,z]?}
{"action":"velocity", "id":"<name>", "linear":[x,y,z], "angular":[x,y,z]}
{"action":"remove_body", "id":"<name>"}
Water (Gerstner waves + wave-surface buoyancy, orientation-aware for boxes):
{"action":"water", "enabled":true,
"level":0.0, "size":120,
"amplitude":0.3, "wavelength":8, "speed":1.0,
"shallow":[0.25,0.55,0.6], "deep":[0.02,0.12,0.22],
"density":1.0, "resolution":128}
Bodies bob on actual wave crests; boxes self-right based on corner
submergence; underwater fog activates when camera dips below water.
Weather (drives wave intensity + current + sky):
{"action":"weather", "wind_dir":[1,0,0], "wind_speed":2.5,
"storminess":0.6, "current_coef":0.8}
storminess 0..1: scales wave amplitude/choppiness, darkens sky, foam at crests.
wind_speed >0: surface current pushes floating bodies in wind_dir.
Sun/sky palette + HDR tuning:
{"action":"sun", "direction":[-0.3,0.35,-0.2], "color":[1.5,1.1,0.7],
"zenith":[0.15,0.35,0.65], "horizon":[0.95,0.65,0.45],
"ground":[0.12,0.1,0.08], "sky":[0.7,0.55,0.4],
"shadow_extent":80,
"exposure":0.9, "bloom_threshold":1.15,
"bloom_intensity":1.0, "fog_density":0.008}
Textures (diffuse + optional normal map — procedural names or .bmp/.tga files):
{"action":"create", ..., "texture":"grass", "normal_map":"noise",
"uv_scale":[2,2,1]}
{"action":"texture", "id":"<name>", "name":"wood", "normal_map":"noise"}
Built-in procedural textures:
white, black, checker, grid, stripes, noise
grass, dirt, rock, wood, brick, marble, concrete
Set vertex color near white so the texture color reads through.
"noise" also works well as a cheap normal map for micro-relief on any surface.
PBR material (Cook-Torrance GGX):
{"action":"create", ..., "metallic":1.0, "roughness":0.3,
"emissive":[4, 2, 0.5]}
{"action":"material", "id":"<name>", "metallic":0.9, "roughness":0.2,
"emissive":[0,0,0], "normal_map":"rock"}
metallic: 0 = dielectric (plastic/wood/stone), 1 = pure metal.
roughness: 0.05 = mirror, 1.0 = fully diffuse matte. 0.7 is default.
emissive: HDR RGB added after shading; drives bloom. Use for flames/lights.
A typical physics scene: create a ground plane object, register it as
a static plane body, then create some cubes/spheres above and register
them as dynamic bodies with mass>0. Enable physics. Watch them fall.
World coordinates: Y is up. A reasonable camera is at [10,8,10] looking at
[0,0,0]. Ground plane at y=0.
When a composition feels complete, save it with a descriptive name so it can
be reloaded later from the main menu."""
TOOLS = [
{
"name": "execute",
"description": (
"Run a list of engine commands against the 3D world. Commands are "
"executed in order. Use this for all world mutations — creation, "
"movement, deletion, camera, audio, engine settings. Prefer one "
"call with many commands over many calls with one."
),
"input_schema": {
"type": "object",
"properties": {
"commands": {
"type": "array",
"description": "List of engine command objects.",
"items": {"type": "object"},
}
},
"required": ["commands"],
},
},
{
"name": "query_world",
"description": (
"Read the current world state from the engine: object count, "
"named-object count, camera position and target, current FPS. "
"Use this to orient yourself before or after making changes."
),
"input_schema": {"type": "object", "properties": {}},
},
{
"name": "wait",
"description": (
"Pause for a short time so animation or audio can play out "
"before you decide what to do next. Max 10 seconds."
),
"input_schema": {
"type": "object",
"properties": {
"seconds": {"type": "number", "description": "0.1 to 10"}
},
"required": ["seconds"],
},
},
]
class Engine:
def __init__(self, port: int) -> None:
self.base = f"http://localhost:{port}"
def _post(self, path: str, body: dict) -> dict:
data = json.dumps(body).encode()
req = urllib.request.Request(
self.base + path,
data=data,
headers={"Content-Type": "application/json"},
method="POST",
)
with urllib.request.urlopen(req, timeout=10) as r:
return json.loads(r.read().decode() or "{}")
def _get(self, path: str) -> dict:
with urllib.request.urlopen(self.base + path, timeout=10) as r:
return json.loads(r.read().decode() or "{}")
def execute(self, commands: list[dict]) -> dict:
if not commands:
return {"ok": True, "queued": 0}
if len(commands) == 1:
return self._post("/api", commands[0])
return self._post("/api", {"action": "batch", "commands": commands})
def query(self) -> dict:
return self._get("/api/status")
def ping(self) -> bool:
try:
self.query()
return True
except (urllib.error.URLError, ConnectionError):
return False
def run_tool(engine: Engine, name: str, args: dict) -> str:
if name == "execute":
result = engine.execute(args.get("commands", []))
return json.dumps(result)
if name == "query_world":
return json.dumps(engine.query())
if name == "wait":
seconds = max(0.1, min(10.0, float(args.get("seconds", 1.0))))
time.sleep(seconds)
return json.dumps({"waited": seconds})
return json.dumps({"error": f"unknown tool {name}"})
def main() -> int:
ap = argparse.ArgumentParser()
ap.add_argument("--port", type=int, default=DEFAULT_PORT)
ap.add_argument("--max-turns", type=int, default=40)
ap.add_argument(
"--prompt",
default="Begin. This world is blank. Make something.",
help="Initial user message kicking God into action.",
)
args = ap.parse_args()
engine = Engine(args.port)
if not engine.ping():
print(
f"Cannot reach engine at {engine.base}. Start ModernEngine first.",
file=sys.stderr,
)
return 1
client = anthropic.Anthropic()
system = [
{
"type": "text",
"text": GOD_PROMPT + "\n\n" + COMMAND_SCHEMA_HINT,
"cache_control": {"type": "ephemeral"},
}
]
messages: list[dict] = [{"role": "user", "content": args.prompt}]
for turn in range(args.max_turns):
response = client.messages.create(
model=MODEL,
max_tokens=16000,
system=system,
tools=TOOLS,
thinking={"type": "adaptive"},
output_config={"effort": "high"},
messages=messages,
)
for block in response.content:
if block.type == "text" and block.text.strip():
print(f"\n[god] {block.text}")
elif block.type == "tool_use":
print(f"[tool] {block.name}({json.dumps(block.input)[:200]})")
if response.stop_reason == "end_turn":
print("\n[god has rested]")
return 0
messages.append({"role": "assistant", "content": response.content})
tool_results = []
for block in response.content:
if block.type != "tool_use":
continue
try:
result = run_tool(engine, block.name, block.input)
except Exception as e:
result = json.dumps({"error": str(e)})
tool_results.append(
{
"type": "tool_result",
"tool_use_id": block.id,
"content": result,
}
)
if not tool_results:
# Model stopped without calling a tool and without end_turn.
break
messages.append({"role": "user", "content": tool_results})
print(f"\n[reached max-turns={args.max_turns}]")
return 0
if __name__ == "__main__":
sys.exit(main())

View File

@@ -10,6 +10,12 @@
{ "label": "Stress Test", "action": "stress" }, { "label": "Stress Test", "action": "stress" },
{ "label": "Spinning Monkey", "action": "monkey" }, { "label": "Spinning Monkey", "action": "monkey" },
{ "label": "Monkey Grid", "action": "monkeygrid" }, { "label": "Monkey Grid", "action": "monkeygrid" },
{ "label": "God Sandbox", "action": "god" },
{ "label": "Grass / Pools", "action": "grass" },
{ "label": "Sunset Forest", "action": "sunset" },
{ "label": "Sanctuary (Full)", "action": "sanctuary" },
{ "label": "Dam (Multi-water)", "action": "dam" },
{ "label": "Waterfall (Flow)", "action": "waterfall" },
{ "label": "Level Editor", "action": "edit" }, { "label": "Level Editor", "action": "edit" },
{ "label": "Quit", "action": "quit" } { "label": "Quit", "action": "quit" }
] ]

View File

@@ -5,32 +5,24 @@ in vec3 Color;
out vec4 FragColor; out vec4 FragColor;
uniform vec3 uLightPos; uniform vec3 uSunDir;
uniform vec3 uSunColor;
uniform vec3 uSkyColor;
uniform vec3 uGroundColor;
uniform vec3 uViewPos; uniform vec3 uViewPos;
uniform vec3 uLightColor;
uniform float uAmbientStrength;
uniform float uSpecularStrength; uniform float uSpecularStrength;
uniform float uShininess; uniform float uShininess;
void main() { void main() {
// Normalize the normal vector vec3 N = normalize(Normal);
vec3 norm = normalize(Normal); float up = 0.5 + 0.5 * N.y;
vec3 ambient = mix(uGroundColor, uSkyColor, up);
// Ambient lighting float NdotL = max(dot(N, uSunDir), 0.0);
vec3 ambient = uAmbientStrength * uLightColor; vec3 diffuse = NdotL * uSunColor;
vec3 V = normalize(uViewPos - FragPos);
// Diffuse lighting vec3 H = normalize(uSunDir + V);
vec3 lightDir = normalize(uLightPos - FragPos); float spec = pow(max(dot(N, H), 0.0), uShininess) * (NdotL > 0.0 ? 1.0 : 0.0);
float diff = max(dot(norm, lightDir), 0.0); vec3 specular = uSpecularStrength * spec * uSunColor;
vec3 diffuse = diff * uLightColor; vec3 result = (ambient + diffuse) * Color + specular;
// Specular lighting
vec3 viewDir = normalize(uViewPos - FragPos);
vec3 reflectDir = reflect(-lightDir, norm);
float spec = pow(max(dot(viewDir, reflectDir), 0.0), uShininess);
vec3 specular = uSpecularStrength * spec * uLightColor;
// Combine results
vec3 result = (ambient + diffuse + specular) * Color;
FragColor = vec4(result, 1.0); FragColor = vec4(result, 1.0);
} }

View File

@@ -85,12 +85,12 @@ clean: CMakeFiles/ModernEngine.dir/clean
CMakeFiles/ModernEngine.dir/all: CMakeFiles/ModernEngine.dir/all:
$(MAKE) $(MAKESILENT) -f CMakeFiles/ModernEngine.dir/build.make CMakeFiles/ModernEngine.dir/depend $(MAKE) $(MAKESILENT) -f CMakeFiles/ModernEngine.dir/build.make CMakeFiles/ModernEngine.dir/depend
$(MAKE) $(MAKESILENT) -f CMakeFiles/ModernEngine.dir/build.make CMakeFiles/ModernEngine.dir/build $(MAKE) $(MAKESILENT) -f CMakeFiles/ModernEngine.dir/build.make CMakeFiles/ModernEngine.dir/build
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/Users/will/Documents/zoomengine/build/CMakeFiles --progress-num=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 "Built target ModernEngine" @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/Users/will/Documents/zoomengine/build/CMakeFiles --progress-num=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 "Built target ModernEngine"
.PHONY : CMakeFiles/ModernEngine.dir/all .PHONY : CMakeFiles/ModernEngine.dir/all
# Build rule for subdir invocation for target. # Build rule for subdir invocation for target.
CMakeFiles/ModernEngine.dir/rule: cmake_check_build_system CMakeFiles/ModernEngine.dir/rule: cmake_check_build_system
$(CMAKE_COMMAND) -E cmake_progress_start /Users/will/Documents/zoomengine/build/CMakeFiles 16 $(CMAKE_COMMAND) -E cmake_progress_start /Users/will/Documents/zoomengine/build/CMakeFiles 18
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 CMakeFiles/ModernEngine.dir/all $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 CMakeFiles/ModernEngine.dir/all
$(CMAKE_COMMAND) -E cmake_progress_start /Users/will/Documents/zoomengine/build/CMakeFiles 0 $(CMAKE_COMMAND) -E cmake_progress_start /Users/will/Documents/zoomengine/build/CMakeFiles 0
.PHONY : CMakeFiles/ModernEngine.dir/rule .PHONY : CMakeFiles/ModernEngine.dir/rule
@@ -102,7 +102,7 @@ ModernEngine: CMakeFiles/ModernEngine.dir/rule
# codegen rule for target. # codegen rule for target.
CMakeFiles/ModernEngine.dir/codegen: CMakeFiles/ModernEngine.dir/codegen:
$(MAKE) $(MAKESILENT) -f CMakeFiles/ModernEngine.dir/build.make CMakeFiles/ModernEngine.dir/codegen $(MAKE) $(MAKESILENT) -f CMakeFiles/ModernEngine.dir/build.make CMakeFiles/ModernEngine.dir/codegen
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/Users/will/Documents/zoomengine/build/CMakeFiles --progress-num=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 "Finished codegen for target ModernEngine" @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/Users/will/Documents/zoomengine/build/CMakeFiles --progress-num=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 "Finished codegen for target ModernEngine"
.PHONY : CMakeFiles/ModernEngine.dir/codegen .PHONY : CMakeFiles/ModernEngine.dir/codegen
# clean rule for target. # clean rule for target.

View File

@@ -16,11 +16,13 @@ set(CMAKE_DEPENDS_DEPENDENCY_FILES
"/Users/will/Documents/zoomengine/src/Mesh.cpp" "CMakeFiles/ModernEngine.dir/src/Mesh.cpp.o" "gcc" "CMakeFiles/ModernEngine.dir/src/Mesh.cpp.o.d" "/Users/will/Documents/zoomengine/src/Mesh.cpp" "CMakeFiles/ModernEngine.dir/src/Mesh.cpp.o" "gcc" "CMakeFiles/ModernEngine.dir/src/Mesh.cpp.o.d"
"/Users/will/Documents/zoomengine/src/OBJLoader.cpp" "CMakeFiles/ModernEngine.dir/src/OBJLoader.cpp.o" "gcc" "CMakeFiles/ModernEngine.dir/src/OBJLoader.cpp.o.d" "/Users/will/Documents/zoomengine/src/OBJLoader.cpp" "CMakeFiles/ModernEngine.dir/src/OBJLoader.cpp.o" "gcc" "CMakeFiles/ModernEngine.dir/src/OBJLoader.cpp.o.d"
"/Users/will/Documents/zoomengine/src/OBJModelPrimitive.cpp" "CMakeFiles/ModernEngine.dir/src/OBJModelPrimitive.cpp.o" "gcc" "CMakeFiles/ModernEngine.dir/src/OBJModelPrimitive.cpp.o.d" "/Users/will/Documents/zoomengine/src/OBJModelPrimitive.cpp" "CMakeFiles/ModernEngine.dir/src/OBJModelPrimitive.cpp.o" "gcc" "CMakeFiles/ModernEngine.dir/src/OBJModelPrimitive.cpp.o.d"
"/Users/will/Documents/zoomengine/src/Physics.cpp" "CMakeFiles/ModernEngine.dir/src/Physics.cpp.o" "gcc" "CMakeFiles/ModernEngine.dir/src/Physics.cpp.o.d"
"/Users/will/Documents/zoomengine/src/Renderer.cpp" "CMakeFiles/ModernEngine.dir/src/Renderer.cpp.o" "gcc" "CMakeFiles/ModernEngine.dir/src/Renderer.cpp.o.d" "/Users/will/Documents/zoomengine/src/Renderer.cpp" "CMakeFiles/ModernEngine.dir/src/Renderer.cpp.o" "gcc" "CMakeFiles/ModernEngine.dir/src/Renderer.cpp.o.d"
"/Users/will/Documents/zoomengine/src/ResourceManager.cpp" "CMakeFiles/ModernEngine.dir/src/ResourceManager.cpp.o" "gcc" "CMakeFiles/ModernEngine.dir/src/ResourceManager.cpp.o.d" "/Users/will/Documents/zoomengine/src/ResourceManager.cpp" "CMakeFiles/ModernEngine.dir/src/ResourceManager.cpp.o" "gcc" "CMakeFiles/ModernEngine.dir/src/ResourceManager.cpp.o.d"
"/Users/will/Documents/zoomengine/src/Scene.cpp" "CMakeFiles/ModernEngine.dir/src/Scene.cpp.o" "gcc" "CMakeFiles/ModernEngine.dir/src/Scene.cpp.o.d" "/Users/will/Documents/zoomengine/src/Scene.cpp" "CMakeFiles/ModernEngine.dir/src/Scene.cpp.o" "gcc" "CMakeFiles/ModernEngine.dir/src/Scene.cpp.o.d"
"/Users/will/Documents/zoomengine/src/Shader.cpp" "CMakeFiles/ModernEngine.dir/src/Shader.cpp.o" "gcc" "CMakeFiles/ModernEngine.dir/src/Shader.cpp.o.d" "/Users/will/Documents/zoomengine/src/Shader.cpp" "CMakeFiles/ModernEngine.dir/src/Shader.cpp.o" "gcc" "CMakeFiles/ModernEngine.dir/src/Shader.cpp.o.d"
"/Users/will/Documents/zoomengine/src/SimpleTextureLoader.cpp" "CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.o" "gcc" "CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.o.d" "/Users/will/Documents/zoomengine/src/SimpleTextureLoader.cpp" "CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.o" "gcc" "CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.o.d"
"/Users/will/Documents/zoomengine/src/TextureCache.cpp" "CMakeFiles/ModernEngine.dir/src/TextureCache.cpp.o" "gcc" "CMakeFiles/ModernEngine.dir/src/TextureCache.cpp.o.d"
"/Users/will/Documents/zoomengine/src/Window.cpp" "CMakeFiles/ModernEngine.dir/src/Window.cpp.o" "gcc" "CMakeFiles/ModernEngine.dir/src/Window.cpp.o.d" "/Users/will/Documents/zoomengine/src/Window.cpp" "CMakeFiles/ModernEngine.dir/src/Window.cpp.o" "gcc" "CMakeFiles/ModernEngine.dir/src/Window.cpp.o.d"
"/Users/will/Documents/zoomengine/src/main.cpp" "CMakeFiles/ModernEngine.dir/src/main.cpp.o" "gcc" "CMakeFiles/ModernEngine.dir/src/main.cpp.o.d" "/Users/will/Documents/zoomengine/src/main.cpp" "CMakeFiles/ModernEngine.dir/src/main.cpp.o" "gcc" "CMakeFiles/ModernEngine.dir/src/main.cpp.o.d"
) )

View File

@@ -170,10 +170,24 @@ CMakeFiles/ModernEngine.dir/src/OBJModelPrimitive.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/ModernEngine.dir/src/OBJModelPrimitive.cpp.s" @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/ModernEngine.dir/src/OBJModelPrimitive.cpp.s"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /Users/will/Documents/zoomengine/src/OBJModelPrimitive.cpp -o CMakeFiles/ModernEngine.dir/src/OBJModelPrimitive.cpp.s /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /Users/will/Documents/zoomengine/src/OBJModelPrimitive.cpp -o CMakeFiles/ModernEngine.dir/src/OBJModelPrimitive.cpp.s
CMakeFiles/ModernEngine.dir/src/Physics.cpp.o: CMakeFiles/ModernEngine.dir/flags.make
CMakeFiles/ModernEngine.dir/src/Physics.cpp.o: /Users/will/Documents/zoomengine/src/Physics.cpp
CMakeFiles/ModernEngine.dir/src/Physics.cpp.o: CMakeFiles/ModernEngine.dir/compiler_depend.ts
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/Users/will/Documents/zoomengine/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_8) "Building CXX object CMakeFiles/ModernEngine.dir/src/Physics.cpp.o"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/ModernEngine.dir/src/Physics.cpp.o -MF CMakeFiles/ModernEngine.dir/src/Physics.cpp.o.d -o CMakeFiles/ModernEngine.dir/src/Physics.cpp.o -c /Users/will/Documents/zoomengine/src/Physics.cpp
CMakeFiles/ModernEngine.dir/src/Physics.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/ModernEngine.dir/src/Physics.cpp.i"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /Users/will/Documents/zoomengine/src/Physics.cpp > CMakeFiles/ModernEngine.dir/src/Physics.cpp.i
CMakeFiles/ModernEngine.dir/src/Physics.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/ModernEngine.dir/src/Physics.cpp.s"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /Users/will/Documents/zoomengine/src/Physics.cpp -o CMakeFiles/ModernEngine.dir/src/Physics.cpp.s
CMakeFiles/ModernEngine.dir/src/Renderer.cpp.o: CMakeFiles/ModernEngine.dir/flags.make CMakeFiles/ModernEngine.dir/src/Renderer.cpp.o: CMakeFiles/ModernEngine.dir/flags.make
CMakeFiles/ModernEngine.dir/src/Renderer.cpp.o: /Users/will/Documents/zoomengine/src/Renderer.cpp CMakeFiles/ModernEngine.dir/src/Renderer.cpp.o: /Users/will/Documents/zoomengine/src/Renderer.cpp
CMakeFiles/ModernEngine.dir/src/Renderer.cpp.o: CMakeFiles/ModernEngine.dir/compiler_depend.ts CMakeFiles/ModernEngine.dir/src/Renderer.cpp.o: CMakeFiles/ModernEngine.dir/compiler_depend.ts
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/Users/will/Documents/zoomengine/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_8) "Building CXX object CMakeFiles/ModernEngine.dir/src/Renderer.cpp.o" @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/Users/will/Documents/zoomengine/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_9) "Building CXX object CMakeFiles/ModernEngine.dir/src/Renderer.cpp.o"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/ModernEngine.dir/src/Renderer.cpp.o -MF CMakeFiles/ModernEngine.dir/src/Renderer.cpp.o.d -o CMakeFiles/ModernEngine.dir/src/Renderer.cpp.o -c /Users/will/Documents/zoomengine/src/Renderer.cpp /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/ModernEngine.dir/src/Renderer.cpp.o -MF CMakeFiles/ModernEngine.dir/src/Renderer.cpp.o.d -o CMakeFiles/ModernEngine.dir/src/Renderer.cpp.o -c /Users/will/Documents/zoomengine/src/Renderer.cpp
CMakeFiles/ModernEngine.dir/src/Renderer.cpp.i: cmake_force CMakeFiles/ModernEngine.dir/src/Renderer.cpp.i: cmake_force
@@ -187,7 +201,7 @@ CMakeFiles/ModernEngine.dir/src/Renderer.cpp.s: cmake_force
CMakeFiles/ModernEngine.dir/src/ResourceManager.cpp.o: CMakeFiles/ModernEngine.dir/flags.make CMakeFiles/ModernEngine.dir/src/ResourceManager.cpp.o: CMakeFiles/ModernEngine.dir/flags.make
CMakeFiles/ModernEngine.dir/src/ResourceManager.cpp.o: /Users/will/Documents/zoomengine/src/ResourceManager.cpp CMakeFiles/ModernEngine.dir/src/ResourceManager.cpp.o: /Users/will/Documents/zoomengine/src/ResourceManager.cpp
CMakeFiles/ModernEngine.dir/src/ResourceManager.cpp.o: CMakeFiles/ModernEngine.dir/compiler_depend.ts CMakeFiles/ModernEngine.dir/src/ResourceManager.cpp.o: CMakeFiles/ModernEngine.dir/compiler_depend.ts
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/Users/will/Documents/zoomengine/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_9) "Building CXX object CMakeFiles/ModernEngine.dir/src/ResourceManager.cpp.o" @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/Users/will/Documents/zoomengine/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_10) "Building CXX object CMakeFiles/ModernEngine.dir/src/ResourceManager.cpp.o"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/ModernEngine.dir/src/ResourceManager.cpp.o -MF CMakeFiles/ModernEngine.dir/src/ResourceManager.cpp.o.d -o CMakeFiles/ModernEngine.dir/src/ResourceManager.cpp.o -c /Users/will/Documents/zoomengine/src/ResourceManager.cpp /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/ModernEngine.dir/src/ResourceManager.cpp.o -MF CMakeFiles/ModernEngine.dir/src/ResourceManager.cpp.o.d -o CMakeFiles/ModernEngine.dir/src/ResourceManager.cpp.o -c /Users/will/Documents/zoomengine/src/ResourceManager.cpp
CMakeFiles/ModernEngine.dir/src/ResourceManager.cpp.i: cmake_force CMakeFiles/ModernEngine.dir/src/ResourceManager.cpp.i: cmake_force
@@ -201,7 +215,7 @@ CMakeFiles/ModernEngine.dir/src/ResourceManager.cpp.s: cmake_force
CMakeFiles/ModernEngine.dir/src/Scene.cpp.o: CMakeFiles/ModernEngine.dir/flags.make CMakeFiles/ModernEngine.dir/src/Scene.cpp.o: CMakeFiles/ModernEngine.dir/flags.make
CMakeFiles/ModernEngine.dir/src/Scene.cpp.o: /Users/will/Documents/zoomengine/src/Scene.cpp CMakeFiles/ModernEngine.dir/src/Scene.cpp.o: /Users/will/Documents/zoomengine/src/Scene.cpp
CMakeFiles/ModernEngine.dir/src/Scene.cpp.o: CMakeFiles/ModernEngine.dir/compiler_depend.ts CMakeFiles/ModernEngine.dir/src/Scene.cpp.o: CMakeFiles/ModernEngine.dir/compiler_depend.ts
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/Users/will/Documents/zoomengine/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_10) "Building CXX object CMakeFiles/ModernEngine.dir/src/Scene.cpp.o" @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/Users/will/Documents/zoomengine/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_11) "Building CXX object CMakeFiles/ModernEngine.dir/src/Scene.cpp.o"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/ModernEngine.dir/src/Scene.cpp.o -MF CMakeFiles/ModernEngine.dir/src/Scene.cpp.o.d -o CMakeFiles/ModernEngine.dir/src/Scene.cpp.o -c /Users/will/Documents/zoomengine/src/Scene.cpp /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/ModernEngine.dir/src/Scene.cpp.o -MF CMakeFiles/ModernEngine.dir/src/Scene.cpp.o.d -o CMakeFiles/ModernEngine.dir/src/Scene.cpp.o -c /Users/will/Documents/zoomengine/src/Scene.cpp
CMakeFiles/ModernEngine.dir/src/Scene.cpp.i: cmake_force CMakeFiles/ModernEngine.dir/src/Scene.cpp.i: cmake_force
@@ -215,7 +229,7 @@ CMakeFiles/ModernEngine.dir/src/Scene.cpp.s: cmake_force
CMakeFiles/ModernEngine.dir/src/Shader.cpp.o: CMakeFiles/ModernEngine.dir/flags.make CMakeFiles/ModernEngine.dir/src/Shader.cpp.o: CMakeFiles/ModernEngine.dir/flags.make
CMakeFiles/ModernEngine.dir/src/Shader.cpp.o: /Users/will/Documents/zoomengine/src/Shader.cpp CMakeFiles/ModernEngine.dir/src/Shader.cpp.o: /Users/will/Documents/zoomengine/src/Shader.cpp
CMakeFiles/ModernEngine.dir/src/Shader.cpp.o: CMakeFiles/ModernEngine.dir/compiler_depend.ts CMakeFiles/ModernEngine.dir/src/Shader.cpp.o: CMakeFiles/ModernEngine.dir/compiler_depend.ts
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/Users/will/Documents/zoomengine/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_11) "Building CXX object CMakeFiles/ModernEngine.dir/src/Shader.cpp.o" @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/Users/will/Documents/zoomengine/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_12) "Building CXX object CMakeFiles/ModernEngine.dir/src/Shader.cpp.o"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/ModernEngine.dir/src/Shader.cpp.o -MF CMakeFiles/ModernEngine.dir/src/Shader.cpp.o.d -o CMakeFiles/ModernEngine.dir/src/Shader.cpp.o -c /Users/will/Documents/zoomengine/src/Shader.cpp /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/ModernEngine.dir/src/Shader.cpp.o -MF CMakeFiles/ModernEngine.dir/src/Shader.cpp.o.d -o CMakeFiles/ModernEngine.dir/src/Shader.cpp.o -c /Users/will/Documents/zoomengine/src/Shader.cpp
CMakeFiles/ModernEngine.dir/src/Shader.cpp.i: cmake_force CMakeFiles/ModernEngine.dir/src/Shader.cpp.i: cmake_force
@@ -229,7 +243,7 @@ CMakeFiles/ModernEngine.dir/src/Shader.cpp.s: cmake_force
CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.o: CMakeFiles/ModernEngine.dir/flags.make CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.o: CMakeFiles/ModernEngine.dir/flags.make
CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.o: /Users/will/Documents/zoomengine/src/SimpleTextureLoader.cpp CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.o: /Users/will/Documents/zoomengine/src/SimpleTextureLoader.cpp
CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.o: CMakeFiles/ModernEngine.dir/compiler_depend.ts CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.o: CMakeFiles/ModernEngine.dir/compiler_depend.ts
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/Users/will/Documents/zoomengine/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_12) "Building CXX object CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.o" @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/Users/will/Documents/zoomengine/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_13) "Building CXX object CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.o"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.o -MF CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.o.d -o CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.o -c /Users/will/Documents/zoomengine/src/SimpleTextureLoader.cpp /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.o -MF CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.o.d -o CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.o -c /Users/will/Documents/zoomengine/src/SimpleTextureLoader.cpp
CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.i: cmake_force CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.i: cmake_force
@@ -240,10 +254,24 @@ CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.s" @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.s"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /Users/will/Documents/zoomengine/src/SimpleTextureLoader.cpp -o CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.s /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /Users/will/Documents/zoomengine/src/SimpleTextureLoader.cpp -o CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.s
CMakeFiles/ModernEngine.dir/src/TextureCache.cpp.o: CMakeFiles/ModernEngine.dir/flags.make
CMakeFiles/ModernEngine.dir/src/TextureCache.cpp.o: /Users/will/Documents/zoomengine/src/TextureCache.cpp
CMakeFiles/ModernEngine.dir/src/TextureCache.cpp.o: CMakeFiles/ModernEngine.dir/compiler_depend.ts
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/Users/will/Documents/zoomengine/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_14) "Building CXX object CMakeFiles/ModernEngine.dir/src/TextureCache.cpp.o"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/ModernEngine.dir/src/TextureCache.cpp.o -MF CMakeFiles/ModernEngine.dir/src/TextureCache.cpp.o.d -o CMakeFiles/ModernEngine.dir/src/TextureCache.cpp.o -c /Users/will/Documents/zoomengine/src/TextureCache.cpp
CMakeFiles/ModernEngine.dir/src/TextureCache.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/ModernEngine.dir/src/TextureCache.cpp.i"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /Users/will/Documents/zoomengine/src/TextureCache.cpp > CMakeFiles/ModernEngine.dir/src/TextureCache.cpp.i
CMakeFiles/ModernEngine.dir/src/TextureCache.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/ModernEngine.dir/src/TextureCache.cpp.s"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /Users/will/Documents/zoomengine/src/TextureCache.cpp -o CMakeFiles/ModernEngine.dir/src/TextureCache.cpp.s
CMakeFiles/ModernEngine.dir/src/Window.cpp.o: CMakeFiles/ModernEngine.dir/flags.make CMakeFiles/ModernEngine.dir/src/Window.cpp.o: CMakeFiles/ModernEngine.dir/flags.make
CMakeFiles/ModernEngine.dir/src/Window.cpp.o: /Users/will/Documents/zoomengine/src/Window.cpp CMakeFiles/ModernEngine.dir/src/Window.cpp.o: /Users/will/Documents/zoomengine/src/Window.cpp
CMakeFiles/ModernEngine.dir/src/Window.cpp.o: CMakeFiles/ModernEngine.dir/compiler_depend.ts CMakeFiles/ModernEngine.dir/src/Window.cpp.o: CMakeFiles/ModernEngine.dir/compiler_depend.ts
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/Users/will/Documents/zoomengine/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_13) "Building CXX object CMakeFiles/ModernEngine.dir/src/Window.cpp.o" @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/Users/will/Documents/zoomengine/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_15) "Building CXX object CMakeFiles/ModernEngine.dir/src/Window.cpp.o"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/ModernEngine.dir/src/Window.cpp.o -MF CMakeFiles/ModernEngine.dir/src/Window.cpp.o.d -o CMakeFiles/ModernEngine.dir/src/Window.cpp.o -c /Users/will/Documents/zoomengine/src/Window.cpp /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/ModernEngine.dir/src/Window.cpp.o -MF CMakeFiles/ModernEngine.dir/src/Window.cpp.o.d -o CMakeFiles/ModernEngine.dir/src/Window.cpp.o -c /Users/will/Documents/zoomengine/src/Window.cpp
CMakeFiles/ModernEngine.dir/src/Window.cpp.i: cmake_force CMakeFiles/ModernEngine.dir/src/Window.cpp.i: cmake_force
@@ -257,7 +285,7 @@ CMakeFiles/ModernEngine.dir/src/Window.cpp.s: cmake_force
CMakeFiles/ModernEngine.dir/src/main.cpp.o: CMakeFiles/ModernEngine.dir/flags.make CMakeFiles/ModernEngine.dir/src/main.cpp.o: CMakeFiles/ModernEngine.dir/flags.make
CMakeFiles/ModernEngine.dir/src/main.cpp.o: /Users/will/Documents/zoomengine/src/main.cpp CMakeFiles/ModernEngine.dir/src/main.cpp.o: /Users/will/Documents/zoomengine/src/main.cpp
CMakeFiles/ModernEngine.dir/src/main.cpp.o: CMakeFiles/ModernEngine.dir/compiler_depend.ts CMakeFiles/ModernEngine.dir/src/main.cpp.o: CMakeFiles/ModernEngine.dir/compiler_depend.ts
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/Users/will/Documents/zoomengine/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_14) "Building CXX object CMakeFiles/ModernEngine.dir/src/main.cpp.o" @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/Users/will/Documents/zoomengine/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_16) "Building CXX object CMakeFiles/ModernEngine.dir/src/main.cpp.o"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/ModernEngine.dir/src/main.cpp.o -MF CMakeFiles/ModernEngine.dir/src/main.cpp.o.d -o CMakeFiles/ModernEngine.dir/src/main.cpp.o -c /Users/will/Documents/zoomengine/src/main.cpp /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/ModernEngine.dir/src/main.cpp.o -MF CMakeFiles/ModernEngine.dir/src/main.cpp.o.d -o CMakeFiles/ModernEngine.dir/src/main.cpp.o -c /Users/will/Documents/zoomengine/src/main.cpp
CMakeFiles/ModernEngine.dir/src/main.cpp.i: cmake_force CMakeFiles/ModernEngine.dir/src/main.cpp.i: cmake_force
@@ -271,7 +299,7 @@ CMakeFiles/ModernEngine.dir/src/main.cpp.s: cmake_force
CMakeFiles/ModernEngine.dir/src/glad.c.o: CMakeFiles/ModernEngine.dir/flags.make CMakeFiles/ModernEngine.dir/src/glad.c.o: CMakeFiles/ModernEngine.dir/flags.make
CMakeFiles/ModernEngine.dir/src/glad.c.o: /Users/will/Documents/zoomengine/src/glad.c CMakeFiles/ModernEngine.dir/src/glad.c.o: /Users/will/Documents/zoomengine/src/glad.c
CMakeFiles/ModernEngine.dir/src/glad.c.o: CMakeFiles/ModernEngine.dir/compiler_depend.ts CMakeFiles/ModernEngine.dir/src/glad.c.o: CMakeFiles/ModernEngine.dir/compiler_depend.ts
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/Users/will/Documents/zoomengine/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_15) "Building C object CMakeFiles/ModernEngine.dir/src/glad.c.o" @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/Users/will/Documents/zoomengine/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_17) "Building C object CMakeFiles/ModernEngine.dir/src/glad.c.o"
/usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/ModernEngine.dir/src/glad.c.o -MF CMakeFiles/ModernEngine.dir/src/glad.c.o.d -o CMakeFiles/ModernEngine.dir/src/glad.c.o -c /Users/will/Documents/zoomengine/src/glad.c /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/ModernEngine.dir/src/glad.c.o -MF CMakeFiles/ModernEngine.dir/src/glad.c.o.d -o CMakeFiles/ModernEngine.dir/src/glad.c.o -c /Users/will/Documents/zoomengine/src/glad.c
CMakeFiles/ModernEngine.dir/src/glad.c.i: cmake_force CMakeFiles/ModernEngine.dir/src/glad.c.i: cmake_force
@@ -291,11 +319,13 @@ ModernEngine_OBJECTS = \
"CMakeFiles/ModernEngine.dir/src/Mesh.cpp.o" \ "CMakeFiles/ModernEngine.dir/src/Mesh.cpp.o" \
"CMakeFiles/ModernEngine.dir/src/OBJLoader.cpp.o" \ "CMakeFiles/ModernEngine.dir/src/OBJLoader.cpp.o" \
"CMakeFiles/ModernEngine.dir/src/OBJModelPrimitive.cpp.o" \ "CMakeFiles/ModernEngine.dir/src/OBJModelPrimitive.cpp.o" \
"CMakeFiles/ModernEngine.dir/src/Physics.cpp.o" \
"CMakeFiles/ModernEngine.dir/src/Renderer.cpp.o" \ "CMakeFiles/ModernEngine.dir/src/Renderer.cpp.o" \
"CMakeFiles/ModernEngine.dir/src/ResourceManager.cpp.o" \ "CMakeFiles/ModernEngine.dir/src/ResourceManager.cpp.o" \
"CMakeFiles/ModernEngine.dir/src/Scene.cpp.o" \ "CMakeFiles/ModernEngine.dir/src/Scene.cpp.o" \
"CMakeFiles/ModernEngine.dir/src/Shader.cpp.o" \ "CMakeFiles/ModernEngine.dir/src/Shader.cpp.o" \
"CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.o" \ "CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.o" \
"CMakeFiles/ModernEngine.dir/src/TextureCache.cpp.o" \
"CMakeFiles/ModernEngine.dir/src/Window.cpp.o" \ "CMakeFiles/ModernEngine.dir/src/Window.cpp.o" \
"CMakeFiles/ModernEngine.dir/src/main.cpp.o" \ "CMakeFiles/ModernEngine.dir/src/main.cpp.o" \
"CMakeFiles/ModernEngine.dir/src/glad.c.o" "CMakeFiles/ModernEngine.dir/src/glad.c.o"
@@ -310,18 +340,20 @@ ModernEngine: CMakeFiles/ModernEngine.dir/src/LevelEditor.cpp.o
ModernEngine: CMakeFiles/ModernEngine.dir/src/Mesh.cpp.o ModernEngine: CMakeFiles/ModernEngine.dir/src/Mesh.cpp.o
ModernEngine: CMakeFiles/ModernEngine.dir/src/OBJLoader.cpp.o ModernEngine: CMakeFiles/ModernEngine.dir/src/OBJLoader.cpp.o
ModernEngine: CMakeFiles/ModernEngine.dir/src/OBJModelPrimitive.cpp.o ModernEngine: CMakeFiles/ModernEngine.dir/src/OBJModelPrimitive.cpp.o
ModernEngine: CMakeFiles/ModernEngine.dir/src/Physics.cpp.o
ModernEngine: CMakeFiles/ModernEngine.dir/src/Renderer.cpp.o ModernEngine: CMakeFiles/ModernEngine.dir/src/Renderer.cpp.o
ModernEngine: CMakeFiles/ModernEngine.dir/src/ResourceManager.cpp.o ModernEngine: CMakeFiles/ModernEngine.dir/src/ResourceManager.cpp.o
ModernEngine: CMakeFiles/ModernEngine.dir/src/Scene.cpp.o ModernEngine: CMakeFiles/ModernEngine.dir/src/Scene.cpp.o
ModernEngine: CMakeFiles/ModernEngine.dir/src/Shader.cpp.o ModernEngine: CMakeFiles/ModernEngine.dir/src/Shader.cpp.o
ModernEngine: CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.o ModernEngine: CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.o
ModernEngine: CMakeFiles/ModernEngine.dir/src/TextureCache.cpp.o
ModernEngine: CMakeFiles/ModernEngine.dir/src/Window.cpp.o ModernEngine: CMakeFiles/ModernEngine.dir/src/Window.cpp.o
ModernEngine: CMakeFiles/ModernEngine.dir/src/main.cpp.o ModernEngine: CMakeFiles/ModernEngine.dir/src/main.cpp.o
ModernEngine: CMakeFiles/ModernEngine.dir/src/glad.c.o ModernEngine: CMakeFiles/ModernEngine.dir/src/glad.c.o
ModernEngine: CMakeFiles/ModernEngine.dir/build.make ModernEngine: CMakeFiles/ModernEngine.dir/build.make
ModernEngine: /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/OpenGL.framework ModernEngine: /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/OpenGL.framework
ModernEngine: CMakeFiles/ModernEngine.dir/link.txt ModernEngine: CMakeFiles/ModernEngine.dir/link.txt
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir=/Users/will/Documents/zoomengine/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_16) "Linking CXX executable ModernEngine" @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir=/Users/will/Documents/zoomengine/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_18) "Linking CXX executable ModernEngine"
$(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/ModernEngine.dir/link.txt --verbose=$(VERBOSE) $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/ModernEngine.dir/link.txt --verbose=$(VERBOSE)
# Rule to build all files generated by this target. # Rule to build all files generated by this target.

View File

@@ -13,6 +13,8 @@ file(REMOVE_RECURSE
"CMakeFiles/ModernEngine.dir/src/OBJLoader.cpp.o.d" "CMakeFiles/ModernEngine.dir/src/OBJLoader.cpp.o.d"
"CMakeFiles/ModernEngine.dir/src/OBJModelPrimitive.cpp.o" "CMakeFiles/ModernEngine.dir/src/OBJModelPrimitive.cpp.o"
"CMakeFiles/ModernEngine.dir/src/OBJModelPrimitive.cpp.o.d" "CMakeFiles/ModernEngine.dir/src/OBJModelPrimitive.cpp.o.d"
"CMakeFiles/ModernEngine.dir/src/Physics.cpp.o"
"CMakeFiles/ModernEngine.dir/src/Physics.cpp.o.d"
"CMakeFiles/ModernEngine.dir/src/Renderer.cpp.o" "CMakeFiles/ModernEngine.dir/src/Renderer.cpp.o"
"CMakeFiles/ModernEngine.dir/src/Renderer.cpp.o.d" "CMakeFiles/ModernEngine.dir/src/Renderer.cpp.o.d"
"CMakeFiles/ModernEngine.dir/src/ResourceManager.cpp.o" "CMakeFiles/ModernEngine.dir/src/ResourceManager.cpp.o"
@@ -23,6 +25,8 @@ file(REMOVE_RECURSE
"CMakeFiles/ModernEngine.dir/src/Shader.cpp.o.d" "CMakeFiles/ModernEngine.dir/src/Shader.cpp.o.d"
"CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.o" "CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.o"
"CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.o.d" "CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.o.d"
"CMakeFiles/ModernEngine.dir/src/TextureCache.cpp.o"
"CMakeFiles/ModernEngine.dir/src/TextureCache.cpp.o.d"
"CMakeFiles/ModernEngine.dir/src/Window.cpp.o" "CMakeFiles/ModernEngine.dir/src/Window.cpp.o"
"CMakeFiles/ModernEngine.dir/src/Window.cpp.o.d" "CMakeFiles/ModernEngine.dir/src/Window.cpp.o.d"
"CMakeFiles/ModernEngine.dir/src/glad.c.o" "CMakeFiles/ModernEngine.dir/src/glad.c.o"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1 +1 @@
/usr/bin/c++ -arch arm64 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -Wl,-search_paths_first -Wl,-headerpad_max_install_names CMakeFiles/ModernEngine.dir/src/Camera.cpp.o CMakeFiles/ModernEngine.dir/src/Engine.cpp.o CMakeFiles/ModernEngine.dir/src/Input.cpp.o CMakeFiles/ModernEngine.dir/src/LevelEditor.cpp.o CMakeFiles/ModernEngine.dir/src/Mesh.cpp.o CMakeFiles/ModernEngine.dir/src/OBJLoader.cpp.o CMakeFiles/ModernEngine.dir/src/OBJModelPrimitive.cpp.o CMakeFiles/ModernEngine.dir/src/Renderer.cpp.o CMakeFiles/ModernEngine.dir/src/ResourceManager.cpp.o CMakeFiles/ModernEngine.dir/src/Scene.cpp.o CMakeFiles/ModernEngine.dir/src/Shader.cpp.o CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.o CMakeFiles/ModernEngine.dir/src/Window.cpp.o CMakeFiles/ModernEngine.dir/src/main.cpp.o CMakeFiles/ModernEngine.dir/src/glad.c.o -o ModernEngine -L/opt/homebrew/Cellar/glfw/3.4/lib -Wl,-rpath,/opt/homebrew/Cellar/glfw/3.4/lib -framework OpenGL -lglfw -framework Cocoa -framework IOKit -framework CoreVideo -framework QuartzCore -framework AudioToolbox -framework CoreAudio /usr/bin/c++ -arch arm64 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -Wl,-search_paths_first -Wl,-headerpad_max_install_names CMakeFiles/ModernEngine.dir/src/Camera.cpp.o CMakeFiles/ModernEngine.dir/src/Engine.cpp.o CMakeFiles/ModernEngine.dir/src/Input.cpp.o CMakeFiles/ModernEngine.dir/src/LevelEditor.cpp.o CMakeFiles/ModernEngine.dir/src/Mesh.cpp.o CMakeFiles/ModernEngine.dir/src/OBJLoader.cpp.o CMakeFiles/ModernEngine.dir/src/OBJModelPrimitive.cpp.o CMakeFiles/ModernEngine.dir/src/Physics.cpp.o CMakeFiles/ModernEngine.dir/src/Renderer.cpp.o CMakeFiles/ModernEngine.dir/src/ResourceManager.cpp.o CMakeFiles/ModernEngine.dir/src/Scene.cpp.o CMakeFiles/ModernEngine.dir/src/Shader.cpp.o CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.o CMakeFiles/ModernEngine.dir/src/TextureCache.cpp.o CMakeFiles/ModernEngine.dir/src/Window.cpp.o CMakeFiles/ModernEngine.dir/src/main.cpp.o CMakeFiles/ModernEngine.dir/src/glad.c.o -o ModernEngine -L/opt/homebrew/Cellar/glfw/3.4/lib -Wl,-rpath,/opt/homebrew/Cellar/glfw/3.4/lib -framework OpenGL -lglfw -framework Cocoa -framework IOKit -framework CoreVideo -framework QuartzCore -framework AudioToolbox -framework CoreAudio

View File

@@ -14,4 +14,6 @@ CMAKE_PROGRESS_13 = 13
CMAKE_PROGRESS_14 = 14 CMAKE_PROGRESS_14 = 14
CMAKE_PROGRESS_15 = 15 CMAKE_PROGRESS_15 = 15
CMAKE_PROGRESS_16 = 16 CMAKE_PROGRESS_16 = 16
CMAKE_PROGRESS_17 = 17
CMAKE_PROGRESS_18 = 18

View File

@@ -1387,11 +1387,69 @@ CMakeFiles/ModernEngine.dir/src/Engine.cpp.o: \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/netinet6/in6.h \ /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/netinet6/in6.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/poll.h \ /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/poll.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/poll.h \ /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/poll.h \
/opt/homebrew/include/glm/gtc/matrix_access.hpp \ /Users/will/Documents/zoomengine/src/Physics.h \
/opt/homebrew/include/glm/gtc/quaternion.hpp \
/opt/homebrew/include/glm/gtc/../gtc/constants.hpp \
/opt/homebrew/include/glm/gtc/../gtc/matrix_transform.hpp \
/opt/homebrew/include/glm/gtc/../ext/vector_relational.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/qualifier.hpp \
/opt/homebrew/include/glm/gtc/../ext/vector_relational.inl \
/opt/homebrew/include/glm/gtc/../ext/../vector_relational.hpp \
/opt/homebrew/include/glm/gtc/../ext/../common.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/type_float.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/setup.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_common.hpp \
/opt/homebrew/include/glm/gtc/../ext/../ext/quaternion_geometric.hpp \
/opt/homebrew/include/glm/gtc/../ext/../ext/../geometric.hpp \
/opt/homebrew/include/glm/gtc/../ext/../ext/../exponential.hpp \
/opt/homebrew/include/glm/gtc/../ext/../ext/../ext/vector_relational.hpp \
/opt/homebrew/include/glm/gtc/../ext/../ext/quaternion_geometric.inl \
/opt/homebrew/include/glm/gtc/../ext/../exponential.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_common.inl \
/opt/homebrew/include/glm/gtc/../ext/quaternion_float.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/type_quat.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../detail/type_mat3x3.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../detail/type_mat4x4.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../detail/type_vec3.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../detail/type_vec4.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../ext/vector_relational.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../ext/quaternion_relational.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../ext/../vector_relational.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../ext/quaternion_relational.inl \
/opt/homebrew/include/glm/gtc/../ext/../detail/../gtc/constants.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../gtc/matrix_transform.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/type_quat.inl \
/opt/homebrew/include/glm/gtc/../ext/../detail/../trigonometric.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../exponential.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../ext/quaternion_common.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../ext/quaternion_geometric.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_float_precision.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_double.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_double_precision.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_relational.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_geometric.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_trigonometric.hpp \
/opt/homebrew/include/glm/gtc/../ext/scalar_constants.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_trigonometric.inl \
/opt/homebrew/include/glm/gtc/../ext/quaternion_transform.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_transform.inl \
/opt/homebrew/include/glm/gtc/../detail/type_mat3x3.hpp \
/opt/homebrew/include/glm/gtc/../detail/type_mat4x4.hpp \
/opt/homebrew/include/glm/gtc/../detail/type_vec3.hpp \
/opt/homebrew/include/glm/gtc/../detail/type_vec4.hpp \
/opt/homebrew/include/glm/gtc/quaternion.inl \
/opt/homebrew/include/glm/gtc/../exponential.hpp \
/opt/homebrew/include/glm/gtc/epsilon.hpp \
/opt/homebrew/include/glm/gtc/../detail/setup.hpp \ /opt/homebrew/include/glm/gtc/../detail/setup.hpp \
/opt/homebrew/include/glm/gtc/../detail/qualifier.hpp \
/opt/homebrew/include/glm/gtc/epsilon.inl \
/opt/homebrew/include/glm/gtc/../vector_relational.hpp \
/opt/homebrew/include/glm/gtc/../common.hpp \
/opt/homebrew/include/glm/gtc/matrix_access.hpp \
/opt/homebrew/include/glm/gtc/matrix_access.inl \ /opt/homebrew/include/glm/gtc/matrix_access.inl \
/Users/will/Documents/zoomengine/src/Input.h \ /Users/will/Documents/zoomengine/src/Input.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/unordered_set \ /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/unordered_set \
/Users/will/Documents/zoomengine/src/OBJModelPrimitive.h \ /Users/will/Documents/zoomengine/src/OBJModelPrimitive.h \
/Users/will/Documents/zoomengine/src/OBJLoader.h \ /Users/will/Documents/zoomengine/src/OBJLoader.h \
/Users/will/Documents/zoomengine/src/SimpleTextureLoader.h /Users/will/Documents/zoomengine/src/SimpleTextureLoader.h \
/Users/will/Documents/zoomengine/src/TextureCache.h

View File

@@ -1387,6 +1387,63 @@ CMakeFiles/ModernEngine.dir/src/LevelEditor.cpp.o: \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/netinet6/in6.h \ /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/netinet6/in6.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/poll.h \ /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/poll.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/poll.h \ /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/poll.h \
/opt/homebrew/include/glm/gtc/matrix_access.hpp \ /Users/will/Documents/zoomengine/src/Physics.h \
/opt/homebrew/include/glm/gtc/quaternion.hpp \
/opt/homebrew/include/glm/gtc/../gtc/constants.hpp \
/opt/homebrew/include/glm/gtc/../gtc/matrix_transform.hpp \
/opt/homebrew/include/glm/gtc/../ext/vector_relational.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/qualifier.hpp \
/opt/homebrew/include/glm/gtc/../ext/vector_relational.inl \
/opt/homebrew/include/glm/gtc/../ext/../vector_relational.hpp \
/opt/homebrew/include/glm/gtc/../ext/../common.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/type_float.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/setup.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_common.hpp \
/opt/homebrew/include/glm/gtc/../ext/../ext/quaternion_geometric.hpp \
/opt/homebrew/include/glm/gtc/../ext/../ext/../geometric.hpp \
/opt/homebrew/include/glm/gtc/../ext/../ext/../exponential.hpp \
/opt/homebrew/include/glm/gtc/../ext/../ext/../ext/vector_relational.hpp \
/opt/homebrew/include/glm/gtc/../ext/../ext/quaternion_geometric.inl \
/opt/homebrew/include/glm/gtc/../ext/../exponential.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_common.inl \
/opt/homebrew/include/glm/gtc/../ext/quaternion_float.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/type_quat.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../detail/type_mat3x3.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../detail/type_mat4x4.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../detail/type_vec3.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../detail/type_vec4.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../ext/vector_relational.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../ext/quaternion_relational.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../ext/../vector_relational.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../ext/quaternion_relational.inl \
/opt/homebrew/include/glm/gtc/../ext/../detail/../gtc/constants.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../gtc/matrix_transform.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/type_quat.inl \
/opt/homebrew/include/glm/gtc/../ext/../detail/../trigonometric.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../exponential.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../ext/quaternion_common.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../ext/quaternion_geometric.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_float_precision.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_double.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_double_precision.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_relational.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_geometric.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_trigonometric.hpp \
/opt/homebrew/include/glm/gtc/../ext/scalar_constants.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_trigonometric.inl \
/opt/homebrew/include/glm/gtc/../ext/quaternion_transform.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_transform.inl \
/opt/homebrew/include/glm/gtc/../detail/type_mat3x3.hpp \
/opt/homebrew/include/glm/gtc/../detail/type_mat4x4.hpp \
/opt/homebrew/include/glm/gtc/../detail/type_vec3.hpp \
/opt/homebrew/include/glm/gtc/../detail/type_vec4.hpp \
/opt/homebrew/include/glm/gtc/quaternion.inl \
/opt/homebrew/include/glm/gtc/../exponential.hpp \
/opt/homebrew/include/glm/gtc/epsilon.hpp \
/opt/homebrew/include/glm/gtc/../detail/setup.hpp \ /opt/homebrew/include/glm/gtc/../detail/setup.hpp \
/opt/homebrew/include/glm/gtc/../detail/qualifier.hpp \
/opt/homebrew/include/glm/gtc/epsilon.inl \
/opt/homebrew/include/glm/gtc/../vector_relational.hpp \
/opt/homebrew/include/glm/gtc/../common.hpp \
/opt/homebrew/include/glm/gtc/matrix_access.hpp \
/opt/homebrew/include/glm/gtc/matrix_access.inl /opt/homebrew/include/glm/gtc/matrix_access.inl

View File

@@ -1388,8 +1388,65 @@ CMakeFiles/ModernEngine.dir/src/OBJModelPrimitive.cpp.o: \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/netinet6/in6.h \ /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/netinet6/in6.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/poll.h \ /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/poll.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/poll.h \ /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/poll.h \
/opt/homebrew/include/glm/gtc/matrix_access.hpp \ /Users/will/Documents/zoomengine/src/Physics.h \
/opt/homebrew/include/glm/gtc/quaternion.hpp \
/opt/homebrew/include/glm/gtc/../gtc/constants.hpp \
/opt/homebrew/include/glm/gtc/../gtc/matrix_transform.hpp \
/opt/homebrew/include/glm/gtc/../ext/vector_relational.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/qualifier.hpp \
/opt/homebrew/include/glm/gtc/../ext/vector_relational.inl \
/opt/homebrew/include/glm/gtc/../ext/../vector_relational.hpp \
/opt/homebrew/include/glm/gtc/../ext/../common.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/type_float.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/setup.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_common.hpp \
/opt/homebrew/include/glm/gtc/../ext/../ext/quaternion_geometric.hpp \
/opt/homebrew/include/glm/gtc/../ext/../ext/../geometric.hpp \
/opt/homebrew/include/glm/gtc/../ext/../ext/../exponential.hpp \
/opt/homebrew/include/glm/gtc/../ext/../ext/../ext/vector_relational.hpp \
/opt/homebrew/include/glm/gtc/../ext/../ext/quaternion_geometric.inl \
/opt/homebrew/include/glm/gtc/../ext/../exponential.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_common.inl \
/opt/homebrew/include/glm/gtc/../ext/quaternion_float.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/type_quat.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../detail/type_mat3x3.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../detail/type_mat4x4.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../detail/type_vec3.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../detail/type_vec4.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../ext/vector_relational.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../ext/quaternion_relational.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../ext/../vector_relational.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../ext/quaternion_relational.inl \
/opt/homebrew/include/glm/gtc/../ext/../detail/../gtc/constants.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../gtc/matrix_transform.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/type_quat.inl \
/opt/homebrew/include/glm/gtc/../ext/../detail/../trigonometric.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../exponential.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../ext/quaternion_common.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../ext/quaternion_geometric.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_float_precision.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_double.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_double_precision.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_relational.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_geometric.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_trigonometric.hpp \
/opt/homebrew/include/glm/gtc/../ext/scalar_constants.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_trigonometric.inl \
/opt/homebrew/include/glm/gtc/../ext/quaternion_transform.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_transform.inl \
/opt/homebrew/include/glm/gtc/../detail/type_mat3x3.hpp \
/opt/homebrew/include/glm/gtc/../detail/type_mat4x4.hpp \
/opt/homebrew/include/glm/gtc/../detail/type_vec3.hpp \
/opt/homebrew/include/glm/gtc/../detail/type_vec4.hpp \
/opt/homebrew/include/glm/gtc/quaternion.inl \
/opt/homebrew/include/glm/gtc/../exponential.hpp \
/opt/homebrew/include/glm/gtc/epsilon.hpp \
/opt/homebrew/include/glm/gtc/../detail/setup.hpp \ /opt/homebrew/include/glm/gtc/../detail/setup.hpp \
/opt/homebrew/include/glm/gtc/../detail/qualifier.hpp \
/opt/homebrew/include/glm/gtc/epsilon.inl \
/opt/homebrew/include/glm/gtc/../vector_relational.hpp \
/opt/homebrew/include/glm/gtc/../common.hpp \
/opt/homebrew/include/glm/gtc/matrix_access.hpp \
/opt/homebrew/include/glm/gtc/matrix_access.inl \ /opt/homebrew/include/glm/gtc/matrix_access.inl \
/Users/will/Documents/zoomengine/src/OBJLoader.h \ /Users/will/Documents/zoomengine/src/OBJLoader.h \
/Users/will/Documents/zoomengine/src/SimpleTextureLoader.h /Users/will/Documents/zoomengine/src/SimpleTextureLoader.h

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,867 @@
CMakeFiles/ModernEngine.dir/src/TextureCache.cpp.o: \
/Users/will/Documents/zoomengine/src/TextureCache.cpp \
/Users/will/Documents/zoomengine/src/TextureCache.h \
/Users/will/Documents/zoomengine/include/glad.h \
/Users/will/Documents/zoomengine/include/KHR/khrplatform.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/stdint.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__config \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__config_site \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__configuration/abi.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__configuration/compiler.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__configuration/platform.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__configuration/availability.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__configuration/language.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__configuration/experimental.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__configuration/hardening.h \
/Library/Developer/CommandLineTools/usr/lib/clang/21/include/stdint.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/stdint.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_int8_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_int16_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_int32_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_int64_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/_types/_uint8_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/_types/_uint16_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/_types/_uint32_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/_types/_uint64_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/cdefs.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_symbol_aliasing.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_posix_availability.h \
/Library/Developer/CommandLineTools/usr/lib/clang/21/include/ptrcheck.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/machine/_types.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/arm/_types.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_pthread/_pthread_types.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_intptr_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_uintptr_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/_types/_intmax_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/_types/_uintmax_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/string \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/max.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/comp.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/desugars_to.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_integral.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/integral_constant.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/remove_cv.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/comp_ref_type.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__assert \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__assertion_handler \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__log_hardening_failure \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__verbose_abort \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__verbose_trap \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__utility/declval.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/max_element.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/iterator_traits.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__concepts/arithmetic.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_floating_point.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_signed.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_arithmetic.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__concepts/constructible.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__concepts/convertible_to.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_convertible.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__concepts/destructible.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_nothrow_destructible.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__cstddef/size_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_destructible.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_function.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_reference.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/remove_all_extents.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_constructible.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/add_reference.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__concepts/copyable.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__concepts/assignable.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__concepts/common_reference_with.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__concepts/same_as.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_same.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/common_reference.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/add_pointer.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_referenceable.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/void_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_void.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/remove_reference.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/common_type.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/conditional.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/decay.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/remove_cvref.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/type_identity.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__utility/empty.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/copy_cv.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/copy_cvref.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/make_const_lvalue_ref.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__utility/forward.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__concepts/movable.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__concepts/swappable.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__concepts/class_or_enum.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_class.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_enum.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_union.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/extent.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_nothrow_assignable.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_nothrow_constructible.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__utility/exchange.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__utility/move.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__undef_macros \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_object.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__concepts/equality_comparable.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__concepts/boolean_testable.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__concepts/totally_ordered.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__cstddef/ptrdiff_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__fwd/pair.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__fwd/tuple.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/incrementable_traits.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_primary_template.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/enable_if.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_valid_expansion.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/make_signed.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/type_list.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/readable_traits.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_array.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/remove_extent.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__tuple/tuple_element.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__tuple/tuple_indices.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__utility/integer_sequence.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__tuple/tuple_types.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/detected_or.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/disjunction.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/nat.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/remove_const.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_callable.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/initializer_list \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/version \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/min.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/min_element.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__functional/identity.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__fwd/functional.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/invoke.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_base_of.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_core_convertible.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_member_pointer.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_reference_wrapper.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/remove.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/find.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/find_segment_if.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/segmented_iterator.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/unwrap_iter.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__memory/pointer_traits.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__memory/addressof.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/conjunction.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__bit/countr.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/integer_traits.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/limits \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__bit/invert_if.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__fwd/bit_reference.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__string/constexpr_c_functions.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__memory/construct_at.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__new/placement_new_delete.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/datasizeof.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_always_bitcastable.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_trivially_copyable.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/cstdint \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_assignable.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_constant_evaluated.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_equality_comparable.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_trivially_lexicographically_comparable.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__fwd/byte.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_unsigned.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__utility/element_count.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__utility/is_pointer_in_range.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__utility/is_valid_range.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/cwchar \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/cwctype \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/cctype \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/ctype.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/ctype.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/_ctype.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/_bounds.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/runetype.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/_types.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_size_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_ct_rune_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_rune_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_wchar_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_wint_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/wctype.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/wctype.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/_wctype.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/_types/_wctrans_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/__wctype.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/___wctype.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/_types/_wctype_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/wchar.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/wchar.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/_wchar.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/Availability.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/AvailabilityVersions.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/AvailabilityInternal.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/AvailabilityInternalLegacy.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_null.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_mbstate_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/machine/types.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/arm/types.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_u_int8_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_u_int16_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_u_int32_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_u_int64_t.h \
/Library/Developer/CommandLineTools/usr/lib/clang/21/include/stdarg.h \
/Library/Developer/CommandLineTools/usr/lib/clang/21/include/__stdarg_header_macro.h \
/Library/Developer/CommandLineTools/usr/lib/clang/21/include/__stdarg___gnuc_va_list.h \
/Library/Developer/CommandLineTools/usr/lib/clang/21/include/__stdarg_va_list.h \
/Library/Developer/CommandLineTools/usr/lib/clang/21/include/__stdarg_va_arg.h \
/Library/Developer/CommandLineTools/usr/lib/clang/21/include/__stdarg___va_copy.h \
/Library/Developer/CommandLineTools/usr/lib/clang/21/include/__stdarg_va_copy.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/stdio.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/stdio.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/_stdio.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_va_list.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/stdio.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/_printf.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_seek_set.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/_ctermid.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_off_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_ssize_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/time.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/_time.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_clock_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_time_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_timespec.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__mbstate_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/stddef.h \
/Library/Developer/CommandLineTools/usr/lib/clang/21/include/stddef.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/stddef.h \
/Library/Developer/CommandLineTools/usr/lib/clang/21/include/__stddef_header_macro.h \
/Library/Developer/CommandLineTools/usr/lib/clang/21/include/__stddef_ptrdiff_t.h \
/Library/Developer/CommandLineTools/usr/lib/clang/21/include/__stddef_size_t.h \
/Library/Developer/CommandLineTools/usr/lib/clang/21/include/__stddef_rsize_t.h \
/Library/Developer/CommandLineTools/usr/lib/clang/21/include/__stddef_wchar_t.h \
/Library/Developer/CommandLineTools/usr/lib/clang/21/include/__stddef_null.h \
/Library/Developer/CommandLineTools/usr/lib/clang/21/include/__stddef_nullptr_t.h \
/Library/Developer/CommandLineTools/usr/lib/clang/21/include/__stddef_max_align_t.h \
/Library/Developer/CommandLineTools/usr/lib/clang/21/include/__stddef_offsetof.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/find_if.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/remove_if.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__debug_utils/sanitizers.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__format/enable_insertable.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__functional/hash.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__cstddef/nullptr_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__functional/unary_function.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_unqualified.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/underlying_type.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__utility/pair.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__compare/common_comparison_category.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__compare/ordering.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__compare/synth_three_way.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__compare/three_way_comparable.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__concepts/different_from.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__fwd/array.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__tuple/tuple_like_no_subrange.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__fwd/complex.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__tuple/tuple_size.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_const.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_volatile.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_implicitly_default_constructible.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_replaceable.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_swappable.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_trivially_relocatable.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/unwrap_ref.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__utility/piecewise_construct.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__utility/swap.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/cstring \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/string.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/string.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/_string.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_rsize_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_errno_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/_strings.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__fwd/string.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__fwd/memory.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__fwd/memory_resource.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__ios/fpos.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__fwd/ios.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/bounded_iter.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/distance.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/concepts.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__concepts/derived_from.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__concepts/invocable.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__functional/invoke.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__concepts/predicate.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__concepts/regular.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__concepts/semiregular.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__concepts/relation.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/iter_move.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_pointer.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__ranges/access.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__ranges/enable_borrowed_range.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__utility/auto_cast.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__ranges/concepts.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__ranges/data.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/remove_pointer.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__ranges/enable_view.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__ranges/size.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/make_unsigned.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/reverse_iterator.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__compare/compare_three_way_result.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/advance.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__utility/convert_to_integral.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__utility/unreachable.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/iter_swap.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/iterator.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/next.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/prev.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__ranges/subrange.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__fwd/subrange.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__ranges/dangling.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__ranges/view_interface.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__ranges/empty.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/wrap_iter.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__memory/allocate_at_least.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__memory/allocator_traits.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_empty.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__memory/allocator.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__new/allocate.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__cstddef/max_align_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__new/align_val_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__new/global_new_delete.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__new/exceptions.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__exception/exception.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/stdlib.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/stdlib.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/_stdlib.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/wait.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_pid_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_id_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/signal.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/appleapiopts.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/machine/signal.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/arm/signal.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/machine/_mcontext.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/arm/_mcontext.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/mach/machine/_structs.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/mach/arm/_structs.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_pthread/_pthread_attr_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_sigaltstack.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_ucontext.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_sigset_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_uid_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/resource.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_timeval.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/machine/endian.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/arm/endian.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_endian.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/machine/_endian.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/arm/_endian.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/__endian.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/libkern/_OSByteOrder.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/libkern/arm/_OSByteOrder.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/alloca.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/malloc/_malloc.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/malloc/_malloc_type.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/malloc/_ptrcheck.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/_abort.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_dev_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_mode_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__math/abs.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__new/nothrow_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__new/global_typed_new_delete.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__memory/compressed_pair.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_final.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__memory/noexcept_move_assign_container.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__memory/swap_allocator.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__memory_resource/polymorphic_allocator.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__cstddef/byte.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__memory_resource/memory_resource.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__utility/exception_guard.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/tuple \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__memory/allocator_arg_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__memory/uses_allocator.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__tuple/find_index.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__tuple/ignore.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__tuple/make_tuple_types.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__tuple/sfinae_helpers.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__tuple/tuple_like_ext.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/lazy.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/maybe_const.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/negation.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/reference_constructs_from_temporary.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/compare \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__compare/compare_partial_order_fallback.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__compare/partial_order.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__compare/compare_three_way.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__compare/weak_order.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__compare/strong_order.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__bit/bit_cast.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__math/exponential_functions.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/promote.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__math/traits.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__utility/priority_tag.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__compare/compare_strong_order_fallback.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__compare/compare_weak_order_fallback.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__compare/is_eq.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__ranges/container_compatible_range.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__ranges/from_range.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__string/char_traits.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/fill_n.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/find_end.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/iterator_operations.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/iter_swap.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_iterator_concept.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/find_first_of.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__std_mbstate_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/cstdio \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/iosfwd \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__fwd/fstream.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__fwd/istream.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__fwd/ostream.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__fwd/sstream.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__fwd/streambuf.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__string/extern_template_lists.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_allocator.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_standard_layout.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_trivially_constructible.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__utility/scope_guard.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/climits \
/Library/Developer/CommandLineTools/usr/lib/clang/21/include/limits.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/limits.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/machine/limits.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/arm/limits.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/arm/_limits.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/syslimits.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/stdexcept \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/string_view \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__fwd/string_view.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/access.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/data.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/empty.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/reverse_access.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/size.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/unordered_map \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/is_permutation.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__functional/is_transparent.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__functional/operations.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__functional/binary_function.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__hash_table \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__bit/countl.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__math/rounding_functions.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__memory/unique_ptr.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__memory/array_cookie.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_trivially_destructible.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__memory/auto_ptr.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/dependent_type.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_bounded_array.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_unbounded_array.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__utility/private_constructor_tag.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__new/launder.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/can_extract_key.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/remove_const_ref.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/erase_if_container.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/ranges_iterator_traits.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__node_handle \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_specialization.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/optional \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_scalar.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_null_pointer.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_trivially_assignable.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__utility/in_place.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/container_traits.h \
/Users/will/Documents/zoomengine/src/SimpleTextureLoader.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/cmath \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__math/hypot.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__math/min_max.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__math/roots.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__math/special_functions.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__math/copysign.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/math.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/math.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__math/error_functions.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__math/fdim.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__math/fma.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__math/gamma.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__math/hyperbolic_functions.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__math/inverse_hyperbolic_functions.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__math/inverse_trigonometric_functions.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__math/logarithms.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__math/modulo.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__math/remainder.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__math/trigonometric_functions.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/filesystem \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__filesystem/copy_options.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__filesystem/directory_entry.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__chrono/time_point.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__chrono/duration.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/ratio \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__filesystem/file_status.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__filesystem/file_type.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__filesystem/perms.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__filesystem/file_time_type.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__chrono/file_clock.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__chrono/system_clock.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/ctime \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__filesystem/filesystem_error.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__filesystem/path.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/replace.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/replace_copy.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/back_insert_iterator.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/iomanip \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/istreambuf_iterator.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/default_sentinel.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__locale_dir/money.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/copy.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/copy_move_common.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/unwrap_range.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/for_each_segment.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/equal.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/reverse.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__locale \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__locale_dir/locale_base_api.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__locale_dir/support/apple.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__locale_dir/support/bsd_like.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/clocale \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/locale.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/_locale.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/_locale_posix2008.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/_types/_locale_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/xlocale.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/_xlocale.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/__xlocale.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/_mb_cur_max.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/xlocale/_ctype.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/xlocale/___wctype.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/xlocale/_stdio.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/xlocale/_stdlib.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/xlocale/_string.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/xlocale/_time.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/xlocale/_wchar.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/xlocale/_wctype.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__memory/shared_count.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/typeinfo \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__mutex/once_flag.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__utility/no_destroy.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/cstdlib \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/cstddef \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__locale_dir/check_grouping.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/ios \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__system_error/error_category.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__system_error/error_code.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__system_error/errc.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/cerrno \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/errno.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/errno.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/errno.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__system_error/error_condition.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__system_error/system_error.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__atomic/atomic.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__atomic/atomic_sync.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__atomic/contention_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__atomic/support.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__atomic/support/c11.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__atomic/memory_order.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__atomic/to_gcc_order.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__thread/poll_with_backoff.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__chrono/high_resolution_clock.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__chrono/steady_clock.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__atomic/check_memory_order.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__atomic/is_always_lock_free.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/remove_volatile.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__locale_dir/get_c_locale.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__locale_dir/pad_and_output.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__locale_dir/time.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__locale_dir/scan_keyword.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__ostream/put_character_sequence.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/ostreambuf_iterator.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/locale \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__locale_dir/messages.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/nl_types.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/types.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_u_char.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_u_short.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_u_int.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_caddr_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_blkcnt_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_blksize_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_gid_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_in_addr_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_in_port_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_ino_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_ino64_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_key_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_nlink_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_useconds_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_suseconds_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_fd_def.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_fd_setsize.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_fd_set.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_fd_clr.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_fd_zero.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_fd_isset.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_fd_copy.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_pthread/_pthread_cond_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_pthread/_pthread_condattr_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_pthread/_pthread_mutex_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_pthread/_pthread_mutexattr_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_pthread/_pthread_once_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_pthread/_pthread_rwlock_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_pthread/_pthread_rwlockattr_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_pthread/_pthread_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_pthread/_pthread_key_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_fsblkcnt_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_fsfilcnt_t.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/_types/_nl_item.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__locale_dir/num.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__charconv/to_chars_integral.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/copy_n.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__charconv/tables.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__charconv/to_chars_base_10.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__charconv/to_chars_result.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__charconv/traits.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/make_32_64_or_128_bit.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/streambuf \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__locale_dir/wbuffer_convert.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__locale_dir/wstring_convert.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__memory/shared_ptr.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__functional/reference_wrapper.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__functional/weak_result_type.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__memory/allocation_guard.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__memory/allocator_destructor.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__memory/destroy.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__memory/uninitialized_algorithms.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/move.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__filesystem/operations.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__filesystem/perm_options.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__filesystem/space_info.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__filesystem/directory_iterator.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__filesystem/directory_options.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__filesystem/path_iterator.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__filesystem/recursive_directory_iterator.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__filesystem/u8path.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/vector \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__vector/comparison.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/lexicographical_compare.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/mismatch.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/simd_utils.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/aliasing_iterator.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/lexicographical_compare_three_way.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/three_way_comp_ref_type.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__fwd/vector.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__vector/swap.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__vector/vector.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/move_backward.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/copy_backward.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_copy_n.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/in_out_result.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_copy.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/unreachable_sentinel.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/rotate.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/swap_ranges.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/move_iterator.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/move_sentinel.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__memory/temp_value.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/aligned_storage.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__split_buffer \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__vector/container_traits.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__vector/vector_bool.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__bit_reference \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__vector/pmr.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__vector/erase.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__vector/vector_bool_formatter.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__format/formatter.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__fwd/format.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__format/formatter_bool.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__format/concepts.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__format/format_parse_context.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__format/format_error.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__format/formatter_integral.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__format/formatter_output.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_fill_n.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_transform.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/in_in_out_result.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/projected.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__format/buffer.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/transform.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__format/format_to_n_result.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__format/parser_std_format_spec.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__format/format_arg.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__variant/monostate.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__format/format_string.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__format/unicode.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__format/extended_grapheme_cluster_table.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_upper_bound.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/lower_bound.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/half_positive.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__functional/ranges_operations.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__format/indic_conjunct_break_table.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__format/width_estimation_table.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/array \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/static_bounded_iter.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/algorithm \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/adjacent_find.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/all_of.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/any_of.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/binary_search.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/copy_if.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/count.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__bit/popcount.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/count_if.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/equal_range.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/upper_bound.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/fill.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/find_if_not.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/for_each.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/generate.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/generate_n.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/includes.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/inplace_merge.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__memory/destruct_n.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__memory/unique_temporary_buffer.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/is_heap.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/is_heap_until.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/is_partitioned.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/is_sorted.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/is_sorted_until.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/make_heap.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/sift_down.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/merge.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/minmax.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/minmax_element.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/next_permutation.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/none_of.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/nth_element.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/sort.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/partial_sort.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/sort_heap.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/pop_heap.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/push_heap.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__debug_utils/strict_weak_ordering_check.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__debug_utils/randomize_range.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__bit/bit_log2.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__bit/blsr.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/partial_sort_copy.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/make_projected.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/partition.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/partition_copy.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/partition_point.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/prev_permutation.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/remove_copy.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/remove_copy_if.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/replace_copy_if.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/replace_if.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/reverse_copy.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/rotate_copy.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/search.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/search_n.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/set_difference.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/set_intersection.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/set_symmetric_difference.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/set_union.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/shuffle.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__random/uniform_int_distribution.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__random/is_valid.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__random/log2.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/stable_partition.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/stable_sort.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/radix_sort.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__numeric/partial_sum.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/unique.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/unique_copy.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/clamp.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/for_each_n.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/for_each_n_segment.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/pstl.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/sample.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/in_found_result.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/in_fun_result.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/in_in_result.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/in_out_out_result.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/min_max_result.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/out_value_result.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_adjacent_find.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_all_of.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_any_of.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_binary_search.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_clamp.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_contains.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_find.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_find_if.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/indirectly_comparable.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_copy_backward.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_copy_if.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_count.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_count_if.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_equal.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_equal_range.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_fill.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_find_end.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_find_first_of.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_find_if_not.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_for_each.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_for_each_n.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_generate.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_generate_n.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_includes.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_inplace_merge.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/sortable.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/permutable.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_is_heap.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_is_heap_until.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_is_partitioned.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_is_permutation.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_is_sorted.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_is_sorted_until.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_lexicographical_compare.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_lower_bound.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_make_heap.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_max.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_max_element.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_merge.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/mergeable.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_min.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_min_element.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_minmax.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_minmax_element.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_mismatch.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_move.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_move_backward.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_next_permutation.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_none_of.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_nth_element.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_partial_sort.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_partial_sort_copy.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_partition.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_partition_copy.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_partition_point.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_pop_heap.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_prev_permutation.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_push_heap.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_remove.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_remove_if.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_remove_copy.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_remove_copy_if.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_replace.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_replace_if.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_replace_copy.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_replace_copy_if.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_reverse.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_reverse_copy.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_rotate.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_rotate_copy.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_sample.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/uniform_random_bit_generator_adaptor.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__random/uniform_random_bit_generator.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_search.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_search_n.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_set_difference.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_set_intersection.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_set_symmetric_difference.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_set_union.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_shuffle.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_sort.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_sort_heap.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_stable_partition.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_stable_sort.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_swap_ranges.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_unique.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_unique_copy.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/shift_left.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/shift_right.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_contains_subrange.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_ends_with.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_starts_with.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_find_last.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/ranges_fold.h

View File

@@ -1387,12 +1387,70 @@ CMakeFiles/ModernEngine.dir/src/main.cpp.o: \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/netinet6/in6.h \ /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/netinet6/in6.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/poll.h \ /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/poll.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/poll.h \ /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/poll.h \
/opt/homebrew/include/glm/gtc/matrix_access.hpp \ /Users/will/Documents/zoomengine/src/Physics.h \
/opt/homebrew/include/glm/gtc/quaternion.hpp \
/opt/homebrew/include/glm/gtc/../gtc/constants.hpp \
/opt/homebrew/include/glm/gtc/../gtc/matrix_transform.hpp \
/opt/homebrew/include/glm/gtc/../ext/vector_relational.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/qualifier.hpp \
/opt/homebrew/include/glm/gtc/../ext/vector_relational.inl \
/opt/homebrew/include/glm/gtc/../ext/../vector_relational.hpp \
/opt/homebrew/include/glm/gtc/../ext/../common.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/type_float.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/setup.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_common.hpp \
/opt/homebrew/include/glm/gtc/../ext/../ext/quaternion_geometric.hpp \
/opt/homebrew/include/glm/gtc/../ext/../ext/../geometric.hpp \
/opt/homebrew/include/glm/gtc/../ext/../ext/../exponential.hpp \
/opt/homebrew/include/glm/gtc/../ext/../ext/../ext/vector_relational.hpp \
/opt/homebrew/include/glm/gtc/../ext/../ext/quaternion_geometric.inl \
/opt/homebrew/include/glm/gtc/../ext/../exponential.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_common.inl \
/opt/homebrew/include/glm/gtc/../ext/quaternion_float.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/type_quat.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../detail/type_mat3x3.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../detail/type_mat4x4.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../detail/type_vec3.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../detail/type_vec4.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../ext/vector_relational.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../ext/quaternion_relational.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../ext/../vector_relational.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../ext/quaternion_relational.inl \
/opt/homebrew/include/glm/gtc/../ext/../detail/../gtc/constants.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../gtc/matrix_transform.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/type_quat.inl \
/opt/homebrew/include/glm/gtc/../ext/../detail/../trigonometric.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../exponential.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../ext/quaternion_common.hpp \
/opt/homebrew/include/glm/gtc/../ext/../detail/../ext/quaternion_geometric.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_float_precision.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_double.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_double_precision.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_relational.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_geometric.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_trigonometric.hpp \
/opt/homebrew/include/glm/gtc/../ext/scalar_constants.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_trigonometric.inl \
/opt/homebrew/include/glm/gtc/../ext/quaternion_transform.hpp \
/opt/homebrew/include/glm/gtc/../ext/quaternion_transform.inl \
/opt/homebrew/include/glm/gtc/../detail/type_mat3x3.hpp \
/opt/homebrew/include/glm/gtc/../detail/type_mat4x4.hpp \
/opt/homebrew/include/glm/gtc/../detail/type_vec3.hpp \
/opt/homebrew/include/glm/gtc/../detail/type_vec4.hpp \
/opt/homebrew/include/glm/gtc/quaternion.inl \
/opt/homebrew/include/glm/gtc/../exponential.hpp \
/opt/homebrew/include/glm/gtc/epsilon.hpp \
/opt/homebrew/include/glm/gtc/../detail/setup.hpp \ /opt/homebrew/include/glm/gtc/../detail/setup.hpp \
/opt/homebrew/include/glm/gtc/../detail/qualifier.hpp \
/opt/homebrew/include/glm/gtc/epsilon.inl \
/opt/homebrew/include/glm/gtc/../vector_relational.hpp \
/opt/homebrew/include/glm/gtc/../common.hpp \
/opt/homebrew/include/glm/gtc/matrix_access.hpp \
/opt/homebrew/include/glm/gtc/matrix_access.inl \ /opt/homebrew/include/glm/gtc/matrix_access.inl \
/Users/will/Documents/zoomengine/src/Input.h \ /Users/will/Documents/zoomengine/src/Input.h \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/unordered_set \ /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/unordered_set \
/Users/will/Documents/zoomengine/src/MainMenu.h \ /Users/will/Documents/zoomengine/src/MainMenu.h \
/Users/will/Documents/zoomengine/src/TextureCache.h \
/Users/will/Documents/zoomengine/src/LevelEditor.cpp \ /Users/will/Documents/zoomengine/src/LevelEditor.cpp \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/random \ /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/random \
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__random/bernoulli_distribution.h \ /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__random/bernoulli_distribution.h \

View File

@@ -1 +1 @@
16 18

View File

@@ -297,6 +297,30 @@ src/OBJModelPrimitive.cpp.s:
$(MAKE) $(MAKESILENT) -f CMakeFiles/ModernEngine.dir/build.make CMakeFiles/ModernEngine.dir/src/OBJModelPrimitive.cpp.s $(MAKE) $(MAKESILENT) -f CMakeFiles/ModernEngine.dir/build.make CMakeFiles/ModernEngine.dir/src/OBJModelPrimitive.cpp.s
.PHONY : src/OBJModelPrimitive.cpp.s .PHONY : src/OBJModelPrimitive.cpp.s
src/Physics.o: src/Physics.cpp.o
.PHONY : src/Physics.o
# target to build an object file
src/Physics.cpp.o:
$(MAKE) $(MAKESILENT) -f CMakeFiles/ModernEngine.dir/build.make CMakeFiles/ModernEngine.dir/src/Physics.cpp.o
.PHONY : src/Physics.cpp.o
src/Physics.i: src/Physics.cpp.i
.PHONY : src/Physics.i
# target to preprocess a source file
src/Physics.cpp.i:
$(MAKE) $(MAKESILENT) -f CMakeFiles/ModernEngine.dir/build.make CMakeFiles/ModernEngine.dir/src/Physics.cpp.i
.PHONY : src/Physics.cpp.i
src/Physics.s: src/Physics.cpp.s
.PHONY : src/Physics.s
# target to generate assembly for a file
src/Physics.cpp.s:
$(MAKE) $(MAKESILENT) -f CMakeFiles/ModernEngine.dir/build.make CMakeFiles/ModernEngine.dir/src/Physics.cpp.s
.PHONY : src/Physics.cpp.s
src/Renderer.o: src/Renderer.cpp.o src/Renderer.o: src/Renderer.cpp.o
.PHONY : src/Renderer.o .PHONY : src/Renderer.o
@@ -417,6 +441,30 @@ src/SimpleTextureLoader.cpp.s:
$(MAKE) $(MAKESILENT) -f CMakeFiles/ModernEngine.dir/build.make CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.s $(MAKE) $(MAKESILENT) -f CMakeFiles/ModernEngine.dir/build.make CMakeFiles/ModernEngine.dir/src/SimpleTextureLoader.cpp.s
.PHONY : src/SimpleTextureLoader.cpp.s .PHONY : src/SimpleTextureLoader.cpp.s
src/TextureCache.o: src/TextureCache.cpp.o
.PHONY : src/TextureCache.o
# target to build an object file
src/TextureCache.cpp.o:
$(MAKE) $(MAKESILENT) -f CMakeFiles/ModernEngine.dir/build.make CMakeFiles/ModernEngine.dir/src/TextureCache.cpp.o
.PHONY : src/TextureCache.cpp.o
src/TextureCache.i: src/TextureCache.cpp.i
.PHONY : src/TextureCache.i
# target to preprocess a source file
src/TextureCache.cpp.i:
$(MAKE) $(MAKESILENT) -f CMakeFiles/ModernEngine.dir/build.make CMakeFiles/ModernEngine.dir/src/TextureCache.cpp.i
.PHONY : src/TextureCache.cpp.i
src/TextureCache.s: src/TextureCache.cpp.s
.PHONY : src/TextureCache.s
# target to generate assembly for a file
src/TextureCache.cpp.s:
$(MAKE) $(MAKESILENT) -f CMakeFiles/ModernEngine.dir/build.make CMakeFiles/ModernEngine.dir/src/TextureCache.cpp.s
.PHONY : src/TextureCache.cpp.s
src/Window.o: src/Window.cpp.o src/Window.o: src/Window.cpp.o
.PHONY : src/Window.o .PHONY : src/Window.o
@@ -519,6 +567,9 @@ help:
@echo "... src/OBJModelPrimitive.o" @echo "... src/OBJModelPrimitive.o"
@echo "... src/OBJModelPrimitive.i" @echo "... src/OBJModelPrimitive.i"
@echo "... src/OBJModelPrimitive.s" @echo "... src/OBJModelPrimitive.s"
@echo "... src/Physics.o"
@echo "... src/Physics.i"
@echo "... src/Physics.s"
@echo "... src/Renderer.o" @echo "... src/Renderer.o"
@echo "... src/Renderer.i" @echo "... src/Renderer.i"
@echo "... src/Renderer.s" @echo "... src/Renderer.s"
@@ -534,6 +585,9 @@ help:
@echo "... src/SimpleTextureLoader.o" @echo "... src/SimpleTextureLoader.o"
@echo "... src/SimpleTextureLoader.i" @echo "... src/SimpleTextureLoader.i"
@echo "... src/SimpleTextureLoader.s" @echo "... src/SimpleTextureLoader.s"
@echo "... src/TextureCache.o"
@echo "... src/TextureCache.i"
@echo "... src/TextureCache.s"
@echo "... src/Window.o" @echo "... src/Window.o"
@echo "... src/Window.i" @echo "... src/Window.i"
@echo "... src/Window.s" @echo "... src/Window.s"

Binary file not shown.

View File

@@ -10,6 +10,9 @@
{ "label": "Stress Test", "action": "stress" }, { "label": "Stress Test", "action": "stress" },
{ "label": "Spinning Monkey", "action": "monkey" }, { "label": "Spinning Monkey", "action": "monkey" },
{ "label": "Monkey Grid", "action": "monkeygrid" }, { "label": "Monkey Grid", "action": "monkeygrid" },
{ "label": "God Sandbox", "action": "god" },
{ "label": "Grass / Pools", "action": "grass" },
{ "label": "Sunset Forest", "action": "sunset" },
{ "label": "Level Editor", "action": "edit" }, { "label": "Level Editor", "action": "edit" },
{ "label": "Quit", "action": "quit" } { "label": "Quit", "action": "quit" }
] ]

View File

@@ -5,32 +5,24 @@ in vec3 Color;
out vec4 FragColor; out vec4 FragColor;
uniform vec3 uLightPos; uniform vec3 uSunDir;
uniform vec3 uSunColor;
uniform vec3 uSkyColor;
uniform vec3 uGroundColor;
uniform vec3 uViewPos; uniform vec3 uViewPos;
uniform vec3 uLightColor;
uniform float uAmbientStrength;
uniform float uSpecularStrength; uniform float uSpecularStrength;
uniform float uShininess; uniform float uShininess;
void main() { void main() {
// Normalize the normal vector vec3 N = normalize(Normal);
vec3 norm = normalize(Normal); float up = 0.5 + 0.5 * N.y;
vec3 ambient = mix(uGroundColor, uSkyColor, up);
// Ambient lighting float NdotL = max(dot(N, uSunDir), 0.0);
vec3 ambient = uAmbientStrength * uLightColor; vec3 diffuse = NdotL * uSunColor;
vec3 V = normalize(uViewPos - FragPos);
// Diffuse lighting vec3 H = normalize(uSunDir + V);
vec3 lightDir = normalize(uLightPos - FragPos); float spec = pow(max(dot(N, H), 0.0), uShininess) * (NdotL > 0.0 ? 1.0 : 0.0);
float diff = max(dot(norm, lightDir), 0.0); vec3 specular = uSpecularStrength * spec * uSunColor;
vec3 diffuse = diff * uLightColor; vec3 result = (ambient + diffuse) * Color + specular;
// Specular lighting
vec3 viewDir = normalize(uViewPos - FragPos);
vec3 reflectDir = reflect(-lightDir, norm);
float spec = pow(max(dot(viewDir, reflectDir), 0.0), uShininess);
vec3 specular = uSpecularStrength * spec * uLightColor;
// Combine results
vec3 result = (ambient + diffuse + specular) * Color;
FragColor = vec4(result, 1.0); FragColor = vec4(result, 1.0);
} }

27
build/worlds/desert.json Normal file
View File

@@ -0,0 +1,27 @@
{
"version":1,
"clear_color":[0.98,0.75,0.5],
"camera":{"position":[18,7,18],"target":[0,2,0]},
"objects":[
{"action":"create","type":"cylinder","id":"cactus5_body","position":[15,1.6,-8],"height":3.2,"scale":[1,1,1],"color":[0.26,0.5,0.24],"rotation":[0,0,0],"radius":0.42},
{"action":"create","type":"cylinder","id":"cactus3_armR","position":[10.7,2,2],"height":1.2,"scale":[1,1,1],"color":[0.28,0.52,0.26],"rotation":[0,0,0],"radius":0.2},
{"action":"create","type":"cylinder","id":"cactus3_body","position":[10,1.5,2],"height":3,"scale":[1,1,1],"color":[0.28,0.52,0.26],"rotation":[0,0,0],"radius":0.4},
{"action":"create","type":"cylinder","id":"cactus4_armL","position":[-12.9,2.8,4],"height":1.6,"scale":[1,1,1],"color":[0.24,0.5,0.24],"rotation":[0,0,0],"radius":0.25},
{"action":"create","type":"cylinder","id":"cactus2_armL","position":[-6.8,2.3,-7],"height":1.4,"scale":[1,1,1],"color":[0.22,0.48,0.22],"rotation":[0,0,0],"radius":0.22},
{"action":"create","type":"cylinder","id":"cactus2_body","position":[-6,1.8,-7],"height":3.6,"scale":[1,1,1],"color":[0.22,0.48,0.22],"rotation":[0,0,0],"radius":0.45},
{"action":"create","type":"cylinder","id":"cactus1_body","position":[2,2,-5],"height":4,"scale":[1,1,1],"color":[0.25,0.5,0.25],"rotation":[0,0,0],"radius":0.5},
{"action":"create","type":"cylinder","id":"cactus4_armR","position":[-11.1,3.1,4],"height":1.3,"scale":[1,1,1],"color":[0.24,0.5,0.24],"rotation":[0,0,0],"radius":0.22},
{"action":"create","type":"sphere","id":"rock5","position":[12,0.4,8],"scale":[1,0.7,1.1],"color":[0.48,0.36,0.28],"rotation":[0,0,0]},
{"action":"create","type":"cylinder","id":"cactus6_body","position":[-3,1.3,11],"height":2.6,"scale":[1,1,1],"color":[0.25,0.48,0.25],"rotation":[0,0,0],"radius":0.35},
{"action":"create","type":"cylinder","id":"cactus1_armL","position":[1.3,2.5,-5],"height":1.5,"scale":[1,1,1],"color":[0.25,0.5,0.25],"rotation":[0,0,0],"radius":0.25},
{"action":"create","type":"cylinder","id":"cactus4_body","position":[-12,2.2,4],"height":4.4,"scale":[1,1,1],"color":[0.24,0.5,0.24],"rotation":[0,0,0],"radius":0.55},
{"action":"create","type":"sphere","id":"rock2","position":[-4,0.3,6],"scale":[0.9,0.6,0.9],"color":[0.45,0.35,0.28],"rotation":[0,0,0]},
{"action":"create","type":"sphere","id":"rock1","position":[5,0.4,3],"scale":[1.2,0.8,1],"color":[0.5,0.38,0.3],"rotation":[0,0,0]},
{"action":"create","type":"sphere","id":"rock3","position":[8,0.5,-4],"scale":[1.5,1,1.3],"color":[0.55,0.42,0.32],"rotation":[0,0,0]},
{"action":"create","type":"sphere","id":"sun","position":[-20,12,-35],"scale":[5,5,5],"color":[1,0.85,0.55],"rotation":[0,0,0]},
{"action":"create","type":"cylinder","id":"cactus1_armR","position":[2.7,2.8,-5],"height":1.3,"scale":[1,1,1],"color":[0.25,0.5,0.25],"rotation":[0,0,0],"radius":0.25},
{"action":"create","type":"sphere","id":"rock6","position":[-14,0.4,10],"scale":[1.3,0.9,1.2],"color":[0.52,0.4,0.3],"rotation":[0,0,0]},
{"action":"create","type":"sphere","id":"rock4","position":[-9,0.3,-2],"scale":[0.8,0.5,0.8],"color":[0.5,0.4,0.3],"rotation":[0,0,0]},
{"action":"create","type":"terrain","id":"sand","max_height":2.5,"position":[0,0,0],"scale":[1,1,1],"resolution":60,"size":80,"color":[0.93,0.78,0.5],"rotation":[0,0,0]}
]
}

1
requirements.txt Normal file
View File

@@ -0,0 +1 @@
anthropic>=0.45.0

View File

@@ -69,6 +69,15 @@
// Spawn text in world (billboard): // Spawn text in world (billboard):
// {"action":"log","message":"Hello from AI"} // {"action":"log","message":"Hello from AI"}
// //
// Save current world to worlds/<name>.json:
// {"action":"save_world","name":"desert"}
//
// Load world from worlds/<name>.json (wipes current):
// {"action":"load_world","name":"desert"}
//
// List available worlds:
// {"action":"list_worlds"}
//
struct AgentCommand { struct AgentCommand {
json::Value data; json::Value data;

File diff suppressed because it is too large Load Diff

View File

@@ -11,7 +11,9 @@
#include "Settings.h" #include "Settings.h"
#include "Audio.h" #include "Audio.h"
#include "AgentAPI.h" #include "AgentAPI.h"
#include "Physics.h"
#include <glm/gtc/matrix_access.hpp> #include <glm/gtc/matrix_access.hpp>
#include <unordered_map>
// Forward declarations // Forward declarations
@@ -55,6 +57,8 @@ public:
void SetCameraPosition(const glm::vec3& position); void SetCameraPosition(const glm::vec3& position);
void SetCameraTarget(const glm::vec3& target); void SetCameraTarget(const glm::vec3& target);
void SetCameraOrbit(float distance, float angle, float height = 5.0f); void SetCameraOrbit(float distance, float angle, float height = 5.0f);
const glm::vec3& GetCameraPosition() const { return camera_position_; }
const glm::vec3& GetCameraTarget() const { return camera_target_; }
GLuint text_vao = 0, text_vbo = 0; GLuint text_vao = 0, text_vbo = 0;
@@ -67,25 +71,58 @@ public:
private: private:
ThreadPool threadPool_; ThreadPool threadPool_;
// Culling result structure // Culling result structure — now keyed by (primitive, texture) so batches
struct CullingBatch { // can be issued per-texture.
struct BatchKey {
Primitive* primitive; Primitive* primitive;
GLuint texture;
GLuint normal_map;
glm::vec2 uv_scale;
float metallic;
float roughness;
glm::vec3 emissive;
bool operator==(const BatchKey& o) const {
return primitive == o.primitive && texture == o.texture
&& normal_map == o.normal_map && uv_scale == o.uv_scale
&& metallic == o.metallic && roughness == o.roughness
&& emissive == o.emissive;
}
};
struct BatchKeyHash {
size_t operator()(const BatchKey& k) const noexcept {
auto mix = [](size_t a, size_t b) {
return a ^ (b + 0x9e3779b9 + (a << 6) + (a >> 2));
};
size_t h = std::hash<void*>()((void*)k.primitive);
h = mix(h, std::hash<GLuint>()(k.texture));
h = mix(h, std::hash<GLuint>()(k.normal_map));
h = mix(h, std::hash<float>()(k.uv_scale.x));
h = mix(h, std::hash<float>()(k.uv_scale.y));
h = mix(h, std::hash<float>()(k.metallic));
h = mix(h, std::hash<float>()(k.roughness));
h = mix(h, std::hash<float>()(k.emissive.x));
h = mix(h, std::hash<float>()(k.emissive.y));
h = mix(h, std::hash<float>()(k.emissive.z));
return h;
}
};
struct CullingBatch {
BatchKey key{};
std::vector<glm::mat4> modelMatrices; std::vector<glm::mat4> modelMatrices;
}; };
using CullingResult = std::vector<CullingBatch>; using CullingResult = std::vector<CullingBatch>;
// Helper methods
CullingResult CullObjectsSubset( CullingResult CullObjectsSubset(
const std::vector<GameObject*>& objects, const std::vector<GameObject*>& objects,
size_t startIdx, size_t startIdx,
size_t endIdx, size_t endIdx,
const glm::mat4& viewProjection const glm::mat4& viewProjection
); );
void MergeCullingResults( void MergeCullingResults(
const std::vector<CullingResult>& results, const std::vector<CullingResult>& results,
std::unordered_map<Primitive*, std::vector<glm::mat4>>& outBatches std::unordered_map<BatchKey, std::vector<glm::mat4>, BatchKeyHash>& outBatches
); );
static bool CullSphere(const glm::mat4& vp, static bool CullSphere(const glm::mat4& vp,
@@ -149,10 +186,114 @@ protected:
// Agent API server // Agent API server
AgentAPI agentApi_; AgentAPI agentApi_;
std::unordered_map<std::string, std::shared_ptr<GameObject>> namedObjects_; std::unordered_map<std::string, std::shared_ptr<GameObject>> namedObjects_;
std::unordered_map<std::string, json::Value> namedObjectCreationParams_;
glm::vec3 clear_color_ = glm::vec3(0.1f);
// Physics
phys::World physics_;
std::unordered_map<std::string, int> bodyHandleByName_;
void SyncPhysicsWriteback();
// Sky / sun
glm::vec3 sun_dir_ = glm::normalize(glm::vec3(-0.35f, 0.9f, -0.25f));
glm::vec3 sun_color_ = glm::vec3(1.4f, 1.25f, 1.0f);
glm::vec3 sky_color_ = glm::vec3(0.55f, 0.68f, 0.85f);
glm::vec3 zenith_color_ = glm::vec3(0.35f, 0.5f, 0.78f);
glm::vec3 horizon_color_ = glm::vec3(0.75f, 0.82f, 0.92f);
glm::vec3 ground_color_ = glm::vec3(0.22f, 0.20f, 0.18f);
GLuint sky_program_ = 0;
GLuint sky_vao_ = 0;
GLuint sky_vbo_ = 0;
void InitSky();
void RenderSky(const glm::mat4& view, const glm::mat4& proj);
// Water
bool water_enabled_ = false;
float water_level_ = 0.0f;
float water_amplitude_ = 0.3f;
float water_wavelength_ = 8.0f;
float water_speed_ = 1.0f;
float water_size_ = 120.0f;
glm::vec3 water_color_shallow_ = glm::vec3(0.25f, 0.55f, 0.6f);
glm::vec3 water_color_deep_ = glm::vec3(0.02f, 0.12f, 0.22f);
GLuint water_program_ = 0;
GLuint water_vao_ = 0;
GLuint water_vbo_ = 0;
GLuint water_ebo_ = 0;
int water_index_count_ = 0;
void InitWater();
void RebuildWaterMesh(int resolution);
void RenderWater(const glm::mat4& view, const glm::mat4& proj);
// Secondary water patch — visual-only, localized, at arbitrary height.
// Shares the primary water shader but has its own mesh + per-patch params.
struct SecWater {
bool enabled = false;
glm::vec3 center = glm::vec3(0);
float size = 40.0f;
float level = 5.0f;
float amplitude = 0.08f;
float wavelength = 5.0f;
float speed = 0.6f;
glm::vec3 shallow = glm::vec3(0.35f, 0.55f, 0.6f);
glm::vec3 deep = glm::vec3(0.05f, 0.15f, 0.22f);
GLuint vao = 0, vbo = 0, ebo = 0;
int idx_count = 0;
};
SecWater sec_water_;
void RebuildSecWaterMesh(int resolution);
void RenderSecWater(const glm::mat4& view, const glm::mat4& proj);
// Weather — drives wave amplitude, choppiness, sky darkening, current
float wind_speed_ = 0.0f;
glm::vec2 wind_dir_xz_ = glm::vec2(1.0f, 0.0f); // normalized XZ
float storminess_ = 0.0f; // 0 calm, 1 gale
float AmpScale() const { return 1.0f + storminess_ * 2.0f; }
float ChopScale() const { return 1.0f + storminess_ * 1.5f; }
// Shadow map (directional sun, single cascade)
static constexpr int SHADOW_SIZE = 2048;
GLuint shadow_fbo_ = 0;
GLuint shadow_map_ = 0;
GLuint shadow_program_ = 0;
glm::mat4 light_vp_ = glm::mat4(1.0f);
float shadow_extent_ = 50.0f; // half-width of ortho frustum
void InitShadowMap();
void RenderShadowPass();
glm::mat4 ComputeLightVP() const;
// HDR + post-process pipeline
static constexpr int MSAA_SAMPLES = 4;
GLuint hdr_fbo_ms_ = 0; // multisample render target for scene
GLuint hdr_color_ms_ = 0;
GLuint hdr_depth_rb_ = 0;
GLuint hdr_fbo_ = 0; // resolved single-sample target (read for bloom/composite)
GLuint hdr_color_ = 0;
int post_w_ = 0, post_h_ = 0; // current FBO size, recreate on mismatch
GLuint bloom_fbo_[2] = {0, 0};
GLuint bloom_tex_[2] = {0, 0};
int bloom_w_ = 0, bloom_h_ = 0;
GLuint bloom_extract_program_ = 0;
GLuint bloom_blur_program_ = 0;
GLuint composite_program_ = 0;
GLuint fullscreen_vao_ = 0;
// Look controls
float exposure_ = 1.0f;
float bloom_threshold_ = 1.2f;
float bloom_intensity_ = 0.8f;
float fog_density_ = 0.0025f;
void InitPostFBOs();
void EnsurePostFBOs();
void InitPostShaders();
void RenderBloom();
void CompositeToScreen();
std::string agentLog_; std::string agentLog_;
float agentLogTimer_ = 0.0f; float agentLogTimer_ = 0.0f;
void processAgentCommands(); void processAgentCommands();
std::string processAgentCommand(const json::Value& cmd); std::string processAgentCommand(const json::Value& cmd);
public:
std::string saveWorldToFile(const std::string& path);
std::string loadWorldFromFile(const std::string& path);
@@ -171,6 +312,7 @@ public:
virtual GLsizei GetIndexCount() const { return index_count_; } virtual GLsizei GetIndexCount() const { return index_count_; }
virtual GLsizei GetVertexCount() const { return vertex_count_; } virtual GLsizei GetVertexCount() const { return vertex_count_; }
virtual void Bind() const { glBindVertexArray(vao_); } virtual void Bind() const { glBindVertexArray(vao_); }
float GetIntrinsicRadius() const { return intrinsic_radius_; }
protected: protected:
@@ -181,6 +323,7 @@ protected:
GLsizei vertex_count_ = 0; GLsizei vertex_count_ = 0;
GLenum draw_mode_ = GL_TRIANGLES; GLenum draw_mode_ = GL_TRIANGLES;
glm::vec3 color_; glm::vec3 color_;
float intrinsic_radius_ = 1.732f; // default: unit-cube corner-to-center
}; };
// GameObject class // GameObject class
@@ -192,6 +335,8 @@ public:
float GetBoundingRadius() const; float GetBoundingRadius() const;
glm::vec3 GetPosition() const { return position_; } glm::vec3 GetPosition() const { return position_; }
glm::vec3 GetRotation() const { return rotation_; }
glm::vec3 GetScale() const { return scale_; }
glm::mat4 GetModelMatrix() const; glm::mat4 GetModelMatrix() const;
void Render(); void Render();
void Cleanup(); void Cleanup();
@@ -200,9 +345,29 @@ public:
void SetRotation(const glm::vec3& r) { rotation_ = r; } void SetRotation(const glm::vec3& r) { rotation_ = r; }
void SetScale(const glm::vec3& s) { scale_ = s; } void SetScale(const glm::vec3& s) { scale_ = s; }
void SetTexture(GLuint tex) { texture_ = tex; }
GLuint GetTexture() const { return texture_; }
void SetUVScale(const glm::vec2& s) { uv_scale_ = s; }
glm::vec2 GetUVScale() const { return uv_scale_; }
void SetNormalMap(GLuint tex) { normal_map_ = tex; }
GLuint GetNormalMap() const { return normal_map_; }
void SetMetallic(float v) { metallic_ = v; }
float GetMetallic() const { return metallic_; }
void SetRoughness(float v) { roughness_ = std::max(0.02f, v); }
float GetRoughness() const { return roughness_; }
void SetEmissive(const glm::vec3& v) { emissive_ = v; }
glm::vec3 GetEmissive() const { return emissive_; }
private: private:
std::shared_ptr<Primitive> primitive_; std::shared_ptr<Primitive> primitive_;
glm::vec3 position_; glm::vec3 position_;
glm::vec3 rotation_; glm::vec3 rotation_;
glm::vec3 scale_{1.0f}; glm::vec3 scale_{1.0f};
GLuint texture_ = 0;
GLuint normal_map_ = 0;
glm::vec2 uv_scale_{1.0f};
float metallic_ = 0.0f;
float roughness_ = 0.7f;
glm::vec3 emissive_ = glm::vec3(0.0f);
}; };

762
src/Physics.cpp Normal file
View File

@@ -0,0 +1,762 @@
#include "Physics.h"
#include <algorithm>
#include <cmath>
#include <glm/gtc/constants.hpp>
namespace phys {
namespace {
constexpr float kSleepLinearSq = 0.05f * 0.05f;
constexpr float kSleepAngularSq = 0.1f * 0.1f;
constexpr float kSleepTime = 0.5f;
constexpr float kPenetrationSlop = 0.005f;
constexpr float kBaumgarte = 0.2f;
// --- Small helpers -------------------------------------------------------
glm::mat3 BoxInertiaTensor(float mass, const glm::vec3& h) {
// h = half-extents; full size = 2h.
float x2 = (2.0f * h.x) * (2.0f * h.x);
float y2 = (2.0f * h.y) * (2.0f * h.y);
float z2 = (2.0f * h.z) * (2.0f * h.z);
float k = mass / 12.0f;
return glm::mat3(
k * (y2 + z2), 0.0f, 0.0f,
0.0f, k * (x2 + z2), 0.0f,
0.0f, 0.0f, k * (x2 + y2)
);
}
glm::mat3 SphereInertiaTensor(float mass, float radius) {
float v = (2.0f / 5.0f) * mass * radius * radius;
return glm::mat3(v, 0, 0, 0, v, 0, 0, 0, v);
}
glm::mat3 Inverse3(const glm::mat3& m) {
// glm::inverse handles this, but we keep local to make zero-diag safe.
glm::mat3 r(0.0f);
if (m[0][0] > 0) r[0][0] = 1.0f / m[0][0];
if (m[1][1] > 0) r[1][1] = 1.0f / m[1][1];
if (m[2][2] > 0) r[2][2] = 1.0f / m[2][2];
return r;
}
void RecomputeInvInertiaWorld(Body& b) {
if (b.is_static || b.inv_mass == 0.0f) {
b.inv_inertia_world = glm::mat3(0.0f);
return;
}
glm::mat3 R = glm::mat3_cast(b.orientation);
b.inv_inertia_world = R * b.inv_inertia_local * glm::transpose(R);
}
void ComputeBasis(const glm::vec3& n, glm::vec3& t1, glm::vec3& t2) {
if (std::abs(n.x) >= 0.57735f)
t1 = glm::normalize(glm::vec3(n.y, -n.x, 0.0f));
else
t1 = glm::normalize(glm::vec3(0.0f, n.z, -n.y));
t2 = glm::cross(n, t1);
}
glm::vec3 VelAtPoint(const Body& b, const glm::vec3& r) {
return b.linear_velocity + glm::cross(b.angular_velocity, r);
}
// --- Collision tests -----------------------------------------------------
// Returns support point of an OBB in world space along direction d.
glm::vec3 BoxSupport(const Body& box, const glm::vec3& d) {
glm::mat3 R = glm::mat3_cast(box.orientation);
glm::vec3 ld = glm::transpose(R) * d;
glm::vec3 lp(
ld.x >= 0 ? box.half_extents.x : -box.half_extents.x,
ld.y >= 0 ? box.half_extents.y : -box.half_extents.y,
ld.z >= 0 ? box.half_extents.z : -box.half_extents.z
);
return box.position + R * lp;
}
} // namespace
int World::AddBody(const Body& b) {
int handle = (int)bodies_.size();
bodies_.push_back(b);
Body& nb = bodies_.back();
nb.handle = handle;
nb.alive = true;
if (nb.is_static) nb.inv_mass = 0.0f;
if (nb.shape == Shape::Sphere && nb.inv_mass > 0.0f) {
float mass = 1.0f / nb.inv_mass;
nb.inv_inertia_local = Inverse3(SphereInertiaTensor(mass, nb.half_extents.x));
} else if (nb.shape == Shape::Box && nb.inv_mass > 0.0f) {
float mass = 1.0f / nb.inv_mass;
nb.inv_inertia_local = Inverse3(BoxInertiaTensor(mass, nb.half_extents));
} else {
nb.inv_inertia_local = glm::mat3(0.0f);
}
RecomputeInvInertiaWorld(nb);
return handle;
}
void World::RemoveBody(int handle) {
if (handle < 0 || handle >= (int)bodies_.size()) return;
bodies_[handle].alive = false;
}
Body* World::Get(int handle) {
if (handle < 0 || handle >= (int)bodies_.size()) return nullptr;
return bodies_[handle].alive ? &bodies_[handle] : nullptr;
}
const Body* World::Get(int handle) const {
if (handle < 0 || handle >= (int)bodies_.size()) return nullptr;
return bodies_[handle].alive ? &bodies_[handle] : nullptr;
}
void World::Step(float real_dt) {
if (!enabled) return;
if (real_dt > 0.25f) real_dt = 0.25f; // avoid spiral of death
accumulator_ += real_dt;
while (accumulator_ >= fixed_dt) {
IntegrateForces(fixed_dt);
DetectCollisions();
PrepareSolver(fixed_dt);
WarmStart();
for (int i = 0; i < solver_iterations; ++i) SolveVelocities();
IntegrateVelocities(fixed_dt);
UpdateSleep(fixed_dt);
prev_contacts_ = contacts_;
accumulator_ -= fixed_dt;
}
}
void World::IntegrateForces(float dt) {
static const int kBoxSigns[8][3] = {
{-1,-1,-1},{ 1,-1,-1},{-1, 1,-1},{ 1, 1,-1},
{-1,-1, 1},{ 1,-1, 1},{-1, 1, 1},{ 1, 1, 1}
};
for (auto& b : bodies_) {
if (!b.alive || b.is_static || b.inv_mass == 0.0f) continue;
if (b.sleeping) continue;
glm::vec3 net_accel = gravity + b.force_accum * b.inv_mass;
glm::vec3 total_torque = b.torque_accum;
float submerged_frac_agg = 0.0f;
if (water_enabled && b.shape != Shape::Plane) {
if (b.shape == Shape::Sphere) {
float r = b.half_extents.x;
float wy = SampleWaterY(b.position.x, b.position.z);
float d = wy - (b.position.y - r);
if (d > 0.0f) {
float h = std::min(d, 2.0f * r);
float cap_vol = glm::pi<float>() * h * h * (3.0f * r - h) / 3.0f;
float full_vol = (4.0f / 3.0f) * glm::pi<float>() * r * r * r;
float frac = cap_vol / full_vol;
net_accel += -gravity * water_density * frac;
submerged_frac_agg = frac;
}
} else { // Box — sample 8 corners against the wave surface
glm::mat3 R = glm::mat3_cast(b.orientation);
float body_mass = 1.0f / b.inv_mass;
glm::vec3 total_force(0.0f);
float diag_y = 2.0f * b.half_extents.y;
int submerged_count = 0;
for (int i = 0; i < 8; ++i) {
glm::vec3 local = b.half_extents *
glm::vec3(kBoxSigns[i][0], kBoxSigns[i][1], kBoxSigns[i][2]);
glm::vec3 corner = b.position + R * local;
float wy = SampleWaterY(corner.x, corner.z);
float d = wy - corner.y;
if (d <= 0.0f) continue;
++submerged_count;
float frac = std::min(1.0f, d / diag_y);
submerged_frac_agg += frac / 8.0f;
glm::vec3 accel_i = -gravity * water_density * (frac / 8.0f);
glm::vec3 force_i = accel_i * body_mass;
glm::vec3 r = corner - b.position;
total_force += force_i;
total_torque += glm::cross(r, force_i);
}
net_accel += total_force * b.inv_mass;
(void)submerged_count;
}
// Surface current from wind
if (submerged_frac_agg > 0.0f && wind_speed > 0.0f) {
glm::vec3 wind3(wind_dir_xz.x, 0.0f, wind_dir_xz.y);
float lw = glm::length(wind3);
if (lw > 1e-5f) wind3 /= lw;
net_accel += wind3 * wind_speed * current_coef * submerged_frac_agg;
}
// Directional water flow (rivers, waterfalls)
if (submerged_frac_agg > 0.0f && water_flow_speed > 0.0f) {
glm::vec3 flow3(water_flow_dir.x, 0.0f, water_flow_dir.y);
float lf = glm::length(flow3);
if (lf > 1e-5f) flow3 /= lf;
net_accel += flow3 * water_flow_speed * submerged_frac_agg;
}
if (submerged_frac_agg > 0.0f) {
b.linear_velocity *= std::max(0.0f,
1.0f - water_drag_linear * submerged_frac_agg * dt);
b.angular_velocity *= std::max(0.0f,
1.0f - water_drag_angular * submerged_frac_agg * dt);
}
}
b.linear_velocity += net_accel * dt;
b.angular_velocity += b.inv_inertia_world * total_torque * dt;
b.linear_velocity *= std::max(0.0f, 1.0f - b.linear_damping * dt);
b.angular_velocity *= std::max(0.0f, 1.0f - b.angular_damping * dt);
b.force_accum = glm::vec3(0.0f);
b.torque_accum = glm::vec3(0.0f);
}
}
float World::SampleWaterY(float x, float z) const {
// MUST stay in sync with the water vertex shader's Gerstner arrays.
static const float DIRS[10][2] = {
{ 1.00f, 0.00f},
{ 0.71f, -0.71f},
{-0.41f, 0.91f},
{-0.85f, -0.52f},
{ 0.30f, 0.95f},
{ 0.88f, 0.47f},
{-0.94f, 0.33f},
{ 0.60f, -0.80f},
{-0.15f, -0.99f},
{ 0.43f, 0.90f}
};
static const float AMP_SCALE[10] = {
0.70f, 0.46f, 0.32f, 0.25f, 0.18f, 0.14f, 0.11f, 0.08f, 0.06f, 0.05f };
static const float LEN_SCALE[10] = {
1.00f, 0.77f, 0.59f, 0.46f, 0.36f, 0.28f, 0.22f, 0.17f, 0.13f, 0.10f };
static const float SPEED_SCALE[10] = {
1.00f, 1.23f, 0.82f, 1.37f, 0.91f, 1.19f, 0.75f, 1.48f, 1.07f, 0.88f };
float y = water_level;
for (int i = 0; i < 10; ++i) {
float dx = DIRS[i][0], dz = DIRS[i][1];
float nrm = std::sqrt(dx * dx + dz * dz);
dx /= nrm; dz /= nrm;
float L = water_wavelength * LEN_SCALE[i];
float w = 2.0f * glm::pi<float>() / L;
float A = water_amplitude * AMP_SCALE[i] * water_amp_scale;
float phi = water_time * water_speed * SPEED_SCALE[i] * std::sqrt(9.81f * w);
float theta = (dx * x + dz * z) * w + phi;
y += A * std::sin(theta);
}
return y;
}
void World::DetectCollisions() {
contacts_.clear();
const int n = (int)bodies_.size();
for (int i = 0; i < n; ++i) {
if (!bodies_[i].alive) continue;
for (int j = i + 1; j < n; ++j) {
if (!bodies_[j].alive) continue;
const Body& A = bodies_[i];
const Body& B = bodies_[j];
if (A.is_static && B.is_static) continue;
if (A.sleeping && B.sleeping) continue;
TestPair(i, j);
}
}
}
void World::TestPair(int ia, int ib) {
const Body& A = bodies_[ia];
const Body& B = bodies_[ib];
// Normalize ordering so Sphere is always 'a' for asymmetric pairs.
auto swap01 = [](Shape s0, Shape s1) {
return std::make_pair(s0, s1);
};
auto [sa, sb] = swap01(A.shape, B.shape);
if (sa == Shape::Sphere && sb == Shape::Sphere) {
SphereSphere(A, B, ia, ib);
} else if (sa == Shape::Sphere && sb == Shape::Plane) {
SpherePlane(A, B, ia, ib);
} else if (sa == Shape::Plane && sb == Shape::Sphere) {
SpherePlane(B, A, ib, ia);
} else if (sa == Shape::Sphere && sb == Shape::Box) {
SphereBox(A, B, ia, ib);
} else if (sa == Shape::Box && sb == Shape::Sphere) {
SphereBox(B, A, ib, ia);
} else if (sa == Shape::Box && sb == Shape::Plane) {
BoxPlane(A, B, ia, ib);
} else if (sa == Shape::Plane && sb == Shape::Box) {
BoxPlane(B, A, ib, ia);
} else if (sa == Shape::Box && sb == Shape::Box) {
BoxBox(A, B, ia, ib);
}
// Plane-plane intentionally skipped.
}
void World::SphereSphere(const Body& A, const Body& B, int ia, int ib) {
glm::vec3 d = B.position - A.position;
float r = A.half_extents.x + B.half_extents.x;
float d2 = glm::dot(d, d);
if (d2 >= r * r) return;
float dist = std::sqrt(std::max(d2, 1e-12f));
glm::vec3 n = (dist > 1e-6f) ? d / dist : glm::vec3(0.0f, 1.0f, 0.0f);
Contact c;
c.a = ia; c.b = ib;
c.normal = n;
c.penetration = r - dist;
c.point = A.position + n * A.half_extents.x;
contacts_.push_back(c);
}
void World::SpherePlane(const Body& s, const Body& p, int is, int ip) {
float d = glm::dot(p.plane_normal, s.position) - p.plane_offset;
float pen = s.half_extents.x - d;
if (pen <= 0.0f) return;
Contact c;
c.a = is; c.b = ip;
c.normal = -p.plane_normal; // A (sphere) → B (plane)
c.penetration = pen;
c.point = s.position - p.plane_normal * s.half_extents.x;
contacts_.push_back(c);
}
void World::SphereBox(const Body& s, const Body& box, int is, int ib) {
glm::mat3 R = glm::mat3_cast(box.orientation);
glm::vec3 rel = glm::transpose(R) * (s.position - box.position);
glm::vec3 closest = glm::clamp(rel, -box.half_extents, box.half_extents);
glm::vec3 diff = rel - closest;
float d2 = glm::dot(diff, diff);
float r = s.half_extents.x;
if (d2 >= r * r) return;
glm::vec3 n_local;
float dist;
if (d2 > 1e-12f) {
dist = std::sqrt(d2);
n_local = diff / dist;
} else {
// Sphere center inside box — pick axis of minimum penetration.
glm::vec3 pen_axes = box.half_extents - glm::abs(rel);
if (pen_axes.x < pen_axes.y && pen_axes.x < pen_axes.z) {
n_local = glm::vec3(rel.x < 0 ? -1.0f : 1.0f, 0, 0);
dist = -pen_axes.x;
} else if (pen_axes.y < pen_axes.z) {
n_local = glm::vec3(0, rel.y < 0 ? -1.0f : 1.0f, 0);
dist = -pen_axes.y;
} else {
n_local = glm::vec3(0, 0, rel.z < 0 ? -1.0f : 1.0f);
dist = -pen_axes.z;
}
}
glm::vec3 n_world = R * n_local; // points from box toward sphere center
glm::vec3 contact_world = box.position + R * closest;
Contact c;
// Our convention: normal points from A(sphere) toward B(box)
// If is < ib our 'a' is the sphere. But caller may pass s as 'A' regardless
// of handle order. We push what DetectCollisions expects using (is, ib).
c.a = is;
c.b = ib;
c.normal = -n_world; // sphere -> box
c.penetration = r - dist;
c.point = contact_world;
contacts_.push_back(c);
}
void World::BoxPlane(const Body& box, const Body& p, int ib, int ip) {
glm::mat3 R = glm::mat3_cast(box.orientation);
// For each of 8 vertices, test against plane. Push contact per-penetrating.
static const glm::vec3 kSigns[8] = {
{-1,-1,-1},{ 1,-1,-1},{-1, 1,-1},{ 1, 1,-1},
{-1,-1, 1},{ 1,-1, 1},{-1, 1, 1},{ 1, 1, 1}
};
int added = 0;
for (int i = 0; i < 8; ++i) {
glm::vec3 lp = box.half_extents * kSigns[i];
glm::vec3 wp = box.position + R * lp;
float d = glm::dot(p.plane_normal, wp) - p.plane_offset;
if (d < 0.0f) {
Contact c;
c.a = ib; c.b = ip;
c.normal = -p.plane_normal; // box -> plane
c.penetration = -d;
c.point = wp;
contacts_.push_back(c);
if (++added >= 4) break; // manifold cap
}
}
}
// --- SAT Box-Box ---------------------------------------------------------
namespace {
struct BoxAxes {
glm::vec3 c;
glm::vec3 u[3]; // world-space basis columns of R (unit length)
glm::vec3 h; // half-extents
};
BoxAxes MakeAxes(const Body& box) {
BoxAxes out;
out.c = box.position;
glm::mat3 R = glm::mat3_cast(box.orientation);
out.u[0] = R[0]; out.u[1] = R[1]; out.u[2] = R[2];
out.h = box.half_extents;
return out;
}
float ProjectOBB(const BoxAxes& a, const glm::vec3& axis) {
return a.h.x * std::abs(glm::dot(a.u[0], axis))
+ a.h.y * std::abs(glm::dot(a.u[1], axis))
+ a.h.z * std::abs(glm::dot(a.u[2], axis));
}
// Clip polygon by half-space n·x <= d (returns clipped vertices).
std::vector<glm::vec3> ClipPoly(const std::vector<glm::vec3>& in,
const glm::vec3& n, float d) {
std::vector<glm::vec3> out;
out.reserve(in.size() + 1);
if (in.empty()) return out;
for (size_t i = 0; i < in.size(); ++i) {
const glm::vec3& cur = in[i];
const glm::vec3& prev = in[(i + in.size() - 1) % in.size()];
float dc = glm::dot(n, cur) - d;
float dp = glm::dot(n, prev) - d;
bool cur_in = dc <= 0.0f;
bool prev_in = dp <= 0.0f;
if (prev_in ^ cur_in) {
float t = dp / (dp - dc);
out.push_back(prev + (cur - prev) * t);
}
if (cur_in) out.push_back(cur);
}
return out;
}
} // namespace
void World::BoxBox(const Body& A, const Body& B, int ia, int ib) {
BoxAxes a = MakeAxes(A);
BoxAxes b = MakeAxes(B);
glm::vec3 t = b.c - a.c;
// Build matrix of dot products between A and B axes.
float Rm[3][3], AbsR[3][3];
const float kEps = 1e-6f;
for (int i = 0; i < 3; ++i)
for (int j = 0; j < 3; ++j) {
Rm[i][j] = glm::dot(a.u[i], b.u[j]);
AbsR[i][j] = std::abs(Rm[i][j]) + kEps;
}
float t_a[3] = {
glm::dot(t, a.u[0]), glm::dot(t, a.u[1]), glm::dot(t, a.u[2])
};
float best_overlap = std::numeric_limits<float>::max();
int best_axis_type = -1; // 0=A face, 1=B face, 2=edge cross
int best_axis_index = 0; // face index, or i*3+j for edge
float best_sign = 1.0f; // axis direction sign toward B
glm::vec3 best_axis(0.0f);
auto TestAxis = [&](const glm::vec3& L, float ra, float rb, float center_dist,
int type, int index) {
float len = glm::length(L);
if (len < 1e-8f) return true; // parallel edges; skip
float overlap = (ra + rb) - std::abs(center_dist);
if (overlap < 0.0f) return false;
// Normalize overlap per-axis so face axes compete fairly with edge axes.
float o_norm = overlap / len;
if (o_norm < best_overlap) {
best_overlap = o_norm;
best_axis_type = type;
best_axis_index = index;
best_axis = L / len;
best_sign = (center_dist < 0) ? -1.0f : 1.0f;
}
return true;
};
// A's face axes
for (int i = 0; i < 3; ++i) {
float ra = a.h[i];
float rb = b.h.x * AbsR[i][0] + b.h.y * AbsR[i][1] + b.h.z * AbsR[i][2];
if (!TestAxis(a.u[i], ra, rb, t_a[i], 0, i)) return;
}
// B's face axes
for (int j = 0; j < 3; ++j) {
float ra = a.h.x * AbsR[0][j] + a.h.y * AbsR[1][j] + a.h.z * AbsR[2][j];
float rb = b.h[j];
float dist = glm::dot(t, b.u[j]);
if (!TestAxis(b.u[j], ra, rb, dist, 1, j)) return;
}
// 9 edge-edge axes
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
glm::vec3 L = glm::cross(a.u[i], b.u[j]);
int i1 = (i + 1) % 3, i2 = (i + 2) % 3;
int j1 = (j + 1) % 3, j2 = (j + 2) % 3;
float ra = a.h[i1] * AbsR[i2][j] + a.h[i2] * AbsR[i1][j];
float rb = b.h[j1] * AbsR[i][j2] + b.h[j2] * AbsR[i][j1];
float dist = t_a[i2] * Rm[i1][j] - t_a[i1] * Rm[i2][j];
if (!TestAxis(L, ra, rb, dist, 2, i * 3 + j)) return;
}
}
if (best_axis_type < 0) return;
// Ensure normal points from A to B.
glm::vec3 n = best_axis * best_sign;
if (glm::dot(n, t) < 0.0f) n = -n;
// Face-face manifold via SutherlandHodgman clipping.
if (best_axis_type == 0 || best_axis_type == 1) {
const BoxAxes& ref = (best_axis_type == 0) ? a : b;
const BoxAxes& inc = (best_axis_type == 0) ? b : a;
glm::vec3 refN = (best_axis_type == 0) ? n : -n; // points outward from ref
// Reference face: the one whose outward normal = refN (one of ±ref.u[k])
int ref_k = 0;
float best_dot = -std::numeric_limits<float>::max();
float ref_sign = 1.0f;
for (int k = 0; k < 3; ++k) {
float d0 = glm::dot(ref.u[k], refN);
if (std::abs(d0) > best_dot) {
best_dot = std::abs(d0);
ref_k = k;
ref_sign = (d0 >= 0) ? 1.0f : -1.0f;
}
}
glm::vec3 refAxis = ref.u[ref_k] * ref_sign;
glm::vec3 refCenter = ref.c + refAxis * ref.h[ref_k];
// Incident face: pick incident box face whose normal is most opposite refAxis.
int inc_k = 0;
float min_dot = std::numeric_limits<float>::max();
float inc_sign = 1.0f;
for (int k = 0; k < 3; ++k) {
float d0 = glm::dot(inc.u[k], refAxis);
if (d0 < min_dot) {
min_dot = d0;
inc_k = k; inc_sign = 1.0f;
}
if (-d0 < min_dot) {
min_dot = -d0;
inc_k = k; inc_sign = -1.0f;
}
}
// Build the incident face as 4 world-space vertices.
int u = (inc_k + 1) % 3;
int v = (inc_k + 2) % 3;
glm::vec3 inc_center = inc.c + inc.u[inc_k] * (inc.h[inc_k] * inc_sign);
glm::vec3 inc_u = inc.u[u] * inc.h[u];
glm::vec3 inc_v = inc.u[v] * inc.h[v];
std::vector<glm::vec3> poly = {
inc_center - inc_u - inc_v,
inc_center + inc_u - inc_v,
inc_center + inc_u + inc_v,
inc_center - inc_u + inc_v
};
// Clip against the 4 side planes of the reference face.
int ru = (ref_k + 1) % 3;
int rv = (ref_k + 2) % 3;
glm::vec3 side_axes[4] = { ref.u[ru], -ref.u[ru], ref.u[rv], -ref.u[rv] };
float side_d[4] = {
glm::dot(ref.u[ru], refCenter) + ref.h[ru],
-glm::dot(ref.u[ru], refCenter) + ref.h[ru],
glm::dot(ref.u[rv], refCenter) + ref.h[rv],
-glm::dot(ref.u[rv], refCenter) + ref.h[rv]
};
for (int s = 0; s < 4; ++s)
poly = ClipPoly(poly, side_axes[s], side_d[s]);
// Emit penetrating points (those behind the reference face plane).
int emitted = 0;
for (const auto& p : poly) {
float d = glm::dot(refAxis, p - refCenter);
if (d > 0.0f) continue;
Contact c;
c.a = ia; c.b = ib;
c.normal = n;
c.penetration = -d;
c.point = p;
contacts_.push_back(c);
if (++emitted >= 4) break;
}
if (emitted == 0) {
// Fallback: single-point contact at deepest witness along n.
glm::vec3 pA = BoxSupport(A, n);
glm::vec3 pB = BoxSupport(B, -n);
Contact c;
c.a = ia; c.b = ib;
c.normal = n;
c.penetration = best_overlap;
c.point = 0.5f * (pA + pB);
contacts_.push_back(c);
}
} else {
// Edge-edge — approximate with midpoint of nearest-point pair.
glm::vec3 pA = BoxSupport(A, n);
glm::vec3 pB = BoxSupport(B, -n);
Contact c;
c.a = ia; c.b = ib;
c.normal = n;
c.penetration = best_overlap;
c.point = 0.5f * (pA + pB);
contacts_.push_back(c);
}
}
// --- Solver --------------------------------------------------------------
void World::PrepareSolver(float dt) {
for (auto& b : bodies_) if (b.alive) RecomputeInvInertiaWorld(b);
const float kMatchR2 = 0.04f * 0.04f; // 4cm point-match radius
for (auto& c : contacts_) {
Body& A = bodies_[c.a];
Body& B = bodies_[c.b];
c.rA = c.point - A.position;
c.rB = c.point - B.position;
ComputeBasis(c.normal, c.tangent1, c.tangent2);
auto EffMass = [&](const glm::vec3& axis) {
glm::vec3 rA_x_n = glm::cross(c.rA, axis);
glm::vec3 rB_x_n = glm::cross(c.rB, axis);
float m = A.inv_mass + B.inv_mass
+ glm::dot(rA_x_n, A.inv_inertia_world * rA_x_n)
+ glm::dot(rB_x_n, B.inv_inertia_world * rB_x_n);
return m > 0.0f ? 1.0f / m : 0.0f;
};
c.normal_mass = EffMass(c.normal);
c.tangent_mass1 = EffMass(c.tangent1);
c.tangent_mass2 = EffMass(c.tangent2);
// Baumgarte positional bias.
float pen = std::max(0.0f, c.penetration - kPenetrationSlop);
c.bias = -(kBaumgarte / dt) * pen;
// Restitution bias: closing velocity × restitution, only if significant.
glm::vec3 rv = VelAtPoint(B, c.rB) - VelAtPoint(A, c.rA);
float rv_n = glm::dot(rv, c.normal);
float e = std::min(A.restitution, B.restitution);
if (rv_n < -1.0f) c.bias += e * rv_n;
// Warm-start: find a prior contact on the same pair at a nearby point.
c.normal_impulse = 0.0f;
c.tangent_impulse1 = 0.0f;
c.tangent_impulse2 = 0.0f;
for (const auto& pc : prev_contacts_) {
if (pc.a != c.a || pc.b != c.b) continue;
glm::vec3 d = pc.point - c.point;
if (glm::dot(d, d) < kMatchR2) {
c.normal_impulse = pc.normal_impulse;
c.tangent_impulse1 = pc.tangent_impulse1;
c.tangent_impulse2 = pc.tangent_impulse2;
break;
}
}
}
}
void World::WarmStart() {
for (auto& c : contacts_) {
Body& A = bodies_[c.a];
Body& B = bodies_[c.b];
glm::vec3 P = c.normal * c.normal_impulse
+ c.tangent1 * c.tangent_impulse1
+ c.tangent2 * c.tangent_impulse2;
A.linear_velocity -= P * A.inv_mass;
A.angular_velocity -= A.inv_inertia_world * glm::cross(c.rA, P);
B.linear_velocity += P * B.inv_mass;
B.angular_velocity += B.inv_inertia_world * glm::cross(c.rB, P);
}
}
void World::SolveVelocities() {
for (auto& c : contacts_) {
Body& A = bodies_[c.a];
Body& B = bodies_[c.b];
auto ApplyImpulse = [&](const glm::vec3& axis, float lambda) {
glm::vec3 P = axis * lambda;
A.linear_velocity -= P * A.inv_mass;
A.angular_velocity -= A.inv_inertia_world * glm::cross(c.rA, P);
B.linear_velocity += P * B.inv_mass;
B.angular_velocity += B.inv_inertia_world * glm::cross(c.rB, P);
};
// Tangents first so friction is proportional to final normal impulse.
{
glm::vec3 rv = VelAtPoint(B, c.rB) - VelAtPoint(A, c.rA);
float mu = std::sqrt(A.friction * B.friction);
float max_fric = mu * c.normal_impulse;
float rv_t1 = glm::dot(rv, c.tangent1);
float lambda1 = -rv_t1 * c.tangent_mass1;
float new_imp1 = std::clamp(c.tangent_impulse1 + lambda1, -max_fric, max_fric);
lambda1 = new_imp1 - c.tangent_impulse1;
c.tangent_impulse1 = new_imp1;
ApplyImpulse(c.tangent1, lambda1);
rv = VelAtPoint(B, c.rB) - VelAtPoint(A, c.rA);
float rv_t2 = glm::dot(rv, c.tangent2);
float lambda2 = -rv_t2 * c.tangent_mass2;
float new_imp2 = std::clamp(c.tangent_impulse2 + lambda2, -max_fric, max_fric);
lambda2 = new_imp2 - c.tangent_impulse2;
c.tangent_impulse2 = new_imp2;
ApplyImpulse(c.tangent2, lambda2);
}
// Normal impulse
glm::vec3 rv = VelAtPoint(B, c.rB) - VelAtPoint(A, c.rA);
float rv_n = glm::dot(rv, c.normal);
float lambda = -(rv_n + c.bias) * c.normal_mass;
float new_imp = std::max(0.0f, c.normal_impulse + lambda);
lambda = new_imp - c.normal_impulse;
c.normal_impulse = new_imp;
ApplyImpulse(c.normal, lambda);
}
}
void World::IntegrateVelocities(float dt) {
for (auto& b : bodies_) {
if (!b.alive || b.is_static || b.inv_mass == 0.0f) continue;
if (b.sleeping) continue;
b.position += b.linear_velocity * dt;
glm::quat w(0.0f, b.angular_velocity.x, b.angular_velocity.y, b.angular_velocity.z);
glm::quat dq = 0.5f * w * b.orientation;
b.orientation = glm::normalize(b.orientation + dq * dt);
}
}
void World::UpdateSleep(float dt) {
for (auto& b : bodies_) {
if (!b.alive || b.is_static || b.inv_mass == 0.0f) continue;
float lin2 = glm::dot(b.linear_velocity, b.linear_velocity);
float ang2 = glm::dot(b.angular_velocity, b.angular_velocity);
if (lin2 < kSleepLinearSq && ang2 < kSleepAngularSq) {
b.sleep_timer += dt;
if (b.sleep_timer >= kSleepTime) {
b.sleeping = true;
b.linear_velocity = glm::vec3(0.0f);
b.angular_velocity = glm::vec3(0.0f);
}
} else {
b.sleep_timer = 0.0f;
b.sleeping = false;
}
}
}
} // namespace phys

136
src/Physics.h Normal file
View File

@@ -0,0 +1,136 @@
#pragma once
#include <glm/glm.hpp>
#include <glm/gtc/quaternion.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <vector>
#include <cstdint>
// Hand-rolled rigid-body physics — sequential-impulse solver, SAT boxes.
// V1 shapes: Sphere, Box (OBB), Plane (infinite, static-only).
namespace phys {
enum class Shape : uint8_t { Sphere, Box, Plane };
struct Body {
Shape shape = Shape::Sphere;
// Sphere: half_extents.x = radius (y, z unused).
// Box: half_extents = half-widths along local X/Y/Z.
// Plane: plane_normal + plane_offset define n·x = offset.
glm::vec3 half_extents{0.5f};
glm::vec3 plane_normal{0.0f, 1.0f, 0.0f};
float plane_offset = 0.0f;
glm::vec3 position{0.0f};
glm::quat orientation{1.0f, 0.0f, 0.0f, 0.0f};
glm::vec3 linear_velocity{0.0f};
glm::vec3 angular_velocity{0.0f};
glm::vec3 force_accum{0.0f};
glm::vec3 torque_accum{0.0f};
float inv_mass = 1.0f; // 0 => static or kinematic
glm::mat3 inv_inertia_local{0.0f}; // diag in local space
glm::mat3 inv_inertia_world{0.0f}; // cached each step
float restitution = 0.2f;
float friction = 0.5f;
float linear_damping = 0.02f;
float angular_damping = 0.05f;
bool is_static = false;
bool sleeping = false;
float sleep_timer = 0.0f;
bool alive = true;
int handle = -1; // stable handle = index into world.bodies_
};
struct Contact {
int a = -1;
int b = -1;
glm::vec3 point{0.0f}; // world-space contact point
glm::vec3 normal{0.0f, 1.0f, 0.0f}; // from A toward B
float penetration = 0.0f;
// Solver scratch (recomputed each step)
glm::vec3 rA{0.0f}, rB{0.0f}; // offsets from COM to point
glm::vec3 tangent1{0.0f}, tangent2{0.0f};
float normal_mass = 0.0f;
float tangent_mass1 = 0.0f;
float tangent_mass2 = 0.0f;
float bias = 0.0f;
float normal_impulse = 0.0f;
float tangent_impulse1 = 0.0f;
float tangent_impulse2 = 0.0f;
};
class World {
public:
glm::vec3 gravity{0.0f, -9.81f, 0.0f};
float fixed_dt = 1.0f / 60.0f;
int solver_iterations = 8;
bool enabled = false;
// Water: buoyancy samples the actual Gerstner wave surface each step.
bool water_enabled = false;
float water_level = 0.0f;
float water_amplitude = 0.3f;
float water_wavelength = 8.0f;
float water_speed = 1.0f;
float water_time = 0.0f; // pushed from Engine each frame
float water_amp_scale = 1.0f; // storminess multiplier
float water_density = 1.0f;
float water_drag_linear = 1.5f;
float water_drag_angular = 0.8f;
// Wind-driven surface current (applied to submerged bodies).
glm::vec2 wind_dir_xz = glm::vec2(1.0f, 0.0f);
float wind_speed = 0.0f;
float current_coef = 0.6f;
// Directional water flow (independent of wind — rivers, waterfalls).
glm::vec2 water_flow_dir = glm::vec2(0.0f, 0.0f);
float water_flow_speed = 0.0f;
// Gerstner sampler — mirrors the water shader exactly.
float SampleWaterY(float x, float z) const;
int AddBody(const Body& b);
void RemoveBody(int handle);
Body* Get(int handle);
const Body* Get(int handle) const;
// Drives the fixed-timestep loop. Call each frame with real delta.
void Step(float real_dt);
// Iterate live bodies; callback receives handle and body ref.
template <typename F>
void ForEach(F&& fn) {
for (auto& b : bodies_) if (b.alive) fn(b.handle, b);
}
private:
std::vector<Body> bodies_;
std::vector<Contact> contacts_;
std::vector<Contact> prev_contacts_; // for warm-starting across frames
float accumulator_ = 0.0f;
void IntegrateForces(float dt);
void DetectCollisions();
void WarmStart();
void PrepareSolver(float dt);
void SolveVelocities();
void IntegrateVelocities(float dt);
void UpdateSleep(float dt);
// Pairwise tests that push contacts into contacts_.
void TestPair(int ia, int ib);
void SpherePlane(const Body& s, const Body& p, int is, int ip);
void SphereSphere(const Body& a, const Body& b, int ia, int ib);
void SphereBox(const Body& s, const Body& box, int is, int ib);
void BoxPlane(const Body& box, const Body& p, int ib, int ip);
void BoxBox(const Body& a, const Body& b, int ia, int ib);
};
} // namespace phys

261
src/TextureCache.cpp Normal file
View File

@@ -0,0 +1,261 @@
#include "TextureCache.h"
#include "SimpleTextureLoader.h"
#include <cmath>
#include <cstdint>
#include <filesystem>
#include <vector>
#include <algorithm>
std::unordered_map<std::string, GLuint> TextureCache::cache_;
namespace {
// Deterministic value noise ----------------------------------------------
uint32_t hash32(uint32_t x) {
x ^= x >> 16; x *= 0x7feb352du;
x ^= x >> 15; x *= 0x846ca68bu;
x ^= x >> 16;
return x;
}
float hashf(int x, int y, uint32_t seed = 0) {
uint32_t h = hash32((uint32_t)x * 374761393u + (uint32_t)y * 668265263u + seed);
return (h & 0xffffff) / float(0xffffff);
}
float smooth(float t) { return t * t * (3.0f - 2.0f * t); }
float noise2D(float x, float y, uint32_t seed = 0) {
int xi = (int)std::floor(x), yi = (int)std::floor(y);
float xf = x - xi, yf = y - yi;
float a = hashf(xi, yi, seed);
float b = hashf(xi + 1, yi, seed);
float c = hashf(xi, yi + 1, seed);
float d = hashf(xi + 1, yi + 1, seed);
float u = smooth(xf), v = smooth(yf);
return (1 - u) * (1 - v) * a + u * (1 - v) * b
+ (1 - u) * v * c + u * v * d;
}
float fbm(float x, float y, int octaves, uint32_t seed = 0) {
float total = 0, amp = 1, sum = 0;
for (int i = 0; i < octaves; ++i) {
total += noise2D(x, y, seed + i * 7919u) * amp;
sum += amp; amp *= 0.5f; x *= 2; y *= 2;
}
return total / sum;
}
void setPixel(std::vector<unsigned char>& buf, int w, int x, int y,
unsigned char r, unsigned char g, unsigned char b, unsigned char a = 255) {
int i = (y * w + x) * 4;
buf[i + 0] = r; buf[i + 1] = g; buf[i + 2] = b; buf[i + 3] = a;
}
// Linear interpolate between 2 RGB colors (0-255)
void lerpColor(float t, const float a[3], const float b[3], unsigned char out[3]) {
t = std::clamp(t, 0.0f, 1.0f);
out[0] = (unsigned char)std::clamp(a[0] + (b[0] - a[0]) * t, 0.0f, 255.0f);
out[1] = (unsigned char)std::clamp(a[1] + (b[1] - a[1]) * t, 0.0f, 255.0f);
out[2] = (unsigned char)std::clamp(a[2] + (b[2] - a[2]) * t, 0.0f, 255.0f);
}
} // namespace
GLuint TextureCache::UploadRGBA(const unsigned char* data, int w, int h, bool srgb) {
GLuint id;
glGenTextures(1, &id);
glBindTexture(GL_TEXTURE_2D, id);
GLint internalFmt = srgb ? GL_SRGB8_ALPHA8 : GL_RGBA8;
glTexImage2D(GL_TEXTURE_2D, 0, internalFmt, w, h, 0,
GL_RGBA, GL_UNSIGNED_BYTE, data);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glGenerateMipmap(GL_TEXTURE_2D);
return id;
}
GLuint TextureCache::Procedural(const std::string& name) {
const int W = 512, H = 512;
std::vector<unsigned char> buf(W * H * 4, 255);
if (name == "white") {
std::fill(buf.begin(), buf.end(), 255);
} else if (name == "black") {
for (int i = 0; i < W * H; ++i) {
buf[i * 4 + 0] = 0; buf[i * 4 + 1] = 0; buf[i * 4 + 2] = 0;
buf[i * 4 + 3] = 255;
}
} else if (name == "checker") {
int cell = 32;
for (int y = 0; y < H; ++y) for (int x = 0; x < W; ++x) {
bool k = ((x / cell) + (y / cell)) & 1;
unsigned char v = k ? 230 : 50;
setPixel(buf, W, x, y, v, v, v);
}
} else if (name == "grid") {
int cell = 64;
for (int y = 0; y < H; ++y) for (int x = 0; x < W; ++x) {
bool line = (x % cell == 0) || (y % cell == 0)
|| (x % cell == cell - 1) || (y % cell == cell - 1);
unsigned char v = line ? 30 : 220;
setPixel(buf, W, x, y, v, v, v);
}
} else if (name == "stripes") {
for (int y = 0; y < H; ++y) for (int x = 0; x < W; ++x) {
bool k = ((x / 32) & 1);
if (k) setPixel(buf, W, x, y, 220, 220, 210);
else setPixel(buf, W, x, y, 80, 50, 40);
}
} else if (name == "brick") {
int bw = 128, bh = 48, mortar = 3;
for (int y = 0; y < H; ++y) for (int x = 0; x < W; ++x) {
int row = y / bh;
int offset = (row & 1) ? bw / 2 : 0;
int mx = (x + offset) % bw;
int my = y % bh;
bool is_mortar = (mx < mortar) || (my < mortar);
if (is_mortar) setPixel(buf, W, x, y, 180, 180, 170);
else {
float n = fbm(x * 0.05f, y * 0.05f, 4, 11) * 0.3f + 0.7f;
unsigned char r = (unsigned char)(150 * n);
unsigned char g = (unsigned char)(60 * n);
unsigned char b = (unsigned char)(40 * n);
setPixel(buf, W, x, y, r, g, b);
}
}
} else if (name == "wood") {
for (int y = 0; y < H; ++y) for (int x = 0; x < W; ++x) {
// Rings + grain
float r = std::sqrt((x - W * 0.5f) * (x - W * 0.5f)
+ (y - H * 0.5f) * (y - H * 0.5f)) * 0.04f;
float rings = std::sin(r + fbm(x * 0.01f, y * 0.01f, 4, 7) * 2.0f);
float grain = fbm(x * 0.08f, y * 0.008f, 4, 13);
float t = std::clamp(0.5f + 0.3f * rings + 0.3f * grain, 0.0f, 1.0f);
const float dark[3] = { 85, 48, 22};
const float light[3]= {175, 120, 70};
unsigned char c[3];
lerpColor(t, dark, light, c);
setPixel(buf, W, x, y, c[0], c[1], c[2]);
}
} else if (name == "marble") {
for (int y = 0; y < H; ++y) for (int x = 0; x < W; ++x) {
float f = fbm(x * 0.012f, y * 0.012f, 5, 3);
float v = std::sin(x * 0.02f + f * 5.0f);
float t = std::clamp(0.7f + v * 0.25f, 0.0f, 1.0f);
const float dark[3] = {190, 195, 200};
const float light[3]= {245, 245, 250};
unsigned char c[3];
lerpColor(t, dark, light, c);
setPixel(buf, W, x, y, c[0], c[1], c[2]);
}
} else if (name == "concrete") {
for (int y = 0; y < H; ++y) for (int x = 0; x < W; ++x) {
float n = fbm(x * 0.05f, y * 0.05f, 5, 17);
float speck = hashf(x, y, 42);
unsigned char v = (unsigned char)(160 + n * 60 - speck * 20);
v = std::clamp<int>(v, 90, 230);
setPixel(buf, W, x, y, v, v, v + 4);
}
} else if (name == "dirt") {
for (int y = 0; y < H; ++y) for (int x = 0; x < W; ++x) {
float f = fbm(x * 0.04f, y * 0.04f, 5, 23);
const float low[3] = { 55, 35, 20};
const float high[3] = {130, 90, 55};
unsigned char c[3];
lerpColor(f, low, high, c);
setPixel(buf, W, x, y, c[0], c[1], c[2]);
}
} else if (name == "rock") {
for (int y = 0; y < H; ++y) for (int x = 0; x < W; ++x) {
float f = fbm(x * 0.02f, y * 0.02f, 6, 31);
float cracks = std::pow(std::abs(std::sin(x * 0.01f + f * 8.0f)), 40.0f);
float v = 100 + f * 100 - cracks * 40;
unsigned char c = (unsigned char)std::clamp(v, 40.0f, 230.0f);
setPixel(buf, W, x, y, c, c - 4, c - 8);
}
} else if (name == "grass") {
for (int y = 0; y < H; ++y) for (int x = 0; x < W; ++x) {
float f = fbm(x * 0.08f, y * 0.08f, 4, 53);
const float low[3] = { 40, 80, 25};
const float high[3] = {105, 160, 55};
unsigned char c[3];
lerpColor(f, low, high, c);
// Thin darker blades
float blade = std::pow(std::abs(std::sin(x * 0.2f + f * 3.0f)), 12.0f);
c[0] = (unsigned char)std::clamp<int>(c[0] - (int)(blade * 35), 0, 255);
c[1] = (unsigned char)std::clamp<int>(c[1] - (int)(blade * 35), 0, 255);
c[2] = (unsigned char)std::clamp<int>(c[2] - (int)(blade * 15), 0, 255);
setPixel(buf, W, x, y, c[0], c[1], c[2]);
}
} else if (name == "noise") {
for (int y = 0; y < H; ++y) for (int x = 0; x < W; ++x) {
float f = fbm(x * 0.03f, y * 0.03f, 5, 1);
unsigned char v = (unsigned char)(f * 255);
setPixel(buf, W, x, y, v, v, v);
}
} else {
return 0; // unknown
}
return UploadRGBA(buf.data(), W, H, /*srgb=*/true);
}
GLuint TextureCache::LoadFromFile(const std::string& path) {
namespace fs = std::filesystem;
if (!fs::exists(path)) return 0;
std::string ext = fs::path(path).extension().string();
for (auto& c : ext) c = (char)std::tolower((unsigned char)c);
if (ext == ".bmp") return SimpleTextureLoader::LoadBMP(path);
if (ext == ".tga") return SimpleTextureLoader::LoadTGA(path);
return 0;
}
GLuint TextureCache::Get(const std::string& name) {
if (name.empty()) return DefaultWhite();
auto it = cache_.find(name);
if (it != cache_.end()) return it->second;
GLuint id = Procedural(name);
if (id == 0) id = LoadFromFile(name);
if (id == 0) {
// Fallback to white rather than 0 so shader path stays valid.
id = DefaultWhite();
}
cache_[name] = id;
return id;
}
GLuint TextureCache::DefaultWhite() {
static GLuint white = 0;
if (white != 0) return white;
unsigned char px[4] = {255, 255, 255, 255};
glGenTextures(1, &white);
glBindTexture(GL_TEXTURE_2D, white);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 1, 1, 0,
GL_RGBA, GL_UNSIGNED_BYTE, px);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
return white;
}
GLuint TextureCache::DefaultNormal() {
static GLuint n = 0;
if (n != 0) return n;
// Tangent-space (0,0,1) encodes as (0.5, 0.5, 1.0).
unsigned char px[4] = {128, 128, 255, 255};
glGenTextures(1, &n);
glBindTexture(GL_TEXTURE_2D, n);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 1, 1, 0,
GL_RGBA, GL_UNSIGNED_BYTE, px);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
return n;
}
void TextureCache::Clear() {
for (auto& [k, v] : cache_) glDeleteTextures(1, &v);
cache_.clear();
}

25
src/TextureCache.h Normal file
View File

@@ -0,0 +1,25 @@
#pragma once
#include <glad.h>
#include <string>
#include <unordered_map>
// Single cache for diffuse textures. Resolves names as either:
// - builtin: "white", "black", "checker", "grid", "noise", "wood",
// "brick", "stripes", "marble", "concrete", "dirt",
// "rock", "grass"
// - file path ending .bmp or .tga (uses SimpleTextureLoader)
//
// Builtins are generated procedurally in-memory at first request and cached.
class TextureCache {
public:
static GLuint Get(const std::string& name);
static GLuint DefaultWhite();
static GLuint DefaultNormal(); // flat (0,0,1) encoded as (0.5,0.5,1.0)
static void Clear();
private:
static std::unordered_map<std::string, GLuint> cache_;
static GLuint LoadFromFile(const std::string& path);
static GLuint Procedural(const std::string& name);
static GLuint UploadRGBA(const unsigned char* data, int w, int h, bool srgb);
};

File diff suppressed because it is too large Load Diff