Skip to content

Commit

Permalink
npt-flange prints and README update
Browse files Browse the repository at this point in the history
  • Loading branch information
soypat committed Aug 18, 2024
1 parent 8cd5581 commit 0ba4992
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 9 deletions.
23 changes: 20 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,28 @@ Offshoot from [this project](https://github.com/soypat/sdf/pull/13). Is WIP.
This was converted from the [original example](https://github.com/soypat/sdf/blob/main/examples/npt-flange/flange.go). See [README](https://github.com/soypat/sdf/tree/main/examples) for images.


See working example under [examples](./examples/) directory. Run on GPU with `-gpu` flag:
See working example under [examples](./examples/) directory. Run on GPU with `-gpu` flag: `go run ./examples/npt-flange -gpu`

Output and timings for
- CPU: 12th Gen Intel i5-12400F (12) @ 4.400GHz
- GPU: AMD ATI Radeon RX 6800

```sh
go run ./examples/npt-flange -gpu
```
$ time go run ./examples/npt-flange/ -gpu
enabled GPU usage
SDF created in 5.253108ms evaluated sdf 13808829 times, rendered 219992 triangles in 847.606426ms wrote file in 29.16306ms

real 0m1,307s
user 0m0,753s
sys 0m0,284s

$ time go run ./examples/npt-flange/
SDF created in 229.895µs evaluated sdf 13808405 times, rendered 220064 triangles in 2.411541291s wrote file in 28.265793ms

real 0m2,744s
user 0m2,826s
sys 0m0,280s
```


```go
Expand Down
22 changes: 16 additions & 6 deletions examples/npt-flange/flange.go
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package main

import (
"bufio"
"bytes"
"flag"
"fmt"
"log"
"os"
"runtime"
"time"

"github.com/soypat/gsdf"
"github.com/soypat/gsdf/forge/threads"
Expand All @@ -19,7 +21,7 @@ func init() {
flag.BoolVar(&useGPU, "gpu", useGPU, "Enable GPU usage")
flag.Parse()
if useGPU {
fmt.Println("enable GPU usage")
fmt.Println("enabled GPU usage")
runtime.LockOSThread() // For when using GPU this is required.
}
}
Expand All @@ -32,41 +34,49 @@ func main() {
if useGPU {
terminate, err := gleval.Init1x1GLFW()
if err != nil {
log.Fatal("FAIL to start GLFW", err.Error())
log.Fatal("failed to start GLFW", err.Error())
}
defer terminate()
}
sceneStart := time.Now()
sdf, err := scene()
if err != nil {
fmt.Println("error making scene:", err)
os.Exit(1)
}
const resDiv = 100
elapsedScene := time.Since(sceneStart)
const resDiv = 200
const evaluationBufferSize = 1024 * 8
resolution := sdf.Bounds().Size().Max() / resDiv
renderer, err := glrender.NewOctreeRenderer(sdf, resolution, evaluationBufferSize)
if err != nil {
fmt.Println("error creating renderer:", err)
os.Exit(1)
}
start := time.Now()
triangles, err := glrender.RenderAll(renderer)
if err != nil {
fmt.Println("error rendering triangles:", err)
os.Exit(1)
}
elapsed := time.Since(start)
evals := sdf.(interface{ Evaluations() uint64 }).Evaluations()
fmt.Println("evaluated sdf", evals, "times")

fp, err := os.Create("nptflange.stl")
if err != nil {
fmt.Println("error creating file:", err)
os.Exit(1)
}
defer fp.Close()
_, err = glrender.WriteBinarySTL(fp, triangles)
start = time.Now()
w := bufio.NewWriter(fp)
_, err = glrender.WriteBinarySTL(w, triangles)
if err != nil {
fmt.Println("error creating file:", err)
fmt.Println("error writing triangles to file:", err)
os.Exit(1)
}
w.Flush()
fmt.Println("SDF created in ", elapsedScene, "evaluated sdf", evals, "times, rendered", len(triangles), "triangles in", elapsed, "wrote file in", time.Since(start))
}

func scene() (gleval.SDF3, error) {
Expand Down

0 comments on commit 0ba4992

Please sign in to comment.