11 Commits

Author SHA1 Message Date
41995b60bb Update README.md 2024-12-12 11:52:04 +04:00
e6f5dca6da Update README.md 2024-12-12 11:51:33 +04:00
0bc81ac5ba Fix bug in parseNodes 2022-10-01 06:35:29 +04:00
6bb760fc0a Protect against aiString being empty 2022-10-01 06:20:53 +04:00
362558c877 Use darwin_amd64 built by mac 10.15 2022-01-27 05:22:58 +04:00
7e82370f34 Edit text 2022-01-27 04:58:35 +04:00
58e13d1c5a Add badge 2022-01-27 04:58:03 +04:00
bfa7357ea2 Add github action to run on intel mac 2022-01-27 04:55:58 +04:00
dd346de9de Add intel mac assimp dylib 2022-01-27 04:24:08 +04:00
babf9c3926 Fix readme typo 2022-01-27 03:31:03 +04:00
0fdd5d479c Update readme 2022-01-22 08:16:26 +04:00
5 changed files with 59 additions and 13 deletions

20
.github/workflows/run-assimp-go.yml vendored Executable file
View File

@ -0,0 +1,20 @@
name: Build-AssImp
on:
create:
jobs:
Run-assimp-go-macos:
runs-on: macos-10.15
steps:
- name: Install golang 1.17
uses: actions/setup-go@v2
with:
go-version: '^1.17'
- name: Clone assimp-go
run: git clone https://github.com/bloeys/assimp-go
- name: Copy dylib
working-directory: assimp-go
run: sudo mkdir -p /usr/local/lib && sudo cp asig/libs/libassimp_darwin_amd64.dylib /usr/local/lib/libassimp.5.dylib
- name: Run assimp-go
working-directory: assimp-go
run: go run .

3
.gitignore vendored
View File

@ -18,4 +18,5 @@ vendor/
!obj.obj
*.fbx
*.glb
!libassimp_darwin_arm64.dylib
!libassimp_darwin_arm64.dylib
!libassimp_darwin_amd64.dylib

View File

@ -1,5 +1,7 @@
# assimp-go
[![Build](https://github.com/bloeys/assimp-go/actions/workflows/run-assimp-go.yml/badge.svg)](https://github.com/bloeys/assimp-go/actions/workflows/run-assimp-go.yml)
A Handcrafted Open Asset Import Library (AssImp) wrapper for Go.
## Features
@ -25,19 +27,32 @@ Unimplemented (yet) AssImp Scene objects:
To run the project you need:
* A 64-bit machine (32-bit machines should be supportable if we get help adding the needed libs)
* A recent version of [Go](https://golang.org/) installed (1.17+)
* A C/C++ compiler installed and in your path
* Windows: [MingW](https://www.mingw-w64.org/downloads/#mingw-builds) or similar
* Mac/Linux: Should be installed by default, but if not try [GCC](https://gcc.gnu.org/) or [Clang](https://releases.llvm.org/download.html)
* Download the appropriate DLL for your version and put it in the root of your Go project
* **Windows**: [MingW](https://www.mingw-w64.org/downloads/#mingw-builds) or similar
* **Mac/Linux**: Should be installed by default, but if not try [GCC](https://gcc.gnu.org/) or [Clang](https://releases.llvm.org/download.html)
Then simply clone and use `go run .`
Now to be able to run assimp-go you will need the AssImp shared libraries (DLLs/DyLibs), which you can
download from the GitHub releases page.
### Installing on Windows
Download the **.dll** of the [release you want](https://github.com/bloeys/assimp-go/releases), and place it in the **root** of your Go project.
### Installing on MacOS
First, download the appropriate **.dylib** for your device (`_amd64` for Intel CPUs and `_arm64` for Apple CPUs).
Next you will need to rename the lib to `libassimp.5.dylib` and move it to `/usr/local/lib` or `/usr/lib`.
You can use this command to do it: `sudo mkdir -p /usr/local/lib && sudo cp libassimp_darwin*.dylib /usr/local/lib/libassimp.5.dylib`
### Running assimp-go
Use `go run .` to run the simple example in `main.go` ;)
> Note: that it might take a while to run the first time because of downloading/compiling dependencies.
`assimp-go` dynamically links (e.g. through a DLL) AssImp using platform dependent libraries, which are made available with the GitHub releases.
Currently only `Windows` libraries are available, but more should be easy to add by compiling AssImp on the wanted platform. (Make a PR if you can help us get those binaries!)
### Getting Started
```Go
@ -85,14 +100,13 @@ While `asig` functions should NOT be called on a Scene (or its objects) after th
## Developing assimp-go
We link against assimp libraries that are built for each platform and the `*.a` files are added to the `asig/libs` package.
Depending on the platform we select one of them and link against it when doing `go build`.
We link against assimp libraries that are built for each platform and the `.a`/`.dylib` files are added to the `asig/libs` package.
At build time, the `#cgo` directive choose the appropriate libs and links against them.
The general steps are:
* Copy assimp includes into `asig/assimp`
* Copy `zlib.h`, `zconf.h` and `irrXML.h` into `asig/zlib` and `asig/irrxml` respectively.
* Copy static libraries and DLL import libraries into `asig/libs`
* Copy libraries and DLL import libraries into `asig/libs`
> Note: When dealing with libraries the compiler will probably (e.g. MinGW does this) ignore `lib` prefixes and `.a`/`.lib` suffixes.
So if your lib name is `libassimp.a` you need to pass it to CGO as `-l assimp`, otherwise you will get an error about library not found.
@ -111,3 +125,9 @@ Now assuming you are using MinGW on windows:
* Run `cmake --build . --parallel 6`
* Copy the generated `*.lib` (or `*.a`) files from the `lib` folder and into `asig/libs`, and copy the generated dll from AssImp `bin` folder into the root of `assimp-go`.
* Copy the generated `libzlibstatic.a` file from `contrib/zlib` and into the `asig/libs` folder.
**MacOS**:
* Clone wanted release of assimp and run `cmake CMakeLists.txt -D ASSIMP_BUILD_ZLIB=ON -D ASSIMP_BUILD_ASSIMP_TOOLS=OFF` in the root folder
* Run `cmake --build . --parallel 6`
* Copy the generated `*.dylib` files from the `bin` folder and into both `asig/libs` and `/usr/local/lib`

View File

@ -4,6 +4,7 @@ package asig
#cgo CFLAGS: -I .
#cgo LDFLAGS: -L libs
#cgo windows,amd64 LDFLAGS: -l assimp_windows_amd64
#cgo darwin,amd64 LDFLAGS: -l assimp_darwin_amd64
#cgo darwin,arm64 LDFLAGS: -l assimp_darwin_arm64
#include "wrap.c"
@ -214,7 +215,7 @@ func parseNodes(cNodesIn **C.struct_aiNode, parent *Node, parentChildrenCount ui
}
//Parse node's children
nodes[i].Children = parseNodes(n.mChildren, nodes[i], parentChildrenCount)
nodes[i].Children = parseNodes(n.mChildren, nodes[i], uint(n.mNumChildren))
}
return nodes
@ -518,6 +519,10 @@ func parseVertexWeights(cWeights *C.struct_aiVertexWeight, count uint) []VertexW
}
func parseAiString(aiString C.struct_aiString) string {
if aiString.length == 0 {
return ""
}
return C.GoStringN(&aiString.data[0], C.int(aiString.length))
}

Binary file not shown.