move flutter_filament plugin to federated structure

This commit is contained in:
Nick Fisher
2024-05-15 22:25:46 +08:00
parent 66e5e38324
commit 6b50dc9d36
325 changed files with 32625 additions and 0 deletions

View File

@@ -0,0 +1,10 @@
LDFLAGS:=-lfilament -lbackend -lfilameshio -lviewer -lfilamat -lgeometry -lutils -lfilabridge -lgltfio_core -lfilament-iblprefilter -limage -limageio -ltinyexr -lgltfio_core -lfilaflat -ldracodec -libl -lktxreader -lpng -lz -lstb -luberzlib -lsmol-v -luberarchive -lzstd -lvkshaders -lbluegl -lbluevk -lbasis_transcoder -lmeshoptimizer -L../macos/lib -framework CoreFoundation -framework Foundation -framework CoreVideo -framework Metal -framework QuartzCore -framework Cocoa
clean:
rm ./out/test
run: build
./out/test
build: cpp/test.cpp
mkdir -p out
clang++ -I../ios/include/filament -I../ios/include/ cpp/test.cpp ../macos/src/SceneManager.cpp --std=c++17 $(LDFLAGS) -o out/test

View File

@@ -0,0 +1,94 @@
#include <filament/Engine.h>
#include <iostream>
#include <math.h>
#include <fstream>
#include <cstring>
#include <vector>
#include <string>
#include <map>
#include <unistd.h>
#include "SceneManager.hpp"
#include "ResourceBuffer.hpp"
using namespace filament;
using namespace flutter_filament;
using namespace std;
int _i = 0;
ResourceBuffer loadResource(const char* name) {
std::cout << "LOADING RESOURCE" << std::endl;
char cwd[PATH_MAX];
if (getcwd(cwd, sizeof(cwd)) != NULL) {
std::cout << "Current working dir: " << cwd << std::endl;
}
string name_str(name);
auto id = _i++;
name_str = string(cwd) + string("/") + name_str;
std::cout << "Loading resource at " << name_str.c_str() << std::endl;
streampos length;
ifstream is(name_str, ios::binary);
ResourceBuffer rb { nullptr, -1, 0 };
if(!is) {
std::cout << "Failed to find resource at file path " << name_str.c_str() << std::endl;
return rb;
}
is.seekg (0, ios::end);
length = is.tellg();
char * buffer;
buffer = new char [length];
is.seekg (0, ios::beg);
is.read (buffer, length);
is.close();
return ResourceBuffer { buffer, static_cast<int32_t>(length), id };
}
void freeResource(ResourceBuffer rb) {
}
int main(int argc, char** argv) {
auto engine = Engine::create();
auto scene = engine->createScene();
auto loader = ResourceLoaderWrapper(loadResource, freeResource);
auto sceneManager = SceneManager(&loader, engine, scene, nullptr);
auto shapes = sceneManager.loadGlb("../example/assets/shapes/shapes.glb", 2);
sceneManager.remove(shapes);
shapes = sceneManager.loadGlb("../example/assets/shapes/shapes.glb", 2);
auto instanceCount = sceneManager.getInstanceCount(shapes);
assert(instanceCount == 2);
EntityId instances[instanceCount];
sceneManager.getInstances(shapes, instances);
sceneManager.transformToUnitCube(shapes);
auto morphTargetNames = sceneManager.getMorphTargetNames(shapes, "Cylinder");
assert(morphTargetNames->size() == 4);
morphTargetNames = sceneManager.getMorphTargetNames(shapes, "Cube");
assert(morphTargetNames->size() == 2);
morphTargetNames = sceneManager.getMorphTargetNames(shapes, "Cone");
assert(morphTargetNames->size() == 8);
math::mat4f boneTransform;
sceneManager.setBoneTransform(shapes, "Cylinder", 0, "Bone", boneTransform);
sceneManager.destroyAll();
}

View File

@@ -0,0 +1,66 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:vector_math/vector_math_64.dart';
void main() {
test('Plane', () {
var plane = Plane()..setFromComponents(1, 0, 0, 2);
print(plane.distanceToVector3(Vector3(-1, 0, 0)));
});
test('Check if point is inside frustum', () {
var frustum = Frustum();
frustum.plane0.setFromComponents(-0.868, 0, 0.49, 0);
frustum.plane1.setFromComponents(0.868, 0, 0.49, 0);
frustum.plane2.setFromComponents(0, -0.919, 0.39, 0);
frustum.plane3.setFromComponents(0, 0.919, 0.39, 0);
frustum.plane4.setFromComponents(0, 0, -1, -999.88);
frustum.plane5.setFromComponents(0, 0, 1, 0.05);
var point = Vector3(0, 0, -1);
print(frustum.plane0.distanceToVector3(point));
print(frustum.plane1.distanceToVector3(point));
print(frustum.plane2.distanceToVector3(point));
print(frustum.plane3.distanceToVector3(point));
print(frustum.plane4.distanceToVector3(point));
print(frustum.plane5.distanceToVector3(point));
print(frustum.containsVector3(point));
});
test("Lukas test", () {
final frustum = Frustum();
//left
frustum.plane0.setFromComponents(-1.0, 0, 0, 1);
//right
frustum.plane1.setFromComponents(1.0, 0, 0, 2.0);
//bottom
frustum.plane2.setFromComponents(0, -1, 0, 1);
//top
frustum.plane3.setFromComponents(0, 1, 0, 1);
//far
frustum.plane4.setFromComponents(0, 0, -1, 1);
//near
frustum.plane5.setFromComponents(0, 0, 1, 1);
// vector3
final point = Vector3(-0.5, 0, 0);
print(frustum.plane0.distanceToVector3(point));
print(frustum.plane1.distanceToVector3(point));
print(frustum.plane2.distanceToVector3(point));
print(frustum.plane3.distanceToVector3(point));
print(frustum.plane4.distanceToVector3(point));
print(frustum.plane5.distanceToVector3(point));
print(frustum.containsVector3(point));
});
}