4.1 KiB
4.1 KiB
Fundamental Coding Style Rules
Codex must obey these rules without exception:
Imports
- Each import statement must be separated by exactly one empty line.
- All
fromtokens must be aligned vertically using tabs beforefrom. - Use double quotes for all string literals.
- Use ES modules only.
- Avoid backticks unless unavoidable for syntax.
Function Calls
- Always write calls like:
myFunction( param )with spaces inside parentheses.
Class Structure
- Exactly one empty line between class methods.
- No empty line at start or end of class.
- Methods must start with a blank line after
{and end with a blank line before}.
Method Body Spacing
Inside every method body:
- One empty line between every line of code.
- No inline comments on the same line as code.
Callbacks & Functions
- Never write inline callbacks.
- Never write nested callbacks.
- Never pass anonymous inline functions to
.map(),.filter(),.forEach(), etc. - Never use arrow functions.
- Always create a separate class method instead.
Promises
- Never use
.then(). - Never use
new Promise( resolve => { ... } ). - Always use
async/await. - Avoid
try-catchblocks unless mandatory.
Arrays
- Use
new Array()instead of[], except in Angular metadata (imports: [ ],providers: [ ]etc.) where[]is allowed.
Objects
- Never return an inline object directly.
- Always assign the object to a variable first, then return that variable.
- Align object literal values vertically using tabs before the values.
Conditionals
- Never use short-form ternary (
? :). - Always write full
ifstatements.
Logging
- Do not use
$()syntax. - Use simple logs:
console.log( "message", value );
JSON imports
Always use:
import data from "./file.json" with { type: "json" };
Indentation
- Use tabs everywhere (no spaces).
- Nested JSON or object structures must use tabs for indentation.
Repository Guidelines
Project Structure & Modules
engine/: core rendering engine (WebGL, deferred, PBR).shaders/: GLSL shader sources;shaders/old/contains legacy variants.plugins/: optional features and extensions (for exampleplugins/ocean).demos/,start.html,index.html: example entrypoints for running the engine.media/: textures, models, fonts, and screenshots used by demos.server.js: minimal static HTTP server for local development.
Build, Run, and Development
- No build step is required; files are served as static assets.
- Run
node server.jsfrom the repo root to start the dev server onhttp://localhost:4000. - Open
/start.htmlor files under/demos/in your browser to exercise changes. - Use ES modules (
type: "module"inpackage.json) for new JavaScript files.
Coding Style & Naming
- JavaScript only, using ES modules and
classsyntax where appropriate. - Use camelCase for variables and functions, PascalCase for classes and render passes.
- Match existing indentation (tabs) and brace style in the surrounding file.
- Keep core engine logic in
engine/, shaders inshaders/, and optional logic inplugins/.
Testing & Validation
- There is no automated test runner yet; validate behavior through demos.
- Prefer creating small, focused demo pages under
demos/(for exampledemos/rough.htm) for new features. - Keep demos self-contained, quick to load, and clearly named after the feature they showcase.
Commit & Pull Request Guidelines
- Write short, descriptive commit messages (for example
Fix SSAO samplingorUpdate README images). - Aim for one logical change per commit when practical.
- PRs should include a concise description, a list of affected areas, and screenshots or GIFs for visual or lighting changes.
- Link to any related issues and mention relevant demo URLs (such as
/demos/new.htm) that reviewers can open.
Agent-Specific Notes
- When changing rendering behavior, prefer adding or adjusting render passes under
engine/renderPasses/instead of large monolithic edits. - Avoid deleting existing demos or media assets; add new examples alongside current ones to preserve reference behavior.