GithubHelp home page GithubHelp logo

okmatija / prizm Goto Github PK

View Code? Open in Web Editor NEW
32.0 1.0 0.0 14.96 MB

A Computational Geometry Debugging Tool

Home Page: https://discord.gg/zxKqvwmXNs

License: MIT License

C++ 97.83% GLSL 2.17%
debugging debugging-tool engine-development geometry-algorithms geometry-processing graphics-programming mesh-processing meshes unreal-engine unreal-engine-utilities visualization geometry imgui sdl computational-geometry header-only

prizm's Introduction

Prizm

Prizm is a tool for debugging computational geometry algorithms using a simple workflow:

  1. Write debug files using the OBJ format
  2. Inspect the files to find bugs

See the wiki for video tutorials. There is also a Discord server.

Prizm 0.8.0 Screenshot

There are many tools which can be used to implement this two-step debugging workflow (e.g., MeshLab, Polyscope, ParaView, Meshmixer, Graphite, VisIt). Prizm differs from these tools in the following ways:

  • Narrower scope. The tools listed above have modelling features, geometry processing features, or are platforms for developing geometry processing algorithms. Prizm on the other hand is exclusively focused on the workflow outlined above, which means that it ships with only a small number of geometry processing features, the ones that have directly helped with debugging. Furthermore, Prizm is not intended to be in development forever, once the issues for the Version 1.0.0 milestone are addressed the program will stabilize and recieve only bug fix changes, to be maximally effective while debugging becoming familiar with your tools and being able to rely on them not changing much is helpful.

  • Simpler/faster UI/UX. This is of course a very subjective, but nevertheless the narrow scope of Prizm means that all the effort/iteration around improving UI/UX is necessarily focussed on the singular debugging use case. This focus has (hopefully) resulted in a tool which enables users to identify and fix problems very quickly. Prizm and its predecessors have been used for many years to debug problems arising in different domains and its feature set has evolved through direct experience. It should be useful when inspecting a single file or in cases where you need to sift through/transform a large set of files to identify a problem.

  • Simpler to extend. It is common for other tools to be written in C++ and scriptable at runtime using Python. The binding code to implement this interoperation complicates the program making it harder to understand/change/extend. Prizm is implemented using Jai, a new systems programming language with powerful metaprogramming features and very fast compile times. Taken together these features enable 'scripting' to be conveniently implemented via regular functions tagged with a @RegisterCommand note which the build program can inspect to generate the boiler plate code so that the function can be called in the console*.

  • Stand-alone. Some tools can directly embedded in your C++ program, and programmers familiar with graphics APIs can of course write their own visualization code for debugging directly in the original program. This can be very helpful because you can inspect data as you step through your program. Prizm is intentionally not a library and cannot be directly embedded in other programs, it is intended to be useful in any situtation where you might be developing geometry code, regardless of framework or language etc. We have attempted to mitigate the downsides of having a stand-alone tool by implementing features which aim to support the same convenience**

* Implementing hot code reloading is a high priority feature and should make Prizm's scripting workflow quite similar to the runtime scripting features available in other tools because you will be able to add console commands without restarting Prizm. Also, as of March 2024, Jai is in closed beta which means that for most people Prizm will only be useful in binary form. When the compiler is publically released people familiar with C++ should find Jai very easy to pick up.

** For example hot-reloading files/folders and supporting "always on top" transparent windows, see the wiki for more details. Implementing a feature where your program can exchange data with Prizm via a shared memory channel/socket is a high priority feature.

prizm's People

Contributors

epicmatijakecman avatar okmatija avatar

Stargazers

 avatar Tetsuo Koyama avatar Matt Morse avatar  avatar Syeam Bin Abdullah avatar Rorik Weide avatar  avatar Roey Borsteinas avatar  avatar  avatar Siva avatar  avatar Lucas avatar Сергѣй  Лоскутниковъ ☦️ avatar Max Slater avatar SumoFat avatar Felix avatar ahmed avatar Ryan Capote avatar Guillaume Fradin avatar Sam H. Smith avatar Jérémie Dumas avatar Charles Taylor avatar Martin avatar Valentin Ignatev avatar Ben Ahlbrand avatar  avatar Logan Barnes avatar  avatar  avatar Tom Foster avatar Jimme Jardine avatar

Watchers

 avatar

prizm's Issues

Enable toggling of window topmost state at runtime

Currently the Prizm window can only be set to topmost if the --AlwaysOnTop is passed on startup. If we update to SDL2 version >= 2.0.16 then it will be possible to toggle this state at runtime, we could also consider implementing this outside SDL but we're using quite an old version so updating might be good anyway...

Add ability to send data between processes

Support the following use cases:

Application --> Local Prizm (as an alternative to using file hot-reloading)
Local Prizm --> Remote Prizm (useful for pair programming debug sessions or screenshares)

This could be implemented via TCP sockets?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.