{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":78756574,"defaultBranch":"no-deps","name":"psxprev","ownerLogin":"rickomax","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2017-01-12T15:00:42.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/12863984?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1699564621.0","currentOid":""},"activityList":{"items":[{"before":"2c0c7746e1645a82bcb7c7c442aa01c25d785ca8","after":"6de12c342933c24fdf544f49efe1b641d7f8dc2b","ref":"refs/heads/no-deps","pushedAt":"2023-11-09T21:02:18.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"trigger-segfault","name":"Robert Jordan","path":"/trigger-segfault","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9752430?s=80&v=4"},"commit":{"message":"WriteSettings before opening Scanner/ExportModelsForm (#203)\n\n* This will prevent settings stored in PreviewForm from becoming desynced if the user closes the program while one of these windows is open (which can be done from the taskbar)","shortMessageHtmlLink":"WriteSettings before opening Scanner/ExportModelsForm (#203)"}},{"before":"07ac5863735a8594ca137d1b3932a712d448c638","after":null,"ref":"refs/heads/trigger-segfault-update-readme-0-9-9-2","pushedAt":"2023-11-09T20:54:25.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"trigger-segfault","name":"Robert Jordan","path":"/trigger-segfault","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9752430?s=80&v=4"}},{"before":"2824fd0732fcc8b505b1fc18e7c7250c6a6633de","after":"2c0c7746e1645a82bcb7c7c442aa01c25d785ca8","ref":"refs/heads/no-deps","pushedAt":"2023-11-09T20:53:59.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"trigger-segfault","name":"Robert Jordan","path":"/trigger-segfault","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9752430?s=80&v=4"},"commit":{"message":"Update README preview image (#202)","shortMessageHtmlLink":"Update README preview image (#202)"}},{"before":null,"after":"07ac5863735a8594ca137d1b3932a712d448c638","ref":"refs/heads/trigger-segfault-update-readme-0-9-9-2","pushedAt":"2023-11-09T20:53:47.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"trigger-segfault","name":"Robert Jordan","path":"/trigger-segfault","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9752430?s=80&v=4"},"commit":{"message":"Update README preview image","shortMessageHtmlLink":"Update README preview image"}},{"before":"87bcacef74014973cc070d9fadd59e477904b7a9","after":"2824fd0732fcc8b505b1fc18e7c7250c6a6633de","ref":"refs/heads/no-deps","pushedAt":"2023-11-09T20:31:10.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"trigger-segfault","name":"Robert Jordan","path":"/trigger-segfault","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9752430?s=80&v=4"},"commit":{"message":"Prepare for 0.9.9.2 release (#201)\n\n* Bump version to 0.9.9.2\r\n* Make result index property visible without debug mode (since it's especially useful for packed textures).\r\n* Update README usage and formats.\r\n* Fix app config stating wrong .NET Framework version.\r\n* About window now states whether clipboard support is enabled","shortMessageHtmlLink":"Prepare for 0.9.9.2 release (#201)"}},{"before":"afe3300ec86c282a1f1718e892403d7899a33268","after":"87bcacef74014973cc070d9fadd59e477904b7a9","ref":"refs/heads/no-deps","pushedAt":"2023-11-09T18:41:23.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"trigger-segfault","name":"Robert Jordan","path":"/trigger-segfault","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9752430?s=80&v=4"},"commit":{"message":"Add HMD Extra Animations advanced setting (#200)\n\n* This setting will try to include all possibilities for an HMD animation when there's only one animation defined. Many games (and even PsyQ models) will hardcode animation sequence SIDs and change them as needed, rather than defining multiple animations.","shortMessageHtmlLink":"Add HMD Extra Animations advanced setting (#200)"}},{"before":"d9ab4bb61d8b712ecd5c84ffddbe957c52407e29","after":"afe3300ec86c282a1f1718e892403d7899a33268","ref":"refs/heads/no-deps","pushedAt":"2023-10-28T18:46:02.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"trigger-segfault","name":"Robert Jordan","path":"/trigger-segfault","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9752430?s=80&v=4"},"commit":{"message":"Store Texture dimensions locally and remove Render_ dimensions (#198)\n\n* Texture now stores Width and Height locally instead of getting those properties from Bitmap. This is because Bitmap's dimension properties call native methods to retrieve the size each time, and so it will be slower than just fetching a local variable.\r\n* Phased out Texture RenderWidth and RenderHeight, since they were no different from the Width and Height properties.","shortMessageHtmlLink":"Store Texture dimensions locally and remove Render_ dimensions (#198)"}},{"before":"bcb61cdad106e6f5b2f8b1d3f8077a4971ad2f8d","after":"d9ab4bb61d8b712ecd5c84ffddbe957c52407e29","ref":"refs/heads/no-deps","pushedAt":"2023-10-28T18:09:36.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"trigger-segfault","name":"Robert Jordan","path":"/trigger-segfault","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9752430?s=80&v=4"},"commit":{"message":"Settings catch-up and remove Old UV Alignment (#197)\n\n* Added settings to catch up to programmatic capabilities of PSXPrev.\r\n * Model grouping can now be split by TMD ID\r\n * PIL parsing is now a separate checkbox\r\n * BIN indexed file scanning is now possible (BIN data is still defaulted to)\r\n * Vertex index reuse export can be disabled\r\n * Human readable export can be disabled\r\n * Strict floats export can be disabled\r\n* Added ignore version setting for PMD.\r\n* Default wildcard filter is now \"*\" to match all files, this matches how things used to be before wildcards were converted to regex. It also means the user doesn't have to change their filters (or understand wildcard) to scan files without extensions.\r\n* Recent scan history maximum no longer includes bookmarks in count (so you can have 30 scan histories and 50 bookmarked histories while the max is 30).\r\n* Console color is no longer a scan option, but an advanced program option (under File > Advanced Settings...).\r\n* Old UV alignment is no longer a PSXPrev option, now that it's known for sure that the fixed alignment is accurate to how the PSX did things. (Comments in source code were complaining about the missing last pixel).\r\n* Program usage and help now always use the default console foreground color.\r\n* Made sure logger flushes file output after a scan is finished.\r\n* Logger now reads default settings during constructor so that default colors are initialized (and not all black).\r\n* \"Exported {0} models\" message box now correctly states how many models were exported based on model grouping setting.\r\n* For debug builds, it's now possible to open up the export models form without first running a scan.\r\n* Scanner form format checkboxes now use tri-state. Indeterminate is used when a format is enabled in its default value. Aka, indeterminate is only used when no formats are explicitly checked, and that format is implicit (i.e. not SPT, which is too false-positive prone).\r\n* Changed how scan formats are stored in settings.json. Formats and ignore version formats are now stored in lists. This will make it easier to add additional formats in the future by reducing the number of places we need to update for the addition.\r\n* Default scan regex filter now includes start and end matching tokens.","shortMessageHtmlLink":"Settings catch-up and remove Old UV Alignment (#197)"}},{"before":"01d822446c74e79c8171998a6938df855f86d663","after":"bcb61cdad106e6f5b2f8b1d3f8077a4971ad2f8d","ref":"refs/heads/no-deps","pushedAt":"2023-10-19T18:57:15.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"trigger-segfault","name":"Robert Jordan","path":"/trigger-segfault","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9752430?s=80&v=4"},"commit":{"message":"Switch VRAM semi-transparency storage to same as normal Textures (#196)\n\n* VRAM now stores semi-transparency information in the designated Texture.SemiTransparentMap, just like normal textures. With this, handling VRAM textures and normal textures no longer needs different logic.\r\n* VRAM now caches its graphics objects when drawing to speed up mass updates to VRAM (probably). These graphics objects are disposed of during the Update functions.\r\n* Texture.RenderWidth and RenderHeight now return the same values as Width and Height, and will be removed eventually.\r\n* Fixed TexturePreviewer not getting invalidated during certain events like property changes or ClearScanResults.\r\n* Fixed TexturePreviewer semi-transparency caching not working correctly with clipRect, thus making it effectively useless unless scrolling down/right. The rect that's cached is now the viewable auto scroll rectangle, while clipRect is mearly used to handle what stp lines to update.\r\n* Added caching for TexturePreviewer UV lines. Caching is done by drawing all UV lines to a bitmap once, and then rendering that bitmap from there on. This does have a larger performance hit when first zooming in or out (when part of the texture is off the screen), but has no lag afterwards, making it cleaner to scroll around a texture.","shortMessageHtmlLink":"Switch VRAM semi-transparency storage to same as normal Textures (#196)"}},{"before":"8320604b57dc9c6af815a5d778352dcac4e83bb8","after":"01d822446c74e79c8171998a6938df855f86d663","ref":"refs/heads/no-deps","pushedAt":"2023-10-16T21:58:07.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"trigger-segfault","name":"Robert Jordan","path":"/trigger-segfault","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9752430?s=80&v=4"},"commit":{"message":"Rename Common.Color to Color3 and change to struct (#195)\n\n* Common.Color has been refactored a bit. The rename to Color3 means it no longer conflicts with System.Drawing.Color, and it's intended to match the naming convention of OpenTK.Graphics.Color4. Additionally, being changed to a struct is more fitting for how the type is used. I've done tests on the memory impact of switching and couldn't see any difference.\r\n* Color3 now has equality functions, and so it can be used instead of Vector3 for caching and lookup.\r\n* Color3.ToString now outputs the color in integer format (each channel is 0-255).\r\n* Fixed TexturePreviewer using System.Drawing.Color equality, which is a big no because System.Drawing.Color checks for equality with stupid things like known color names. Technically this didn't affect the code at all, since all colors were created from RGB values, but it's still bad practice to use it.\r\n* Shader now uses Color3 and Color4 instead of Vectors where Color is appropriate.\r\n* Refactored BFFParser to no longer use TriangleFromPrimitive.\r\n* Removed unused _scene field from AnimationBatch.","shortMessageHtmlLink":"Rename Common.Color to Color3 and change to struct (#195)"}},{"before":"379728539efaff4ba31a9fac382e2ee9e2eb3cf1","after":"8320604b57dc9c6af815a5d778352dcac4e83bb8","ref":"refs/heads/no-deps","pushedAt":"2023-10-15T19:20:48.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"trigger-segfault","name":"Robert Jordan","path":"/trigger-segfault","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9752430?s=80&v=4"},"commit":{"message":"Attempt to fix glTF2 HandlesRoot animations (#194)\n\n* Root entity is now included in transform-based animations.\r\n* Model matrices now include their local (world in this case) matrix for transform-based animations.","shortMessageHtmlLink":"Attempt to fix glTF2 HandlesRoot animations (#194)"}},{"before":"ad01e35a8ab5e5528a4a8c737aef0c559a051c59","after":"379728539efaff4ba31a9fac382e2ee9e2eb3cf1","ref":"refs/heads/no-deps","pushedAt":"2023-10-15T18:33:31.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"trigger-segfault","name":"Robert Jordan","path":"/trigger-segfault","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9752430?s=80&v=4"},"commit":{"message":"Texture/Scene previewer improvements, advanced settings (#193)\n\n* Fix scan result counts printed to the console not being reset at the start of each scan.\r\n* Added setting to clear the console log when clearing scan results.\r\n* Added setting to adjust how long the light rotation ray shows for before fading away.\r\n* Added separate setting to show semi-transparency in the VRAM previewer.\r\n* Added separate setting to show UVs in the texture previewer.\r\n* Scan history is now preserved when resetting to default settings.\r\n* Added File > Advanced Settings window that allows changing all settings.json-exclusive properties (including useful settings like anti-aliasing).\r\n* Fixed light rotation ray delay having debug value for near-infinite duration that was accidentally left in the last commit.\r\n* Added File > Show Models Status Bar to show a status bar with camera information in the Models tab.\r\n* Added File > Show UI (F11 hotkey) to show or hide the UI surrounding the 2D image or 3D scene previewer. Escape can also be used to exit ouf of this mode when the UI is hidden.\r\n* Animation Reverse checkbox now shows focus rectangle.\r\n* Reduced flicker when switching tabs, and removed flicker entirely for the GLControl.\r\n* Added TexturePreviewer and ScenePreviewer user controls to manage the 2D image and 3D scene previews. The ScenePreviewer control is kind of experimental, and doesn't have much use at the moment. I'm still deciding whether it would be better to just make it a single control shared by both the Models and Animations Tab. The TexturePreviewer helps remove a lot of duplicate code, and also helps by caching and reducing lag during some of the drawing operations (especially with semi-transparent lines).\r\n* The texture preview can now be moved around by dragging the mouse. Using the mouse wheel to zoom will no longer move the scroll bars.\r\n* The texture preview now has a status bar that shows the mouse pixel position, color of the pixel (and transparency type), and the palette index of the pixel if the texture is paletted. The zoom label has also been moved to the status bar, and no longer covers the scroll bar in the top-right.\r\n* Added drop-shadow to texture previewer to make it easier to tell apart the texture from the panel background.\r\n* Fixed instances of texture semi-transparency in VRAM/TextureBinder not being assigned correctly (because SourceCopy wasn't being used).","shortMessageHtmlLink":"Texture/Scene previewer improvements, advanced settings (#193)"}},{"before":"91611216e07fb84aa7f416d483545b529c545aca","after":"ad01e35a8ab5e5528a4a8c737aef0c559a051c59","ref":"refs/heads/no-deps","pushedAt":"2023-10-05T21:22:15.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"trigger-segfault","name":"Robert Jordan","path":"/trigger-segfault","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9752430?s=80&v=4"},"commit":{"message":"VAO, Texture, and Mesh batching optimizations (#192)\n\n* Fixed pressing space on tree view nodes without checkboxes causing the checkboxes to reappear.\r\n* Fixed delayed scroll in tree view after selecting an item.\r\n* Fixed excess lag caused by tree view due to custom draw.\r\n* AnimationBatch no longer controls the models MeshBatch, this should now be done by the caller.\r\n* Fixed TriangleMeshBuilder sprite normal, and OctoSphere being inverted.\r\n* Shader now tries to support joints for GLSL 150 by using UBOs. When an entity has more joints than the UBO can fit, it will fallback to baking the connections.\r\n* Changed main texture uniform from being bound as an attribute to a uniform (which fixes some issues with how the uniform is assigned).\r\n* Texture uniform is now assigned via texture unit index.\r\n* Joint attribute is now always present in the shader, and is used instead of DiscardValue to determine if a joint should be hidden.\r\n* A lot of shader refactoring and optimizations. Uniforms now have the `u_` prefix to help distinguish them from local variables, and color is now processed in vec3, since alpha is never used.\r\n* Fixed sprite joint matrices not correctly handling camera rotation (since they were attempting to apply it at setup time and not at render time). Now, two more matrix uniforms are used to apply sprite camera rotation.\r\n* Fixed sprite transforms incorrectly eliminating model rotation.\r\n* TextureBinder now combines 32 VRAM pages into a single texture, this reduces the number of texture binds, and allows for much more mesh batching.\r\n* TextureBinder now uses TexSubImage2D after the first call.\r\n* BufferSubData is now used instead of BufferData after the first call.\r\n* Fixed normal for Neversoft PSX sprites being inverted.\r\n* Meshes now get their data from the VertexArrayObject class. All root entities use a single VAO for all meshes, and meshes will use a portion of the data stored in it.\r\n* Added mesh batching for the models mesh batch. With this, the number of draw calls can be reduced by between x4 and x8 (also thanks to the texture sharing).\r\n* Fixed Scene.CameraYawRotation being inverted.\r\n* Vertex attributes are no longer bound every time a mesh is drawn, but only after data is assigned. When drawing a mesh, only the vertex array is bound.\r\n* Baked connections now take sprite rotation into account.","shortMessageHtmlLink":"VAO, Texture, and Mesh batching optimizations (#192)"}},{"before":"88896701eab9a135419c7247b5b604ad5dbec822","after":"91611216e07fb84aa7f416d483545b529c545aca","ref":"refs/heads/no-deps","pushedAt":"2023-09-27T14:29:47.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"trigger-segfault","name":"Robert Jordan","path":"/trigger-segfault","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9752430?s=80&v=4"},"commit":{"message":"Include glTF2 inverseBindMatrices (#191)\n\n* Optional glTF2 property inverseBindMatrices is now included for skins. Since some viewers were complaining about this OPTIONAL PROPERTY being missing...","shortMessageHtmlLink":"Include glTF2 inverseBindMatrices (#191)"}},{"before":"d1ec7c2951eb1e77f1deee014253d61c6a4c6b35","after":"88896701eab9a135419c7247b5b604ad5dbec822","ref":"refs/heads/no-deps","pushedAt":"2023-09-27T13:47:21.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"trigger-segfault","name":"Robert Jordan","path":"/trigger-segfault","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9752430?s=80&v=4"},"commit":{"message":"Switch to Toolkit.Init PreferNative backend (#190)\n\nThis solves long-standing issue #40, where a user could not start the program because GLControl would throw an AccessViolationException during the HandleCreated event. Alternatively we can just *not* call Toolkit.Init, since GLControl does that, but it doesn't hurt to call it early if we're calling it with the same options.","shortMessageHtmlLink":"Switch to Toolkit.Init PreferNative backend (#190)"}},{"before":"99e306dbbc5b5b6813e8dfb957a330cfe8dba979","after":"d1ec7c2951eb1e77f1deee014253d61c6a4c6b35","ref":"refs/heads/no-deps","pushedAt":"2023-09-26T16:40:32.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"trigger-segfault","name":"Robert Jordan","path":"/trigger-segfault","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9752430?s=80&v=4"},"commit":{"message":"More animation sanity checks (#189)\n\n* Add more sanity checks for AN and TOD.\r\n* Prevent TOD from creating an animation if no frames contained transforms.","shortMessageHtmlLink":"More animation sanity checks (#189)"}},{"before":"7bbd9cffe3bc05d3a25175cfe137839e26e1a01a","after":"99e306dbbc5b5b6813e8dfb957a330cfe8dba979","ref":"refs/heads/no-deps","pushedAt":"2023-09-26T16:07:31.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"trigger-segfault","name":"Robert Jordan","path":"/trigger-segfault","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9752430?s=80&v=4"},"commit":{"message":"PMDParser refactoring (#188)\n\n* Refactored PMDParser to use one function for parsing all primitive types. The POLY_* structs are simple enough that a handful of conditional blocks can cover every case. Also changed to seeking past the first copy of POLY_* struct, since we only read data from the second.\r\n* PMDParser now calculates normals for triangles when light source calculation is enabled.\r\n* Made Debug Data always visible for Triangles and included packetPosition in that debug data for PMD triangles (as requested).","shortMessageHtmlLink":"PMDParser refactoring (#188)"}},{"before":"0b03e034300de2fd673d81417884adaf5abf6a65","after":"7bbd9cffe3bc05d3a25175cfe137839e26e1a01a","ref":"refs/heads/no-deps","pushedAt":"2023-09-26T15:55:39.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"trigger-segfault","name":"Robert Jordan","path":"/trigger-segfault","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9752430?s=80&v=4"},"commit":{"message":"PSX LOD support and animation 0x2a subtype 0 (#187)\n\n* Fixed object sanity limit for Neversoft PSX being too low, meaning about 4-5 world maps from THPS 1-4 would not load.\r\n* Fixed HMD reading matrix translation 2 bytes too early (originally I was dividing by 0x10000 to account for this, but it turns out I was dumb, and the padding really was before the translation, it's just that the translation wasn't divided by anything).\r\n* Fixed visuals (like gizmos) not updating correctly because of a faulty check for zero-count mesh builders.\r\n* Renamed EntityName, TextureName, and AnimationName all to just Name.\r\n* Added Coordinate.IsAbsolute, when true, WorldMatrix will only use the coordinate's local matrix. This is needed for PSX, where transforms have no heirarchy, but hierarchy still exists and should be viewable.\r\n* Added ExtractRotationSafe extension method for Matrix3.\r\n* Time taken for a scan will now always be logged to the console for debug builds.\r\n* A lot of refactoring in PSXParser. Renamed instances of PSXModel to PSXMesh, to keep consistency with other parsers.\r\n* Added support for Neversoft PSX LOD levels. In settings.json, changing \"advancedPSXIncludeLODLevels\" to true will include all different LOD versions of a given model. For THPS, this is mostly a few differences in levels. For Spider Man, many mob characters have 1-2 low-poly variants.\r\n* Added support FOR JUST ONE SUBTYPE of Neversoft PSX animation. This is a matrix/translation frame-type animation, and is used infrequently for mostly mob characters and basic props.\r\n* Added Total Key Frames property to Animation.","shortMessageHtmlLink":"PSX LOD support and animation 0x2a subtype 0 (#187)"}},{"before":"8b20d48318e053a0ca95e014a8097095c882b2b3","after":"0b03e034300de2fd673d81417884adaf5abf6a65","ref":"refs/heads/no-deps","pushedAt":"2023-09-21T21:15:48.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"trigger-segfault","name":"Robert Jordan","path":"/trigger-segfault","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9752430?s=80&v=4"},"commit":{"message":"Shader state wrapper and Show Skeleton (#185)\n\n* Switched to a state machine wrapper around OpenGL (Shader class). This prevents unecessary changes to the state, which can increase FPS when previewing a large amount of models by about 50% or so.\r\n* Added mesh sorting for the models mesh batch for non-semi-transparent meshes.\r\n* Added option to show hierarchy skeleton with models. Note that this is somewhat experimental, as the size of joint nodes is decided by standard deviation (basically an average). Most models work fine, but for example, Frogger 2 frog models have joint nodes that are way too large. An option to adjust node size will be added in the future.\r\n* Added UI option to change how models are selected (either via bounds intersection or triangle intersection, or off).\r\n* Added UI option to preview a texture's palette.\r\n* Added UI option to preview a texture's/VRAM's semi-transparent bits.\r\n* Added UI option to disable camera rotation resetting when focusing.\r\n* Neversoft PSX models now have hierarchy coordinates, meaning they can be used with PSI/HMD animations. NOTE that PSX animations themselves still aren't readable/supported.\r\n* Fix BFF (FMM/FMW) sprites using the wrong vertex order, thus being invisible without Force Double-Sided enabled.\r\n* Added PreviewForm GetSelectedEntityBase and GetSelectedRootEntity, to reduce code duplication in the dozens of locations that all try to do the same thing.\r\n* Switched to int type instead of uint for OpenGL returned IDs (names). This was decided since int is the default type returned and accepted by GL. Note that setting a sampler uniform MUST HAVE THE ID CASTED TO UINT!\r\n* Fixed MeshBatch.ReuseArray not assigning to the array field, making the function completely useless.","shortMessageHtmlLink":"Shader state wrapper and Show Skeleton (#185)"}},{"before":"97b5a34a3f89849e34696d9abe498d2308844687","after":"8b20d48318e053a0ca95e014a8097095c882b2b3","ref":"refs/heads/no-deps","pushedAt":"2023-09-19T20:51:47.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"trigger-segfault","name":"Robert Jordan","path":"/trigger-segfault","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9752430?s=80&v=4"},"commit":{"message":"Shader-time joints system (#184)\n\n* Replaced attachments system with Joints. Instead of vertices trying to attach to vertices of a given ID, they now try to attach to a model joint with the given ID. These joints then have their matrices precomputed and dumped into an SSBO where the shader can look up the transform. This means you can now animate and display large models with attachments enabled without any lag. Because SSBOs require GLSL version 430. Checks have been put into place to see if its supported, and if its not, the program will fallback to baking connections like it used to.\r\n* To use the new joints system, RootEntity.PrepareJoints MUST be called after the model is setup (only if triangles have non-NoJoint joint values). Models must be assigned a joint ID that is referenced by a vertex/normal. Many models can share the same joint ID, but only the first will be used. Joint IDs (in the model and in the triangles) are remapped by RootEntity.PrepareJoints, so that only models that are needed as joints are put into the list.\r\n* glTF2 no longer exports joint nodes when it doesn't need to, now that what joints are needed are known ahead of time.\r\n* glTF2 now exports 1 skin per root entity, and not per the entire file.\r\n* Fixed Merge Models check box being disabled for glTF2 and DAE, even though support was added for it.\r\n* Changed scene.AutoAttach to AttachJointsMode, which can either be Hide (false), DontAttach (new), or Attach (true). Currently DontAttach cannot be enabled in the UI yet.\r\n* Fixed Neversoft PSX model joints not working with actor models. It turns out actors (for some insane reason) use the index of the model for the objects table to get the transform, when really the object matching the model index should be used. Currently this is detected by the presence of the BlockMap tagged chunk, and has had no issues with any games tested against.\r\n* Also fixed Neversoft PSX attachments not handling cases where an attachable vertex isn't used in a visible triangle.\r\n\r\nOther changes:\r\n* Fixed entity picking always using triangles, instead of defaulting to bounds intersection.\r\n* Fixed entity picking triangle mode only using the first triangle intersection, meaning the closest entity wasn't always picked.\r\n* FPS label now also shows triangles, meshes, ~~and skins (with shader-time-joints)~~ drawn.\r\n* Fixed vertex/wireframe size control visibility not changing if the Scene.Draw function was taking too long.\r\n* Checking a root entity tree node now automatically handles fixing connections.\r\n* About window now shows the GLSL (OpenGL Shader) version number, and whether joints are shader-time or pre-computed.\r\n* AnimationType is now readonly, because changing this can potentially crash the program.\r\n* AnimationBatch no longer updates the models mesh batch every frame when paused.\r\n* Added TMD Bindings support to PSI/HMD animations.\r\n* TMD Bindings form is no longer 0-indexed for the binding values. It also now shows a display names (with optional animation object names) for each ID. Additionally, properties are no longer sorted, meaning you won't get 1, 10, 11, 2, 3...\r\n* Replaced the many pointless instances of Array.Resize with new[]. Because for some reason I thought it made sense to resize the array when reusing it (even though the old values weren't needed)...","shortMessageHtmlLink":"Shader-time joints system (#184)"}},{"before":"5dec6bafe0ea861dc77702f3c8d85d404dcab2a0","after":"97b5a34a3f89849e34696d9abe498d2308844687","ref":"refs/heads/no-deps","pushedAt":"2023-09-14T19:50:02.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"trigger-segfault","name":"Robert Jordan","path":"/trigger-segfault","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9752430?s=80&v=4"},"commit":{"message":"glTF2 skin support and PSI parser fixes (#182)\n\n* Fixed PSI failing to parse in release builds because of a commented out line.\r\n* Fixed PSI\\x01 models failing to load, and also failing to handle skinning.\r\n* PSI sub-models now append their mesh name in the tree view.\r\n* Fixed packed textures not being exported correctly when attach limbs was turned off.\r\n* glTF2 now supports exporting skinned models with animation (using joints/skins).\r\n* Fixed glTF2 error that could occur when exporting HMD models with shared vertices.\r\n* Fixed attachable vertices not always exporting correctly if they were assigned to an empty model.\r\n* PSX TMD IDs are now assigned based on the object ID and not the model index (which should be more correct, considering hierarchy uses object indices too). This means TMD IDs can be assigned out of order again. :/\r\n* PSI default frame rate can now be changed in settings.json using \"advancedBFFFrameRate\". The default is 30, which works for Frogger 2 and Chicken Run. The other recommended value is 60, which works for Action Man 2.","shortMessageHtmlLink":"glTF2 skin support and PSI parser fixes (#182)"}},{"before":"5e8bda15112919ef7351f1997c9f7294aa2b1b12","after":"5dec6bafe0ea861dc77702f3c8d85d404dcab2a0","ref":"refs/heads/no-deps","pushedAt":"2023-09-12T19:42:04.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"trigger-segfault","name":"Robert Jordan","path":"/trigger-segfault","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9752430?s=80&v=4"},"commit":{"message":"PSI skinned actor and animation support (#181)\n\n* PSI skinned actors now look correct.\r\n* PSI animations are now read alongside PSI models.\r\n* Fixed FPS display to show framerate of renderer painting, and not framerate of timers (which was useless). The FPS counter is now hidden when in a tab that doesn't show the renderer.\r\n* Cleaned up some Release build warnings.","shortMessageHtmlLink":"PSI skinned actor and animation support (#181)"}},{"before":"99089137670bf918385857753387bbe9b2422a43","after":"5e8bda15112919ef7351f1997c9f7294aa2b1b12","ref":"refs/heads/no-deps","pushedAt":"2023-09-10T19:57:08.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"trigger-segfault","name":"Robert Jordan","path":"/trigger-segfault","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9752430?s=80&v=4"},"commit":{"message":"Improved exporter grouping support, and glTF2 coordinate support (#180)\n\n* Exported HMD animations now have correct coordinate handling, so interpolation will work as expected.\r\n* glTF2 and DAE exporters now support entity merging (even with animations).\r\n* Although not available in the UI yet, support for splitting up exported models by TMDID has been added.\r\n* Basic fixes for exporting models that use packed textures. The textures will look correct, but auto packing is not available yet.","shortMessageHtmlLink":"Improved exporter grouping support, and glTF2 coordinate support (#180)"}},{"before":"756caf9cddf5ff2aaa9da64cb81422ca27cdb883","after":"99089137670bf918385857753387bbe9b2422a43","ref":"refs/heads/no-deps","pushedAt":"2023-09-09T22:55:33.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"trigger-segfault","name":"Robert Jordan","path":"/trigger-segfault","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9752430?s=80&v=4"},"commit":{"message":"PSI Actor and FMW World support (#179)\n\n* Added support for reading Blitz Games PSI\\x00 and PSI\\x01 actor models. Skinned models still don't show up correctly, but it's possible that how they're handled is hardcoded (as seen with Frogger 2 head matrix logic).\r\n* Added support for reading BFF as a container (instead of individual FMM meshes). With this, FMW worlds are now read, and all associated FMM meshes are combined into one world root model. This means you no longer need to check 100+ tree view items to view an entire map, and it also makes it possible to view Chicken Run maps (where before you didn't have positional information, so even checking models wouldn't help).\r\n* Currently PILParser is included when BFF models are scanned, this will check for the PIL container format, or for standalone PSI\\x00 files (which are seen in Chicken Run).\r\n* Disabled the double-sided flag for FMM models, since they're never double sided, and they look correct now that the vertex order was swapped.\r\n* It's not recommended to use Align 2048 when scanning BFF, as many bffs are stored in Stak files, which makes it possible that the stored bff is no longer at the same alignment. The recommended alignment for BFF is Align 4.\r\n* SPT now enforces a minimum alignment of 2048 to prevent eating up gigabytes of memory in a short span of time. This won't affect the alignment of other parsers though.","shortMessageHtmlLink":"PSI Actor and FMW World support (#179)"}},{"before":"834a67de6ebdb37a32cc9ff5e687d8f7248caef1","after":"756caf9cddf5ff2aaa9da64cb81422ca27cdb883","ref":"refs/heads/no-deps","pushedAt":"2023-09-09T13:46:19.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"trigger-segfault","name":"Robert Jordan","path":"/trigger-segfault","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9752430?s=80&v=4"},"commit":{"message":"TIM changes, and prototype PXL, CLT parsers (#178)\n\n* Added UI menu item to Show Missing Textures (under Textures).\r\n* Added PXLParser and CLTParser. Although we can parse PXL and CLT, there's still no way to make-use of them, since we don't have a system for attaching loose palettes to textures yet. So currently these cannot be enabled.\r\n* TIMParser now publicly exposes functions expecting bpp instead of pmode. Changed LoadTexture2 to LoadTexturePacked, since that's all its ever used for.\r\n* ResultAddedActions can now return false to claim that they don't want a result, in which case the FileOffsetScanner will dispose of the result.\r\n* Fixed Scanner log stating that X (total) results have been found when only Y (current) results were found in this particular scan.\r\n* Fixed incorrect stride being assigned to 8bpp textures in TIMParser, this wasn't causing any errors except with textures that had odd-numbered widths, meaning the padding was incorrect.\r\n* Added new sanity check to SPT, which is reading the pixel count before the image data.\r\n* Removed one sanity check from SPT, which is zero-nameCRC, which is used for empty textures.\r\n* Added seek after clut in TIMParser, since it's possible there could be padding after that.\r\n* Fixed BFF missing Double-sided flag for non-sprites.\r\n* Swapped order of assignment for BFF vertices.\r\n* Tweaked BFF zeroForm header detection.\r\n* Fixed BFF non-zeroForm treating values after position as rotation, which they aren't.","shortMessageHtmlLink":"TIM changes, and prototype PXL, CLT parsers (#178)"}},{"before":"1d3e6936fabd86eafdf173857ba6609267f01bc7","after":"834a67de6ebdb37a32cc9ff5e687d8f7248caef1","ref":"refs/heads/no-deps","pushedAt":"2023-09-07T20:36:51.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"trigger-segfault","name":"Robert Jordan","path":"/trigger-segfault","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9752430?s=80&v=4"},"commit":{"message":"Remember and bookmark recent scan history (#177)\n\n* Recent scans are now remembered and can be selected from in a combobox at the top of the scanner window.\r\n* Using the '+' button allows you to bookmark history, so that it will never be removed (and you can give it a name).\r\n* Using the '-' button will remove history (bookmarked or recent).\r\n* Default names are assigned to history based on the formats, filter, and file path of the scan options.\r\n* Changed ResultIndex to show in property grid for Debug builds.\r\n* Fixed regex/wildcard filters being overwritten in certain scenarios when opening the scanner window.","shortMessageHtmlLink":"Remember and bookmark recent scan history (#177)"}},{"before":"4a72e89ca48aea8e9c69d9e8fd4f6db2a9e78c05","after":"1d3e6936fabd86eafdf173857ba6609267f01bc7","ref":"refs/heads/no-deps","pushedAt":"2023-09-04T18:59:52.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"trigger-segfault","name":"Robert Jordan","path":"/trigger-segfault","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9752430?s=80&v=4"},"commit":{"message":"Regex filter support\n\n* Added Use Regular Expressions checkbox and `-regex` command line option to change filter into regex pattern.\r\n* When in regex mode, the scanner form will report errors with the regex pattern by changing the font color to red and changing the tooltip of the textbox to the exception message.\r\n* Now that files are filtered with regex internally, the `;1` postfix can always be excluded from BIN contents file names.\r\n* Removed -binalign command line option since it's useless when you can just use `-align 2048`.\r\n* Added tooltips to most format checkboxes.\r\n* Added \"Neversoft\" and \"Blitz Games\" in parenthesis to BFF and PSX in README.md. Similarly, made the format clearer in the `-help` message.","shortMessageHtmlLink":"Regex filter support"}},{"before":"726eaccbf11701bc09d15001e67907df48ea71f1","after":"4a72e89ca48aea8e9c69d9e8fd4f6db2a9e78c05","ref":"refs/heads/no-deps","pushedAt":"2023-09-04T16:54:40.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"trigger-segfault","name":"Robert Jordan","path":"/trigger-segfault","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9752430?s=80&v=4"},"commit":{"message":"PSX Textures, Semi-Transparency, Gouraud, Sprite support (#175)\n\nPSX:\r\n* PSXParser can now read textures, and also read PSX files that ONLY have textures.\r\n* PSX textures automatically handle their own masking (no longer need to set Magenta mask color) and setting of certain stp bits. There are a lot of convoluted rules on how masking/stp-setting works.\r\n* PSX textures are the same as SPT, and must be packed before usage. Unlike SPT, UV coordinates are absolute. PSX UV coordinates are tiled around the texture size, this is why absolute coordinates are used.\r\n* Added support for all (observed) semi-transparency flags. It turns out the invisible flag is only invisible when 0x2 in a set of 3 bits. Everything else is either opaque, semi-transparent, or unobserved.\r\n* Gouraud palette is now parsed in RGBs tagged chunk. It turns out the chunk can be less than 256 entries. If black repeats itself in the palette, then it has special properties and isn't really black. For now, these special blacks are changed to default gray.\r\n* When HIER (hierarchy) tagged chunks are present, vertices have their values divided by 16.0. This fixes many humanoid models looking incomprihensible, but doesn't solve everything entirely. It also fixes these models being incredibly large in comparison to the world. Now their size is accurate.\r\n* PSX now flushes triangles after each model is parsed (so we don't need to iterate through objectCount x modelCount sets of grouped triangles every time). This also means all models are now listed in TMDID order.\r\n* PSX TMDIDs are now 1-indexed, like everything else usually is.\r\n* Added SpriteNoPitch render flag, which is used for sprites that face the camera, but only via yaw rotation. PSX models use these sprites, signaled by vertex pad 16.\r\n* Added advanced settings.json option to include invisible faces in PSX models.\r\n\r\nOther:\r\n* Added advanced settings.json options to control the scale divisor for each of the following formats: BFF, MOD, PSX.\r\n* Added settings.json option (no UI item yet) to show missing textures when a texture could not be looked up or packed.\r\n* Textures now show orange/black missing texture pattern if UVs go out of bounds (when not tiled). This should never happen, since UVs are always read as bytes, but it's a debugging measure in case something is broken.\r\n* Some refactoring to BFF and MOD formats to follow the same changes to PSX.\r\n* Fixed typo for PSX format tooltip in scanner window.\r\n* Added preprocessor define ENABLE_CLIPBOARD (currently only used in debug builds) to enable using Ctrl+C to copy the scene, or texture/VRAM preview.\r\n* Added pixel getter functions to Texture.\r\n* Changed palette storage to ushort in the native 5/5/5/stp format. This means we no longer need a separate palette for semi-transparency. It also means storage usage goes down by a lot. Added TexturePalette static class to make it easier to manage these palette colors.\r\n* All scan results now store their original file offset.\r\n* All scan results now store the index of their result type in the current match.\r\n* Added debug-toggleable mode to mark pixel semi-transparency in the texure/VRAM preview.\r\n* Added debug-toggleable mode to preview a texture's palette instead of the texture.\r\n* Added debug-toggleable mode to select models via triangle collision instead of bounds collision.\r\n* Added GC.Collect() to ClearScanResults, so that memory is freed up ASAP.\r\n* Texture packing now only happens in UpdateSelectedEntity if updateMeshData is true (to reduce lag from small updates).\r\n* Changed GL.ClearColor to use alpha of 1.0, so that calling GL.ReadPixels won't return gray for the back color.","shortMessageHtmlLink":"PSX Textures, Semi-Transparency, Gouraud, Sprite support (#175)"}},{"before":"c2c76eca45aab49ab02760b328558eabe0882d62","after":"726eaccbf11701bc09d15001e67907df48ea71f1","ref":"refs/heads/no-deps","pushedAt":"2023-08-30T00:24:20.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"trigger-segfault","name":"Robert Jordan","path":"/trigger-segfault","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9752430?s=80&v=4"},"commit":{"message":"SPT Support and more UI options\n\n* Removed focus argument from SetupMultipleEntityBatch, this should now be handled by PreviewForm.\r\n* Added support for texture ID lookup and packing, making it possible to render textures that don't have an assigned VRAM page or coordinates.\r\n* Added support for BFF sprite packets (zeroForm). The scale isn't fully known yet, for now its assumed to be 2.5, but that programatically doesn't seem right, since it should be getting scaled by an integer. It might be fine though, since there's also division involved with the sprite's z position.\r\n* Added Unlit flag to BFF models, since BFF never supports normals.\r\n* Added SPTParser for \"Sprite\" file format used together with BFF. Unlike other formats, SPT is NEVER scanned unless explicitly checked, this is because the format produces a large amount of false positives...\r\n* Added MinOffsetIncrement property to FileOffsetScanner, changing this during Parse will change how far to increment the offset by, this is needed for SPTParser to prevent (N-0)+(N-1)+(N-2)+...+(N-N+1) combinations of matched SPT textures.\r\n* Added setting to enable/disable Vertex Color.\r\n* Added setting for sub-models visibility. Either All, Selected Only, or all With Same TMD ID. Removed M debug key that used to control this behavior.\r\n* Added settings for Auto Focus. You can disable focus on selecting a root and/or sub-model. And you can change whether focus includes the bounds of the checked models and/or the whole model.\r\n* Added Auto Pack Textures setting, which behaves similar to Auto Draw Textures, but handles looking up and packing textures into VRAM based on lookup IDs. This makes it possible to easily browse files using lookup ID textures without needing to manually mess with texture drawing to VRAM.\r\n* Added option to show FPS. Checking it will display the FPS in the title bar.\r\n* Add antialiasing settings.json option, which can be set to 0,1,2,4,8.\r\n* Light intensity is now stored and displayed as 1.0 for the base value, instead of as a percent. Settings.json files will automatically update the light intensity.\r\n* Add options to check all/uncheck all models/animations. Checking all for more than 100 models will pop up a warning asking if the user is sure they want to do this.\r\n* All uses of MessageBox.Show in PreviewForm have been replaced with ShowMessageBox functions. These should always be used instead so that they can enforce the Enter/LeaveDialog behavior.\r\n* UpdateSelectedEntity now has a focus option, and no longer relies on `_selectionSource` to determine if it should focus.\r\n* A message box is no longer shown when clearing VRAM pages.\r\n* Fixed TreeView double-clicking checkbox desync bug, that would cause the checkbox to not visually represent its real state.\r\n* Fixed a handful of bugs with ImageListView and changed Shift+click behavior to how it should be expected to work (where its are selected in a list, and not in a rectangular area).\r\n* Fixed depth buffer bit depth being too low on lower-end laptops with integrated graphics.\r\n* Fixed child entity nodes not being loaded before trying to access them in SelectEntity.","shortMessageHtmlLink":"SPT Support and more UI options"}},{"before":"3461f3d17d7cee30cf0ef29fc6b5222771967d29","after":"c2c76eca45aab49ab02760b328558eabe0882d62","ref":"refs/heads/no-deps","pushedAt":"2023-08-29T02:19:30.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"rickomax","name":"Ricardo Reis","path":"/rickomax","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12863984?s=80&v=4"},"commit":{"message":"Bumped .NET version to 4.5.1","shortMessageHtmlLink":"Bumped .NET version to 4.5.1"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"Y3Vyc29yOnYyOpK7MjAyMy0xMS0wOVQyMTowMjoxOC4wMDAwMDBazwAAAAOrrJVG","startCursor":"Y3Vyc29yOnYyOpK7MjAyMy0xMS0wOVQyMTowMjoxOC4wMDAwMDBazwAAAAOrrJVG","endCursor":"Y3Vyc29yOnYyOpK7MjAyMy0wOC0yOVQwMjoxOTozMC4wMDAwMDBazwAAAAN0eke-"}},"title":"Activity ยท rickomax/psxprev"}