diff --git a/asig/asig.go b/asig/asig.go index 0976fdd..6ea743b 100755 --- a/asig/asig.go +++ b/asig/asig.go @@ -10,10 +10,12 @@ package asig //Functions struct aiScene* aiImportFile(const char* pFile, unsigned int pFlags); - +void aiReleaseImport(const struct aiScene* pScene); +const char* aiGetErrorString(); */ import "C" import ( + "errors" "unsafe" "github.com/bloeys/gglm/gglm" @@ -50,15 +52,22 @@ type Scene struct { Cameras []*Camera } -func ImportFile(file string, postProcessFlags uint) *Scene { +func ImportFile(file string, postProcessFlags uint) (*Scene, error) { cstr := C.CString(file) defer C.free(unsafe.Pointer(cstr)) cs := C.aiImportFile(cstr, C.uint(postProcessFlags)) - scene := parseScene(cs) + if cs == nil { + return nil, getAiErr() + } + defer C.aiReleaseImport(cs) - return scene + return parseScene(cs), nil +} + +func getAiErr() error { + return errors.New("asig error: " + C.GoString(C.aiGetErrorString())) } func parseScene(cs *C.struct_aiScene) *Scene { diff --git a/main.go b/main.go index 7b7701e..6f5cf78 100755 --- a/main.go +++ b/main.go @@ -8,7 +8,10 @@ import ( func main() { - scene := asig.ImportFile("obj.obj", 0) + scene, err := asig.ImportFile("objz.obj", 0) + if err != nil { + panic(err) + } for i := 0; i < len(scene.Meshes); i++ {