Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
f3e349e
Port to .NET Core 10 and Avalonia UI
gtkramer May 28, 2026
6a7a89c
Invert up and down camera movements
gtkramer May 28, 2026
c99b8c1
Fix comments for thread rendering
gtkramer May 28, 2026
8193412
Parse CCS files on a background thread to keep the UI responsive
gtkramer May 28, 2026
733e792
Use Avalonia's generated typed control fields instead of FindControl
gtkramer May 28, 2026
a8b9326
Bind the tree views and render options instead of building them by hand
gtkramer May 28, 2026
87ab6d8
Rename the GL grid renderer class Grid -> GridRenderer
gtkramer May 28, 2026
6f80e67
Make the UI consistent: bind the bone tree and dedupe shared constructs
gtkramer May 28, 2026
e66b5f7
Make the mode toolbar grouped RadioButtons bound to the view-model
gtkramer May 28, 2026
4323041
Reverse scroll-wheel zoom direction in the 3D viewport
gtkramer May 28, 2026
055c5cd
Toggle tree nodes by tapping the row, not just the chevron
gtkramer May 28, 2026
d335771
Clamp camera pitch below the pole to stop the top-down view flip
gtkramer May 28, 2026
dc32636
Update TODO
gtkramer May 28, 2026
6db9f68
Embed shader and vertex-blob resources into the assembly
gtkramer May 29, 2026
8a44a63
Trim OpenTK metapackage to just Graphics + Mathematics
gtkramer May 29, 2026
630430d
Replace hand-rolled Logger with Microsoft.Extensions.Logging
gtkramer May 29, 2026
f0f36d3
Show severity level and colour in the log panel
gtkramer May 29, 2026
f4875da
Drop the category from console output to match the panel
gtkramer May 29, 2026
3f9040f
Use one colour table for console and panel, colour only the tag
gtkramer May 29, 2026
c1c40f0
Negotiate a desktop OpenGL context per platform
gtkramer May 29, 2026
e2c0984
Decode CCS asset names with ASCII instead of Encoding.Default
gtkramer May 29, 2026
7d35bfd
Add .gitattributes to normalize line endings
gtkramer May 29, 2026
e908d41
Use core-profile texture() instead of removed texture2D in shaders
gtkramer May 29, 2026
7e02319
Guard against unsupported GL contexts and log driver debug output
gtkramer May 29, 2026
7c95313
Require GL 3.3 to match the #version 330 shaders
gtkramer May 29, 2026
04588be
Normalize all shaders to #version 330 core
gtkramer May 29, 2026
a591783
Strip UTF-8 BOMs and add .editorconfig to prevent re-addition
gtkramer May 29, 2026
a7e8003
Request a GL 4.6 context, falling back to the 3.3 floor
gtkramer May 29, 2026
a00edfb
Sandwich the GL viewport between render-mode and camera bars
gtkramer May 29, 2026
20d9ea1
Make the viewport and status bars follow the system theme
gtkramer May 29, 2026
014bee4
Rewrite README as compliant Markdown and rename to README.md
gtkramer May 29, 2026
fc451fa
Export vertex colors in OBJ and fix SMD file creation
May 29, 2026
de45785
Restore animation interpolation and add preview SMD export
taarna23 May 29, 2026
fc31f9c
Enforce consistent formatting and strip SharpDevelop boilerplate
gtkramer May 29, 2026
258f57f
Prune completed and obsolete items from TODO
gtkramer May 29, 2026
96b851f
Reconcile line-ending strategy between Git and EditorConfig
gtkramer May 29, 2026
af70c9c
Remove dead code and unused test artifacts
gtkramer May 30, 2026
bf1c0d2
Implement and render CCS bounding boxes
gtkramer May 30, 2026
0bf0044
Reorganize sources into a fuller namespace taxonomy
gtkramer May 30, 2026
795552d
Rename Ccs-cased identifiers to all-caps CCS for consistency
gtkramer May 30, 2026
272496d
Co-locate render assets with the Rendering layer
gtkramer May 30, 2026
5d489e1
Move stray supporting files into Extras/
gtkramer May 30, 2026
4906fe9
Remove own TODO list
gtkramer May 30, 2026
f8b15d7
Dispose the CCS file stream and reader after loading
gtkramer May 30, 2026
4ed07b9
Match the name in GetIDByNameAndType
gtkramer May 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
161 changes: 161 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
root = true

# ---------------------------------------------------------------------------
# Defaults for every text file.
#
# Store every text file as UTF-8 *without* a BOM. "utf-8" here means no BOM;
# "utf-8-bom" would be the opt-in variant. This stops Windows editors (Visual
# Studio, older Notepad/PowerShell) from silently re-adding the EF BB BF marker
# that was stripped from the tree.
#
# Line endings are intentionally NOT pinned here. EditorConfig's end_of_line
# only accepts a fixed value (lf/crlf) with no "native" option, so setting it
# would override the per-OS checkout that .gitattributes (* text=auto) provides
# -- LF in the repo, each platform's native ending in the working tree (CRLF on
# Windows when core.autocrlf is enabled, LF elsewhere). Leaving it unset lets
# editors preserve whatever Git checked out, keeping working trees OS-native.
# ---------------------------------------------------------------------------
[*]
charset = utf-8
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = space
indent_size = 4

# Markdown: a line ending in two spaces is a hard line break, so trimming
# trailing whitespace here would silently change rendering.
[*.md]
trim_trailing_whitespace = false

# MSBuild / project files conventionally use 2-space indentation.
[*.{csproj,props,targets,sln}]
indent_size = 2

# YAML / JSON conventionally use 2-space indentation.
[*.{yml,yaml,json}]
indent_size = 2

# XAML and GLSL shaders follow the 4-space default; listed for clarity.
[*.{axaml,xaml}]
indent_size = 4

[*.{vsh,fsh,gsh,glsl}]
indent_size = 4

# ---------------------------------------------------------------------------
# C# — Microsoft coding conventions.
# https://learn.microsoft.com/dotnet/csharp/fundamentals/coding-style/coding-conventions
#
# Severities: rules that `dotnet format` should auto-apply are :warning;
# stylistic preferences that should only surface as IDE hints (and not rewrite
# the legacy tree wholesale) are :suggestion.
# ---------------------------------------------------------------------------
[*.cs]
indent_size = 4

# using directives: outside the namespace, System.* sorted first, one group.
csharp_using_directive_placement = outside_namespace:warning
dotnet_sort_system_directives_first = true
dotnet_separate_import_directive_groups = false

# Use language keywords (int, string) instead of BCL type names (Int32, String).
dotnet_style_predefined_type_for_locals_parameters_members = true:warning
dotnet_style_predefined_type_for_member_access = true:warning

# Do not prefix member access with this.
dotnet_style_qualification_for_field = false:warning
dotnet_style_qualification_for_property = false:warning
dotnet_style_qualification_for_method = false:warning
dotnet_style_qualification_for_event = false:warning

# Accessibility modifiers required except where the default is obvious.
dotnet_style_require_accessibility_modifiers = for_non_interface_members:warning
dotnet_style_readonly_field = true:suggestion

# var: prefer explicit types for built-ins, var when the type is apparent.
csharp_style_var_for_built_in_types = false:suggestion
csharp_style_var_when_type_is_apparent = true:suggestion
csharp_style_var_elsewhere = false:suggestion

# Always use braces, even for single-statement blocks.
csharp_prefer_braces = true:warning

# Allman braces — opening brace on its own line.
csharp_new_line_before_open_brace = all
csharp_new_line_before_else = true
csharp_new_line_before_catch = true
csharp_new_line_before_finally = true
csharp_new_line_before_members_in_object_initializers = true
csharp_new_line_before_members_in_anonymous_types = true
csharp_new_line_between_query_expression_clauses = true

# Indentation details.
csharp_indent_case_contents = true
csharp_indent_switch_labels = true
csharp_indent_labels = one_less_than_current

# Spacing.
csharp_space_after_cast = false
csharp_space_after_keywords_in_control_flow_statements = true
csharp_space_between_method_declaration_parameter_list_parentheses = false
csharp_space_between_method_call_parameter_list_parentheses = false
csharp_space_before_open_square_brackets = false

# Prefer file-scoped namespaces (C# 10+). Suggestion only, to avoid rewriting
# every legacy block-scoped file in one pass.
csharp_style_namespace_declarations = file_scoped:suggestion

# Expression-level preferences.
dotnet_style_object_initializer = true:suggestion
dotnet_style_collection_initializer = true:suggestion
dotnet_style_prefer_auto_properties = true:suggestion
dotnet_style_explicit_tuple_names = true:suggestion
dotnet_style_coalesce_expression = true:suggestion
dotnet_style_null_propagation = true:suggestion
dotnet_style_prefer_conditional_expression_over_assignment = true:suggestion
dotnet_style_prefer_conditional_expression_over_return = true:suggestion
csharp_prefer_simple_using_statement = true:suggestion
csharp_style_prefer_index_operator = true:suggestion
csharp_style_prefer_range_operator = true:suggestion
csharp_style_inlined_variable_declaration = true:suggestion
csharp_style_throw_expression = true:suggestion

# --- Naming (suggestion only: renaming legacy symbols is out of scope) ---

# Interfaces are PascalCase prefixed with I.
dotnet_naming_rule.interfaces_begin_with_i.severity = suggestion
dotnet_naming_rule.interfaces_begin_with_i.symbols = interface_symbols
dotnet_naming_rule.interfaces_begin_with_i.style = i_prefixed_pascal
dotnet_naming_symbols.interface_symbols.applicable_kinds = interface
dotnet_naming_style.i_prefixed_pascal.required_prefix = I
dotnet_naming_style.i_prefixed_pascal.capitalization = pascal_case

# Types and non-field members are PascalCase.
dotnet_naming_rule.members_are_pascal_case.severity = suggestion
dotnet_naming_rule.members_are_pascal_case.symbols = type_and_member_symbols
dotnet_naming_rule.members_are_pascal_case.style = pascal_case
dotnet_naming_symbols.type_and_member_symbols.applicable_kinds = class,struct,enum,delegate,method,property,event,namespace
dotnet_naming_style.pascal_case.capitalization = pascal_case

# Private fields are _camelCase.
dotnet_naming_rule.private_fields_underscore.severity = suggestion
dotnet_naming_rule.private_fields_underscore.symbols = private_field_symbols
dotnet_naming_rule.private_fields_underscore.style = underscore_camel_case
dotnet_naming_symbols.private_field_symbols.applicable_kinds = field
dotnet_naming_symbols.private_field_symbols.applicable_accessibilities = private
dotnet_naming_style.underscore_camel_case.required_prefix = _
dotnet_naming_style.underscore_camel_case.capitalization = camel_case

# Constants are PascalCase.
dotnet_naming_rule.constants_are_pascal_case.severity = suggestion
dotnet_naming_rule.constants_are_pascal_case.symbols = constant_symbols
dotnet_naming_rule.constants_are_pascal_case.style = pascal_case
dotnet_naming_symbols.constant_symbols.applicable_kinds = field,local
dotnet_naming_symbols.constant_symbols.required_modifiers = const

# Parameters and locals are camelCase.
dotnet_naming_rule.parameters_are_camel_case.severity = suggestion
dotnet_naming_rule.parameters_are_camel_case.symbols = parameter_symbols
dotnet_naming_rule.parameters_are_camel_case.style = camel_case
dotnet_naming_symbols.parameter_symbols.applicable_kinds = parameter,local
dotnet_naming_style.camel_case.capitalization = camel_case
13 changes: 12 additions & 1 deletion .gitattributes
Original file line number Diff line number Diff line change
@@ -1,2 +1,13 @@
# Auto detect text files and perform LF normalization
# Normalize line endings. Store text with LF in the repo, but check it out with
# each platform's native ending so working trees stay friendly to local tooling
# while the repo stays consistent. The working-tree ending is decided by each
# developer's core.autocrlf: "true" (the Git-for-Windows default) yields CRLF on
# Windows; "input"/"false" yields LF. .editorconfig deliberately leaves
# end_of_line unset so editors don't override this per-OS behavior.
* text=auto

# Binary assets: never normalized or diffed as text.
*.dds binary
*.png binary
*.bin binary
*.ccs binary
Loading