Compare commits
131 Commits
ma/entitym
...
v1.10.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
662a10e273 | ||
|
|
ecce02502e | ||
|
|
d17875aea1 | ||
|
|
b8897a68f9 | ||
|
|
84efd4871e | ||
|
|
85ea5a6b70 | ||
|
|
77891acb92 | ||
|
|
74fe102035 | ||
|
|
25cc554925 | ||
|
|
d787a521b5 | ||
|
|
46e52c71e1 | ||
|
|
1dad27a172 | ||
|
|
60d230b380 | ||
|
|
d7cb38e706 | ||
|
|
ce00cca6ee | ||
|
|
d627d57bad | ||
|
|
8ffc776f1c | ||
|
|
be032b52c1 | ||
|
|
4388e81e5f | ||
|
|
71a185d139 | ||
|
|
d2cf5985ac | ||
|
|
debcbb8e5c | ||
|
|
b9dd62c7d3 | ||
|
|
dc2b430f34 | ||
|
|
e5ef4e8868 | ||
|
|
c0d6cd3ac3 | ||
|
|
b63ab2dc19 | ||
|
|
5d8dad561c | ||
|
|
8933be1ae2 | ||
|
|
6b66b48b1d | ||
|
|
9c23eb6e33 | ||
|
|
baea54a3fc | ||
|
|
d9f800454c | ||
|
|
f9ee0de07a | ||
|
|
2786d0a9f7 | ||
|
|
491e8032e6 | ||
|
|
ef3f13f5d3 | ||
|
|
bcb5b2d790 | ||
|
|
02de3f2e2a | ||
|
|
0e7bb53c07 | ||
|
|
759109d478 | ||
|
|
54d5af6edf | ||
|
|
38fbe47ced | ||
|
|
f066c925ba | ||
|
|
994fdf4e1d | ||
|
|
50b50d65e3 | ||
|
|
0aaa985649 | ||
|
|
29564f8eae | ||
|
|
c15db68a5b | ||
|
|
3452fb3e56 | ||
|
|
35eb8e7be1 | ||
|
|
834b774128 | ||
|
|
5aa0eb9f9d | ||
|
|
d9a6e2e649 | ||
|
|
cb823b16a1 | ||
|
|
0bd41e877e | ||
|
|
ecc3e73967 | ||
|
|
464b4c24f9 | ||
|
|
32367516e8 | ||
|
|
1709a55606 | ||
|
|
58b4455979 | ||
|
|
ea1dede19c | ||
|
|
20ea3381fa | ||
|
|
7aa6fccd7c | ||
|
|
adbd54f4f8 | ||
|
|
9d54261f18 | ||
|
|
a97757c9ae | ||
|
|
7c79d9f89d | ||
|
|
bf0914f813 | ||
|
|
b96bc30fbd | ||
|
|
62b50eb8ba | ||
|
|
b4932e384a | ||
|
|
5e68dc5f8d | ||
|
|
f222f1b925 | ||
|
|
22e4a54782 | ||
|
|
1289922c5f | ||
|
|
2839c352b8 | ||
|
|
6a01cbc312 | ||
|
|
6193156556 | ||
|
|
fe23aa917d | ||
|
|
eb8a29a332 | ||
|
|
0626902530 | ||
|
|
042bfe2597 | ||
|
|
97133f3591 | ||
|
|
d06cc4390e | ||
|
|
6047d3235f | ||
|
|
2cda6e35bd | ||
|
|
8f8d51e17b | ||
|
|
6919e3b274 | ||
|
|
10bf944410 | ||
|
|
9a2f6fdb53 | ||
|
|
761977d385 | ||
|
|
21248f15b5 | ||
|
|
4f32817f6d | ||
|
|
cc9e05e711 | ||
|
|
419d68d4db | ||
|
|
8450232448 | ||
|
|
cc51726590 | ||
|
|
318e22af51 | ||
|
|
68ac87dc24 | ||
|
|
acb8f00075 | ||
|
|
06d9183aaa | ||
|
|
75af25419d | ||
|
|
f6b90d2a31 | ||
|
|
a3822f4af0 | ||
|
|
bcdad769ff | ||
|
|
be4fb4fdbb | ||
|
|
65394f6301 | ||
|
|
b0beee03bc | ||
|
|
fe1de41b8e | ||
|
|
a37b431e87 | ||
|
|
98107016b9 | ||
|
|
8bccfc2863 | ||
|
|
f54a0a3452 | ||
|
|
6778ab0624 | ||
|
|
269d636785 | ||
|
|
39862c91ce | ||
|
|
523f4026b4 | ||
|
|
a6bf162431 | ||
|
|
826e8d181c | ||
|
|
16dfadbba0 | ||
|
|
5cbb97551f | ||
|
|
defee767c3 | ||
|
|
9560318521 | ||
|
|
ef09feb048 | ||
|
|
39f323fe09 | ||
|
|
11b95304ea | ||
|
|
b7c30a7916 | ||
|
|
4cae48fc77 | ||
|
|
d1a93f0557 | ||
|
|
b93059fad7 |
@@ -31,7 +31,7 @@ repositories {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation 'com.google.android.filament:filament-android:1.9.25'
|
||||
implementation 'com.google.android.filament:filament-android:1.10.0'
|
||||
}
|
||||
```
|
||||
|
||||
@@ -63,7 +63,7 @@ A much smaller alternative to `filamat-android` that can only generate OpenGL sh
|
||||
iOS projects can use CocoaPods to install the latest release:
|
||||
|
||||
```
|
||||
pod 'Filament', '~> 1.9.25'
|
||||
pod 'Filament', '~> 1.10.0'
|
||||
```
|
||||
|
||||
### Snapshots
|
||||
|
||||
@@ -10,6 +10,15 @@ A new header is inserted each time a *tag* is created.
|
||||
- engine: User materials can now use 9 samplers instead of 8 [⚠️ **Material breakage**].
|
||||
- engine: Remove `populateTangentQuaternions` [⚠️ **API change**].
|
||||
- engine: Deprecate `Stream::Builder::stream(intptr_t)` [⚠️ **API Change**].
|
||||
- engine: Remove deprecated APIs: `Camera::setScaling`, `Engine::destroy(Camera*)`,
|
||||
`Engine::createCamera`, `Renderer::beginFrame(SwapChain*, uint64_t,
|
||||
backend::FrameScheduledCallback, void*)`, and `View::setShadowsEnabled` [⚠️ **API Change**].
|
||||
- engine: Remove `focusDistance` from `View::BloomOptions` [⚠️ **API Change**].
|
||||
- engine: Add a `FILAMENT_SUPPORTS_OPENGL` CMake option to enable/disable OpenGL support.
|
||||
- Vulkan: fixes and improvements for large scenes.
|
||||
- gltfio: fix morphing bugs uncovered by MorphStressTest.
|
||||
- Java: add API for `Texture::Builder::import()`.
|
||||
- WebGL: Fix a potential INVALID_OPERATION.
|
||||
|
||||
## v1.9.25
|
||||
|
||||
|
||||
@@ -18,6 +18,8 @@
|
||||
|
||||
#include <filament/Camera.h>
|
||||
|
||||
#include <utils/Entity.h>
|
||||
|
||||
#include <math/mat4.h>
|
||||
|
||||
using namespace filament;
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
#include <jni.h>
|
||||
|
||||
#include <filament/Camera.h>
|
||||
#include <filament/Engine.h>
|
||||
|
||||
#include <utils/Entity.h>
|
||||
@@ -120,15 +121,8 @@ Java_com_google_android_filament_Engine_nDestroyRenderer(JNIEnv*, jclass,
|
||||
|
||||
// Camera
|
||||
|
||||
extern "C" [[deprecated]] JNIEXPORT jlong JNICALL
|
||||
Java_com_google_android_filament_Engine_nCreateCamera(JNIEnv*, jclass,
|
||||
jlong nativeEngine) {
|
||||
Engine* engine = (Engine*) nativeEngine;
|
||||
return (jlong) engine->createCamera();
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT jlong JNICALL
|
||||
Java_com_google_android_filament_Engine_nCreateCameraWithEntity(JNIEnv*, jclass,
|
||||
Java_com_google_android_filament_Engine_nCreateCamera(JNIEnv*, jclass,
|
||||
jlong nativeEngine, jint entity_) {
|
||||
Engine* engine = (Engine*) nativeEngine;
|
||||
Entity& entity = *reinterpret_cast<Entity*>(&entity_);
|
||||
@@ -143,12 +137,12 @@ Java_com_google_android_filament_Engine_nGetCameraComponent(JNIEnv*, jclass,
|
||||
return (jlong) engine->getCameraComponent(entity);
|
||||
}
|
||||
|
||||
extern "C" [[deprecated]] JNIEXPORT void JNICALL
|
||||
Java_com_google_android_filament_Engine_nDestroyCamera(JNIEnv*, jclass,
|
||||
jlong nativeEngine, jlong nativeCamera) {
|
||||
extern "C" JNIEXPORT void JNICALL
|
||||
Java_com_google_android_filament_Engine_nDestroyCameraComponent(JNIEnv*, jclass,
|
||||
jlong nativeEngine, jint entity_) {
|
||||
Engine* engine = (Engine*) nativeEngine;
|
||||
Camera *camera = (Camera *) nativeCamera;
|
||||
engine->destroy(camera);
|
||||
Entity& entity = *reinterpret_cast<Entity*>(&entity_);
|
||||
engine->destroyCameraComponent(entity);
|
||||
}
|
||||
|
||||
// Scene
|
||||
|
||||
@@ -321,7 +321,7 @@ Java_com_google_android_filament_View_nSetDepthOfFieldOptions(JNIEnv *, jclass ,
|
||||
// View::DepthOfFieldOptions::Filter::MEDIAN value is actually 2
|
||||
eFilter = View::DepthOfFieldOptions::Filter::MEDIAN;
|
||||
}
|
||||
view->setDepthOfFieldOptions({.focusDistance = focusDistance, .cocScale = cocScale,
|
||||
view->setDepthOfFieldOptions({.cocScale = cocScale,
|
||||
.maxApertureDiameter = maxApertureDiameter, .enabled = (bool)enabled, .filter = eFilter,
|
||||
.nativeResolution = (bool)nativeResolution,
|
||||
.foregroundRingCount = (uint8_t)foregroundRingCount,
|
||||
|
||||
@@ -29,7 +29,7 @@ import androidx.annotation.Size;
|
||||
*
|
||||
* In Filament, Camera is a component that must be associated with an entity. To do so,
|
||||
* use {@link Engine#createCamera(int)}. A Camera component is destroyed using
|
||||
* {@link Engine#destroyCamera(Camera)}.
|
||||
* {@link Engine#destroyCameraComponent(int Entity)} ()}.
|
||||
*
|
||||
* <pre>
|
||||
* Camera myCamera = engine.createCamera(myCameraEntity);
|
||||
@@ -37,7 +37,7 @@ import androidx.annotation.Size;
|
||||
* myCamera.lookAt(0, 1.60, 1,
|
||||
* 0, 0, 0,
|
||||
* 0, 1, 0);
|
||||
* engine.destroyCamera(myCamera);
|
||||
* engine.destroyCameraComponent(myCameraEntity);
|
||||
* </pre>
|
||||
*
|
||||
*
|
||||
@@ -121,6 +121,9 @@ import androidx.annotation.Size;
|
||||
public class Camera {
|
||||
private long mNativeObject;
|
||||
|
||||
@Entity
|
||||
private final int mEntity;
|
||||
|
||||
/**
|
||||
* Denotes the projection type used by this camera.
|
||||
* @see #setProjection
|
||||
@@ -143,8 +146,9 @@ public class Camera {
|
||||
HORIZONTAL
|
||||
}
|
||||
|
||||
Camera(long nativeCamera) {
|
||||
Camera(long nativeCamera, @Entity int entity) {
|
||||
mNativeObject = nativeCamera;
|
||||
mEntity = entity;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -681,6 +685,15 @@ public class Camera {
|
||||
return nGetSensitivity(getNativeObject());
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the entity representing this Camera
|
||||
* @return the entity this Camera component is attached to
|
||||
*/
|
||||
@Entity
|
||||
public int getEntity() {
|
||||
return mEntity;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper to compute the effective focal length taking into account the focus distance
|
||||
*
|
||||
|
||||
@@ -399,19 +399,6 @@ public class Engine {
|
||||
|
||||
// Camera
|
||||
|
||||
/**
|
||||
* Creates a new <code>entity</code> and adds a {@link Camera} component to it.
|
||||
*
|
||||
* @return A newly created {@link Camera}
|
||||
* @exception IllegalStateException can be thrown if the {@link Camera} couldn't be created
|
||||
*/
|
||||
@NonNull
|
||||
public Camera createCamera() {
|
||||
long nativeCamera = nCreateCamera(getNativeObject());
|
||||
if (nativeCamera == 0) throw new IllegalStateException("Couldn't create Camera");
|
||||
return new Camera(nativeCamera);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates and adds a {@link Camera} component to a given <code>entity</code>.
|
||||
*
|
||||
@@ -421,9 +408,9 @@ public class Engine {
|
||||
*/
|
||||
@NonNull
|
||||
public Camera createCamera(@Entity int entity) {
|
||||
long nativeCamera = nCreateCameraWithEntity(getNativeObject(), entity);
|
||||
long nativeCamera = nCreateCamera(getNativeObject(), entity);
|
||||
if (nativeCamera == 0) throw new IllegalStateException("Couldn't create Camera");
|
||||
return new Camera(nativeCamera);
|
||||
return new Camera(nativeCamera, entity);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -437,16 +424,16 @@ public class Engine {
|
||||
public Camera getCameraComponent(@Entity int entity) {
|
||||
long nativeCamera = nGetCameraComponent(getNativeObject(), entity);
|
||||
if (nativeCamera == 0) return null;
|
||||
return new Camera(nativeCamera);
|
||||
return new Camera(nativeCamera, entity);
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroys a {@link Camera} component and frees all its associated resources.
|
||||
* @param camera the {@link Camera} to destroy
|
||||
* Destroys the {@link Camera} component associated with the given entity.
|
||||
*
|
||||
* @param entity an entity
|
||||
*/
|
||||
public void destroyCamera(@NonNull Camera camera) {
|
||||
nDestroyCamera(getNativeObject(), camera.getNativeObject());
|
||||
camera.clearNativeObject();
|
||||
public void destroyCameraComponent(@Entity int entity) {
|
||||
nDestroyCameraComponent(getNativeObject(), entity);
|
||||
}
|
||||
|
||||
// Scene
|
||||
@@ -634,6 +621,14 @@ public class Engine {
|
||||
return mRenderableManager;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the {@link EntityManager} used by this {@link Engine}
|
||||
*/
|
||||
@NonNull
|
||||
public EntityManager getEntityManager() {
|
||||
return mEntityManager;
|
||||
}
|
||||
|
||||
/**
|
||||
* Kicks the hardware thread (e.g.: the OpenGL, Vulkan or Metal thread) and blocks until
|
||||
* all commands to this point are executed. Note that this doesn't guarantee that the
|
||||
@@ -685,10 +680,9 @@ public class Engine {
|
||||
private static native boolean nDestroyView(long nativeEngine, long nativeView);
|
||||
private static native long nCreateRenderer(long nativeEngine);
|
||||
private static native boolean nDestroyRenderer(long nativeEngine, long nativeRenderer);
|
||||
private static native long nCreateCamera(long nativeEngine);
|
||||
private static native long nCreateCameraWithEntity(long nativeEngine, int entity);
|
||||
private static native long nCreateCamera(long nativeEngine, int entity);
|
||||
private static native long nGetCameraComponent(long nativeEngine, int entity);
|
||||
private static native void nDestroyCamera(long nativeEngine, long nativeCamera);
|
||||
private static native void nDestroyCameraComponent(long nativeEngine, int entity);
|
||||
private static native long nCreateScene(long nativeEngine);
|
||||
private static native boolean nDestroyScene(long nativeEngine, long nativeScene);
|
||||
private static native long nCreateFence(long nativeEngine);
|
||||
|
||||
@@ -482,14 +482,6 @@ public class View {
|
||||
MEDIAN
|
||||
}
|
||||
|
||||
/**
|
||||
* focus distance in world units
|
||||
*
|
||||
* @deprecated use {@link Camera#setFocusDistance(float)}
|
||||
*/
|
||||
@Deprecated
|
||||
public float focusDistance = 10.0f;
|
||||
|
||||
/**
|
||||
* circle of confusion scale factor (amount of blur)
|
||||
*
|
||||
@@ -939,16 +931,6 @@ public class View {
|
||||
nSetShadowingEnabled(getNativeObject(), enabled);
|
||||
}
|
||||
|
||||
/**
|
||||
* Enables or disables shadow mapping. Enabled by default.
|
||||
*
|
||||
* @deprecated Use {@link #setShadowingEnabled}
|
||||
*/
|
||||
@Deprecated
|
||||
public void setShadowsEnabled(boolean enabled) {
|
||||
setShadowingEnabled(enabled);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return whether shadowing is enabled
|
||||
*/
|
||||
@@ -1491,7 +1473,7 @@ public class View {
|
||||
*/
|
||||
public void setDepthOfFieldOptions(@NonNull DepthOfFieldOptions options) {
|
||||
mDepthOfFieldOptions = options;
|
||||
nSetDepthOfFieldOptions(getNativeObject(), options.focusDistance, options.cocScale,
|
||||
nSetDepthOfFieldOptions(getNativeObject(), options.cocScale,
|
||||
options.maxApertureDiameter, options.enabled, options.filter.ordinal(),
|
||||
options.nativeResolution, options.foregroundRingCount, options.backgroundRingCount,
|
||||
options.fastGatherRingCount, options.maxForegroundCOC, options.maxBackgroundCOC);
|
||||
@@ -1554,7 +1536,7 @@ public class View {
|
||||
boolean lensFlare, boolean starburst, float chromaticAberration, int ghostCount, float ghostSpacing, float ghostThreshold, float haloThickness, float haloRadius, float haloThreshold);
|
||||
private static native void nSetFogOptions(long nativeView, float distance, float maximumOpacity, float height, float heightFalloff, float v, float v1, float v2, float density, float inScatteringStart, float inScatteringSize, boolean fogColorFromIbl, boolean enabled);
|
||||
private static native void nSetBlendMode(long nativeView, int blendMode);
|
||||
private static native void nSetDepthOfFieldOptions(long nativeView, float focusDistance, float cocScale, float maxApertureDiameter, boolean enabled, int filter,
|
||||
private static native void nSetDepthOfFieldOptions(long nativeView, float cocScale, float maxApertureDiameter, boolean enabled, int filter,
|
||||
boolean nativeResolution, int foregroundRingCount, int backgroundRingCount, int fastGatherRingCount, int maxForegroundCOC, int maxBackgroundCOC);
|
||||
private static native void nSetVignetteOptions(long nativeView, float midPoint, float roundness, float feather, float r, float g, float b, float a, boolean enabled);
|
||||
private static native void nSetTemporalAntiAliasingOptions(long nativeView, float feedback, float filterWidth, boolean enabled);
|
||||
|
||||
@@ -105,7 +105,7 @@ class ModelViewer(val engine: Engine) : android.view.View.OnTouchListener {
|
||||
init {
|
||||
renderer = engine.createRenderer()
|
||||
scene = engine.createScene()
|
||||
camera = engine.createCamera().apply { setExposure(kAperture, kShutterSpeed, kSensitivity) }
|
||||
camera = engine.createCamera(engine.entityManager.create()).apply { setExposure(kAperture, kShutterSpeed, kSensitivity) }
|
||||
view = engine.createView()
|
||||
view.scene = scene
|
||||
view.camera = camera
|
||||
@@ -299,7 +299,8 @@ class ModelViewer(val engine: Engine) : android.view.View.OnTouchListener {
|
||||
engine.destroyRenderer(renderer)
|
||||
engine.destroyView(this@ModelViewer.view)
|
||||
engine.destroyScene(scene)
|
||||
engine.destroyCamera(camera)
|
||||
engine.destroyCameraComponent(camera.entity)
|
||||
EntityManager.get().destroy(camera.entity)
|
||||
|
||||
EntityManager.get().destroy(light)
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
GROUP=com.google.android.filament
|
||||
VERSION_NAME=1.9.25
|
||||
VERSION_NAME=1.10.0
|
||||
|
||||
POM_DESCRIPTION=Real-time physically based rendering engine for Android.
|
||||
|
||||
|
||||
@@ -109,7 +109,8 @@ class MainActivity : Activity(), ActivityCompat.OnRequestPermissionsResultCallba
|
||||
renderer = engine.createRenderer()
|
||||
scene = engine.createScene()
|
||||
view = engine.createView()
|
||||
camera = engine.createCamera()
|
||||
camera = engine.createCamera(engine.entityManager.create())
|
||||
|
||||
}
|
||||
|
||||
private fun setupView() {
|
||||
@@ -342,13 +343,14 @@ class MainActivity : Activity(), ActivityCompat.OnRequestPermissionsResultCallba
|
||||
engine.destroyMaterial(material)
|
||||
engine.destroyView(view)
|
||||
engine.destroyScene(scene)
|
||||
engine.destroyCamera(camera)
|
||||
engine.destroyCameraComponent(camera.entity)
|
||||
|
||||
// Engine.destroyEntity() destroys Filament related resources only
|
||||
// (components), not the entity itself
|
||||
val entityManager = EntityManager.get()
|
||||
entityManager.destroy(light)
|
||||
entityManager.destroy(renderable)
|
||||
entityManager.destroy(camera.entity)
|
||||
|
||||
// Destroying the engine will free up any resource you may have forgotten
|
||||
// to destroy, but it's recommended to do the cleanup properly
|
||||
|
||||
@@ -113,7 +113,7 @@ class MainActivity : Activity() {
|
||||
renderer = engine.createRenderer()
|
||||
scene = engine.createScene()
|
||||
view = engine.createView()
|
||||
camera = engine.createCamera()
|
||||
camera = engine.createCamera(engine.entityManager.create())
|
||||
}
|
||||
|
||||
private fun setupView() {
|
||||
@@ -271,12 +271,13 @@ class MainActivity : Activity() {
|
||||
engine.destroyMaterial(material)
|
||||
engine.destroyView(view)
|
||||
engine.destroyScene(scene)
|
||||
engine.destroyCamera(camera)
|
||||
engine.destroyCameraComponent(camera.entity)
|
||||
|
||||
// Engine.destroyEntity() destroys Filament related resources only
|
||||
// (components), not the entity itself
|
||||
val entityManager = EntityManager.get()
|
||||
entityManager.destroy(renderable)
|
||||
entityManager.destroy(camera.entity)
|
||||
|
||||
// Destroying the engine will free up any resource you may have forgotten
|
||||
// to destroy, but it's recommended to do the cleanup properly
|
||||
|
||||
@@ -113,7 +113,7 @@ class MainActivity : Activity() {
|
||||
renderer = engine.createRenderer()
|
||||
scene = engine.createScene()
|
||||
view = engine.createView()
|
||||
camera = engine.createCamera()
|
||||
camera = engine.createCamera(engine.entityManager.create())
|
||||
}
|
||||
|
||||
private fun setupView() {
|
||||
@@ -249,12 +249,13 @@ class MainActivity : Activity() {
|
||||
engine.destroyMaterial(material)
|
||||
engine.destroyView(view)
|
||||
engine.destroyScene(scene)
|
||||
engine.destroyCamera(camera)
|
||||
engine.destroyCameraComponent(camera.entity)
|
||||
|
||||
// Engine.destroyEntity() destroys Filament related resources only
|
||||
// (components), not the entity itself
|
||||
val entityManager = EntityManager.get()
|
||||
entityManager.destroy(light)
|
||||
entityManager.destroy(camera.entity)
|
||||
|
||||
// Destroying the engine will free up any resource you may have forgotten
|
||||
// to destroy, but it's recommended to do the cleanup properly
|
||||
|
||||
@@ -114,7 +114,7 @@ class MainActivity : Activity() {
|
||||
renderer = engine.createRenderer()
|
||||
scene = engine.createScene()
|
||||
view = engine.createView()
|
||||
camera = engine.createCamera()
|
||||
camera = engine.createCamera(engine.entityManager.create())
|
||||
}
|
||||
|
||||
private fun setupView() {
|
||||
@@ -358,13 +358,14 @@ class MainActivity : Activity() {
|
||||
engine.destroyMaterial(material)
|
||||
engine.destroyView(view)
|
||||
engine.destroyScene(scene)
|
||||
engine.destroyCamera(camera)
|
||||
engine.destroyCameraComponent(camera.entity)
|
||||
|
||||
// Engine.destroyEntity() destroys Filament related resources only
|
||||
// (components), not the entity itself
|
||||
val entityManager = EntityManager.get()
|
||||
entityManager.destroy(light)
|
||||
entityManager.destroy(renderable)
|
||||
entityManager.destroy(camera.entity)
|
||||
|
||||
// Destroying the engine will free up any resource you may have forgotten
|
||||
// to destroy, but it's recommended to do the cleanup properly
|
||||
|
||||
@@ -101,7 +101,7 @@ class FilamentLiveWallpaper : WallpaperService() {
|
||||
renderer = engine.createRenderer()
|
||||
scene = engine.createScene()
|
||||
view = engine.createView()
|
||||
camera = engine.createCamera()
|
||||
camera = engine.createCamera(engine.entityManager.create())
|
||||
}
|
||||
|
||||
private fun setupView() {
|
||||
@@ -167,7 +167,8 @@ class FilamentLiveWallpaper : WallpaperService() {
|
||||
engine.destroyRenderer(renderer)
|
||||
engine.destroyView(view)
|
||||
engine.destroyScene(scene)
|
||||
engine.destroyCamera(camera)
|
||||
engine.destroyCameraComponent(camera.entity)
|
||||
EntityManager.get().destroy(camera.entity)
|
||||
|
||||
// Destroying the engine will free up any resource you may have forgotten
|
||||
// to destroy, but it's recommended to do the cleanup properly
|
||||
@@ -221,4 +222,4 @@ class FilamentLiveWallpaper : WallpaperService() {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -112,7 +112,7 @@ class MainActivity : Activity() {
|
||||
renderer = engine.createRenderer()
|
||||
scene = engine.createScene()
|
||||
view = engine.createView()
|
||||
camera = engine.createCamera()
|
||||
camera = engine.createCamera(engine.entityManager.create())
|
||||
}
|
||||
|
||||
private fun setupView() {
|
||||
@@ -289,12 +289,13 @@ class MainActivity : Activity() {
|
||||
engine.destroyMaterial(material)
|
||||
engine.destroyView(view)
|
||||
engine.destroyScene(scene)
|
||||
engine.destroyCamera(camera)
|
||||
engine.destroyCameraComponent(camera.entity)
|
||||
|
||||
// Engine.destroyEntity() destroys Filament related resources only
|
||||
// (components), not the entity itself
|
||||
val entityManager = EntityManager.get()
|
||||
entityManager.destroy(light)
|
||||
entityManager.destroy(camera.entity)
|
||||
|
||||
// Destroying the engine will free up any resource you may have forgotten
|
||||
// to destroy, but it's recommended to do the cleanup properly
|
||||
|
||||
@@ -128,7 +128,7 @@ class MainActivity : Activity() {
|
||||
skybox = Skybox.Builder().build(engine);
|
||||
scene.skybox = skybox
|
||||
|
||||
camera = engine.createCamera()
|
||||
camera = engine.createCamera(engine.entityManager.create())
|
||||
}
|
||||
|
||||
private fun setupViews() {
|
||||
@@ -375,13 +375,14 @@ class MainActivity : Activity() {
|
||||
engine.destroyView(view3)
|
||||
engine.destroySkybox(skybox)
|
||||
engine.destroyScene(scene)
|
||||
engine.destroyCamera(camera)
|
||||
engine.destroyCameraComponent(camera.entity)
|
||||
|
||||
// Engine.destroyEntity() destroys Filament related resources only
|
||||
// (components), not the entity itself
|
||||
val entityManager = EntityManager.get()
|
||||
entityManager.destroy(light)
|
||||
entityManager.destroy(renderable)
|
||||
entityManager.destroy(camera.entity)
|
||||
|
||||
// Destroying the engine will free up any resource you may have forgotten
|
||||
// to destroy, but it's recommended to do the cleanup properly
|
||||
|
||||
@@ -148,7 +148,7 @@ public class MainActivity extends Activity
|
||||
mRenderer = mEngine.createRenderer();
|
||||
mScene = mEngine.createScene();
|
||||
mView = mEngine.createView();
|
||||
mCamera = mEngine.createCamera();
|
||||
mCamera = mEngine.createCamera(mEngine.getEntityManager().create());
|
||||
|
||||
mCamera.lookAt(0, 0, 3, 0, 0, 0, 0, 1, 0);
|
||||
|
||||
@@ -223,9 +223,10 @@ public class MainActivity extends Activity
|
||||
|
||||
mEngine.destroyView(mView);
|
||||
mEngine.destroyScene(mScene);
|
||||
mEngine.destroyCamera(mCamera);
|
||||
mEngine.destroyCameraComponent(mCamera.getEntity());
|
||||
|
||||
EntityManager.get().destroy(mPage.renderable);
|
||||
EntityManager.get().destroy(mCamera.getEntity());
|
||||
|
||||
mEngine.destroy();
|
||||
}
|
||||
@@ -298,4 +299,4 @@ public class MainActivity extends Activity
|
||||
canvas.drawBitmap(bmp, borderSize, borderSize, null);
|
||||
return modified;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -121,7 +121,7 @@ class MainActivity : Activity(), ActivityCompat.OnRequestPermissionsResultCallba
|
||||
renderer = engine.createRenderer()
|
||||
scene = engine.createScene()
|
||||
view = engine.createView()
|
||||
camera = engine.createCamera()
|
||||
camera = engine.createCamera(engine.entityManager.create())
|
||||
}
|
||||
|
||||
private fun setupView() {
|
||||
@@ -328,13 +328,14 @@ class MainActivity : Activity(), ActivityCompat.OnRequestPermissionsResultCallba
|
||||
engine.destroyMaterial(material)
|
||||
engine.destroyView(view)
|
||||
engine.destroyScene(scene)
|
||||
engine.destroyCamera(camera)
|
||||
engine.destroyCameraComponent(camera.entity)
|
||||
|
||||
// Engine.destroyEntity() destroys Filament related resources only
|
||||
// (components), not the entity itself
|
||||
val entityManager = EntityManager.get()
|
||||
entityManager.destroy(light)
|
||||
entityManager.destroy(renderable)
|
||||
entityManager.destroy(camera.entity)
|
||||
|
||||
// Destroying the engine will free up any resource you may have forgotten
|
||||
// to destroy, but it's recommended to do the cleanup properly
|
||||
|
||||
@@ -113,7 +113,7 @@ class MainActivity : Activity() {
|
||||
renderer = engine.createRenderer()
|
||||
scene = engine.createScene()
|
||||
view = engine.createView()
|
||||
camera = engine.createCamera()
|
||||
camera = engine.createCamera(engine.entityManager.create())
|
||||
}
|
||||
|
||||
private fun setupView() {
|
||||
@@ -271,12 +271,13 @@ class MainActivity : Activity() {
|
||||
engine.destroyMaterial(material)
|
||||
engine.destroyView(view)
|
||||
engine.destroyScene(scene)
|
||||
engine.destroyCamera(camera)
|
||||
engine.destroyCameraComponent(camera.entity)
|
||||
|
||||
// Engine.destroyEntity() destroys Filament related resources only
|
||||
// (components), not the entity itself
|
||||
val entityManager = EntityManager.get()
|
||||
entityManager.destroy(renderable)
|
||||
entityManager.destroy(camera.entity)
|
||||
|
||||
// Destroying the engine will free up any resource you may have forgotten
|
||||
// to destroy, but it's recommended to do the cleanup properly
|
||||
|
||||
@@ -117,7 +117,7 @@ class MainActivity : Activity() {
|
||||
renderer = engine.createRenderer()
|
||||
scene = engine.createScene()
|
||||
view = engine.createView()
|
||||
camera = engine.createCamera()
|
||||
camera = engine.createCamera(engine.entityManager.create())
|
||||
}
|
||||
|
||||
private fun setupView() {
|
||||
@@ -269,12 +269,13 @@ class MainActivity : Activity() {
|
||||
engine.destroyMaterial(material)
|
||||
engine.destroyView(view)
|
||||
engine.destroyScene(scene)
|
||||
engine.destroyCamera(camera)
|
||||
engine.destroyCameraComponent(camera.entity)
|
||||
|
||||
// Engine.destroyEntity() destroys Filament related resources only
|
||||
// (components), not the entity itself
|
||||
val entityManager = EntityManager.get()
|
||||
entityManager.destroy(light)
|
||||
entityManager.destroy(camera.entity)
|
||||
|
||||
// Destroying the engine will free up any resource you may have forgotten
|
||||
// to destroy, but it's recommended to do the cleanup properly
|
||||
|
||||
@@ -136,7 +136,7 @@ class MainActivity : Activity() {
|
||||
renderer = engine.createRenderer()
|
||||
scene = engine.createScene()
|
||||
view = engine.createView()
|
||||
camera = engine.createCamera()
|
||||
camera = engine.createCamera(engine.entityManager.create())
|
||||
|
||||
// clear the swapchain with transparent pixels
|
||||
val options = renderer.clearOptions
|
||||
@@ -294,12 +294,13 @@ class MainActivity : Activity() {
|
||||
engine.destroyMaterial(material)
|
||||
engine.destroyView(view)
|
||||
engine.destroyScene(scene)
|
||||
engine.destroyCamera(camera)
|
||||
engine.destroyCameraComponent(camera.entity)
|
||||
|
||||
// Engine.destroyEntity() destroys Filament related resources only
|
||||
// (components), not the entity itself
|
||||
val entityManager = EntityManager.get()
|
||||
entityManager.destroy(renderable)
|
||||
entityManager.destroy(camera.entity)
|
||||
|
||||
// Destroying the engine will free up any resource you may have forgotten
|
||||
// to destroy, but it's recommended to do the cleanup properly
|
||||
|
||||
@@ -252,9 +252,6 @@ public:
|
||||
*/
|
||||
void setScaling(math::double2 scaling) noexcept;
|
||||
|
||||
[[deprecated]]
|
||||
void setScaling(math::double4 const& scaling) noexcept;
|
||||
|
||||
/**
|
||||
* Sets an additional matrix that shifts the projection matrix.
|
||||
* By default, this is an identity matrix.
|
||||
|
||||
@@ -388,7 +388,7 @@ public:
|
||||
* @param entity An entity.
|
||||
* @return A pointer to the Camera component for this entity or nullptr if the entity didn't
|
||||
* have a Camera component. The pointer is valid until destroyCameraComponent()
|
||||
* (or destroyCamera()) is called or the entity itself is destroyed.
|
||||
* is called or the entity itself is destroyed.
|
||||
*/
|
||||
Camera* getCameraComponent(utils::Entity entity) noexcept;
|
||||
|
||||
@@ -472,26 +472,6 @@ public:
|
||||
*/
|
||||
void* streamAlloc(size_t size, size_t alignment = alignof(double)) noexcept;
|
||||
|
||||
|
||||
/**
|
||||
* helper for creating an Entity and Camera component in one call
|
||||
*
|
||||
* @deprecated use createCamera(Entity) instead
|
||||
*
|
||||
* @return A camera component
|
||||
*/
|
||||
UTILS_DEPRECATED
|
||||
Camera* createCamera() noexcept;
|
||||
|
||||
/**
|
||||
* helper for destroying the Camera component and its Entity in one call
|
||||
*
|
||||
* @param camera Camera component to destroy. The associated entity is also destroyed.
|
||||
* @deprecated use destroyCameraComponent(Entity) instead
|
||||
*/
|
||||
UTILS_DEPRECATED
|
||||
void destroy(const Camera* camera);
|
||||
|
||||
/**
|
||||
* Invokes one iteration of the render loop, used only on single-threaded platforms.
|
||||
*
|
||||
|
||||
@@ -243,15 +243,6 @@ public:
|
||||
bool beginFrame(SwapChain* swapChain,
|
||||
uint64_t vsyncSteadyClockTimeNano = 0u);
|
||||
|
||||
/**
|
||||
* @deprecated, use SwapChain::setFrameScheduledCallback to set the callback instead.
|
||||
* @see beginFrame(SwapChain*, uint64_t)
|
||||
*/
|
||||
UTILS_DEPRECATED
|
||||
bool beginFrame(SwapChain* swapChain,
|
||||
uint64_t vsyncSteadyClockTimeNano,
|
||||
backend::FrameScheduledCallback callback, void* user = nullptr);
|
||||
|
||||
/**
|
||||
* Render a View into this renderer's window.
|
||||
*
|
||||
|
||||
@@ -201,7 +201,6 @@ public:
|
||||
NONE = 0,
|
||||
MEDIAN = 2
|
||||
};
|
||||
float focusDistance = 10.0f; //!< @deprecated use Camera::setFocusDistance() instead
|
||||
float cocScale = 1.0f; //!< circle of confusion scale factor (amount of blur)
|
||||
float maxApertureDiameter = 0.01f; //!< maximum aperture diameter in meters (zero to disable rotation)
|
||||
bool enabled = false; //!< enable or disable depth of field effect
|
||||
@@ -525,15 +524,6 @@ public:
|
||||
*/
|
||||
void setShadowingEnabled(bool enabled) noexcept;
|
||||
|
||||
/**
|
||||
* Enables or disables shadow mapping. Enabled by default.
|
||||
* @deprecated use setShadowingEnabled
|
||||
*/
|
||||
UTILS_DEPRECATED
|
||||
void setShadowsEnabled(bool enabled) noexcept {
|
||||
setShadowingEnabled(enabled);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return whether shadowing is enabled
|
||||
*/
|
||||
|
||||
@@ -296,10 +296,7 @@ CameraInfo::CameraInfo(FCamera const& camera) noexcept {
|
||||
d = std::max(zn, camera.getFocusDistance());
|
||||
}
|
||||
|
||||
CameraInfo::CameraInfo(FCamera const& camera, const math::mat4f& worldOriginCamera,
|
||||
float focusDistance) noexcept {
|
||||
// note: DepthOfFieldOptions is deprecated, but we continue to support it by passing it here
|
||||
// and we're using it if the camera focus distance hasn't been set.
|
||||
CameraInfo::CameraInfo(FCamera const& camera, const math::mat4f& worldOriginCamera) noexcept {
|
||||
const mat4f modelMatrix{ worldOriginCamera * camera.getModelMatrix() };
|
||||
projection = mat4f{ camera.getProjectionMatrix() };
|
||||
cullingProjection = mat4f{ camera.getCullingProjectionMatrix() };
|
||||
@@ -310,7 +307,7 @@ CameraInfo::CameraInfo(FCamera const& camera, const math::mat4f& worldOriginCame
|
||||
ev100 = Exposure::ev100(camera);
|
||||
f = camera.getFocalLength();
|
||||
A = f / camera.getAperture();
|
||||
d = std::max(zn, camera.getFocusDistance() > 0.0f ? camera.getFocusDistance() : focusDistance);
|
||||
d = std::max(zn, camera.getFocusDistance());
|
||||
worldOffset = camera.getPosition();
|
||||
worldOrigin = worldOriginCamera;
|
||||
}
|
||||
@@ -354,10 +351,6 @@ void Camera::setScaling(math::double2 scaling) noexcept {
|
||||
upcast(this)->setScaling(scaling);
|
||||
}
|
||||
|
||||
void Camera::setScaling(math::double4 const& scaling) noexcept {
|
||||
upcast(this)->setScaling(scaling);
|
||||
}
|
||||
|
||||
void Camera::setShift(math::double2 shift) noexcept {
|
||||
upcast(this)->setShift(shift);
|
||||
}
|
||||
|
||||
@@ -1043,14 +1043,4 @@ DebugRegistry& Engine::getDebugRegistry() noexcept {
|
||||
return upcast(this)->getDebugRegistry();
|
||||
}
|
||||
|
||||
Camera* Engine::createCamera() noexcept {
|
||||
return createCamera(upcast(this)->getEntityManager().create());
|
||||
}
|
||||
|
||||
void Engine::destroy(const Camera* camera) {
|
||||
Entity e = camera->getEntity();
|
||||
destroyCameraComponent(e);
|
||||
upcast(this)->getEntityManager().destroy(e);
|
||||
}
|
||||
|
||||
} // namespace filament
|
||||
|
||||
@@ -898,8 +898,7 @@ void FRenderer::copyFrame(FSwapChain* dstSwapChain, filament::Viewport const& ds
|
||||
mSwapChain->makeCurrent(driver);
|
||||
}
|
||||
|
||||
bool FRenderer::beginFrame(FSwapChain* swapChain, uint64_t vsyncSteadyClockTimeNano,
|
||||
FrameScheduledCallback callback, void* user) {
|
||||
bool FRenderer::beginFrame(FSwapChain* swapChain, uint64_t vsyncSteadyClockTimeNano) {
|
||||
assert_invariant(swapChain);
|
||||
|
||||
SYSTRACE_CALL();
|
||||
@@ -955,10 +954,6 @@ bool FRenderer::beginFrame(FSwapChain* swapChain, uint64_t vsyncSteadyClockTimeN
|
||||
FEngine& engine = getEngine();
|
||||
FEngine::DriverApi& driver = engine.getDriverApi();
|
||||
|
||||
if (UTILS_UNLIKELY(callback)) {
|
||||
// this is here just to handle the deprecated version of beginFrame()
|
||||
driver.setFrameScheduledCallback(swapChain->getHwHandle(), callback, user);
|
||||
}
|
||||
driver.beginFrame(appVsync.time_since_epoch().count(), mFrameId);
|
||||
|
||||
// This need to occur after the backend beginFrame() because some backends need to start
|
||||
@@ -1159,14 +1154,7 @@ void Renderer::render(View const* view) {
|
||||
}
|
||||
|
||||
bool Renderer::beginFrame(SwapChain* swapChain, uint64_t vsyncSteadyClockTimeNano) {
|
||||
return upcast(this)->beginFrame(upcast(swapChain), vsyncSteadyClockTimeNano,
|
||||
nullptr, nullptr);
|
||||
}
|
||||
|
||||
bool Renderer::beginFrame(SwapChain* swapChain, uint64_t vsyncSteadyClockTimeNano,
|
||||
backend::FrameScheduledCallback callback, void* user) {
|
||||
return upcast(this)->beginFrame(upcast(swapChain), vsyncSteadyClockTimeNano,
|
||||
callback, user);
|
||||
return upcast(this)->beginFrame(upcast(swapChain), vsyncSteadyClockTimeNano);
|
||||
}
|
||||
|
||||
void Renderer::copyFrame(SwapChain* dstSwapChain, filament::Viewport const& dstViewport,
|
||||
|
||||
@@ -404,7 +404,7 @@ void FView::prepare(FEngine& engine, backend::DriverApi& driver, ArenaScope& are
|
||||
// Note: for debugging (i.e. visualize what the camera / objects are doing, using
|
||||
// the viewing camera), we can set worldOriginScene to identity when mViewingCamera
|
||||
// is set
|
||||
mViewingCameraInfo = CameraInfo(*camera, worldOriginScene, mDepthOfFieldOptions.focusDistance);
|
||||
mViewingCameraInfo = CameraInfo(*camera, worldOriginScene);
|
||||
|
||||
mCullingFrustum = FCamera::getFrustum(
|
||||
mCullingCamera->getCullingProjectionMatrix(),
|
||||
|
||||
@@ -63,8 +63,6 @@ public:
|
||||
void setCustomProjection(math::mat4 const& projection,
|
||||
math::mat4 const& projectionForCulling, double near, double far) noexcept;
|
||||
|
||||
void setScaling(math::double4 const& scaling) noexcept { mScaling = scaling.xy; }
|
||||
|
||||
void setScaling(math::double2 scaling) noexcept { mScaling = scaling; }
|
||||
|
||||
math::double4 getScaling() const noexcept { return math::double4{ mScaling, 1.0, 1.0 }; }
|
||||
@@ -200,8 +198,7 @@ private:
|
||||
struct CameraInfo {
|
||||
CameraInfo() noexcept = default;
|
||||
explicit CameraInfo(FCamera const& camera) noexcept;
|
||||
CameraInfo(FCamera const& camera,
|
||||
const math::mat4f& worldOriginCamera, float focusDistance) noexcept;
|
||||
CameraInfo(FCamera const& camera, const math::mat4f& worldOriginCamera) noexcept;
|
||||
|
||||
math::mat4f projection; // projection matrix for drawing (infinite zfar)
|
||||
math::mat4f cullingProjection; // projection matrix for culling
|
||||
|
||||
@@ -76,8 +76,7 @@ public:
|
||||
// do all the work here!
|
||||
void renderJob(ArenaScope& arena, FView& view);
|
||||
|
||||
bool beginFrame(FSwapChain* swapChain, uint64_t vsyncSteadyClockTimeNano,
|
||||
backend::FrameScheduledCallback callback, void* user);
|
||||
bool beginFrame(FSwapChain* swapChain, uint64_t vsyncSteadyClockTimeNano);
|
||||
|
||||
void render(FView const* view);
|
||||
|
||||
|
||||
@@ -357,7 +357,6 @@ public:
|
||||
}
|
||||
|
||||
void setDepthOfFieldOptions(DepthOfFieldOptions options) noexcept {
|
||||
options.focusDistance = std::max(0.0f, options.focusDistance);
|
||||
options.cocScale = std::max(0.0f, options.cocScale);
|
||||
options.maxApertureDiameter = std::max(0.0f, options.maxApertureDiameter);
|
||||
mDepthOfFieldOptions = options;
|
||||
|
||||
@@ -160,3 +160,5 @@ void postProcess(inout PostProcessInputs postProcess) {
|
||||
}
|
||||
postProcess.color = vec4(color, 1.0);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,12 +1,12 @@
|
||||
Pod::Spec.new do |spec|
|
||||
spec.name = "Filament"
|
||||
spec.version = "1.9.25"
|
||||
spec.version = "1.10.0"
|
||||
spec.license = { :type => "Apache 2.0", :file => "LICENSE" }
|
||||
spec.homepage = "https://google.github.io/filament"
|
||||
spec.authors = "Google LLC."
|
||||
spec.summary = "Filament is a real-time physically based rendering engine for Android, iOS, Windows, Linux, macOS, and WASM/WebGL."
|
||||
spec.platform = :ios, "11.0"
|
||||
spec.source = { :http => "https://github.com/google/filament/releases/download/v1.9.25/filament-v1.9.25-ios.tgz" }
|
||||
spec.source = { :http => "https://github.com/google/filament/releases/download/v1.10.0/filament-v1.10.0-ios.tgz" }
|
||||
|
||||
# Fix linking error with Xcode 12; we do not yet support the simulator on Apple silicon.
|
||||
spec.pod_target_xcconfig = {
|
||||
|
||||
@@ -183,7 +183,9 @@ FilamentApp::~FilamentApp() {
|
||||
engine->destroy(renderer);
|
||||
engine->destroy(scene);
|
||||
engine->destroy(view);
|
||||
engine->destroy(camera);
|
||||
Entity c = camera->getEntity();
|
||||
engine->destroyCameraComponent(c);
|
||||
EntityManager::get().destroy(c);
|
||||
engine->destroy(swapChain);
|
||||
engine->destroy(&engine);
|
||||
}
|
||||
@@ -197,7 +199,8 @@ void FilamentApp::setupFilament() {
|
||||
swapChain = engine->createSwapChain(nativeLayer);
|
||||
renderer = engine->createRenderer();
|
||||
scene = engine->createScene();
|
||||
camera = engine->createCamera();
|
||||
Entity c = EntityManager::get().create();
|
||||
camera = engine->createCamera(c);
|
||||
camera->setProjection(60, (float) width / height, 0.1, 10);
|
||||
}
|
||||
|
||||
|
||||
@@ -64,7 +64,9 @@ App::~App() {
|
||||
engine->destroy(renderer);
|
||||
engine->destroy(scene);
|
||||
engine->destroy(view);
|
||||
engine->destroy(camera);
|
||||
Entity c = camera->getEntity();
|
||||
engine->destroyCameraComponent(c);
|
||||
EntityManager::get().destroy(c);
|
||||
engine->destroy(swapChain);
|
||||
engine->destroy(&engine);
|
||||
}
|
||||
@@ -78,7 +80,8 @@ void App::setupFilament() {
|
||||
swapChain = engine->createSwapChain(nativeLayer);
|
||||
renderer = engine->createRenderer();
|
||||
scene = engine->createScene();
|
||||
camera = engine->createCamera();
|
||||
Entity c = EntityManager::get().create();
|
||||
camera = engine->createCamera(c);
|
||||
cameraManipulator.setCamera(camera);
|
||||
cameraManipulator.setViewport(width, height);
|
||||
cameraManipulator.lookAt(filament::math::double3(0, 0, 3), filament::math::double3(0, 0, 0));
|
||||
|
||||
@@ -41,7 +41,8 @@ void FilamentApp::initialize() {
|
||||
swapChain = engine->createSwapChain(nativeLayer);
|
||||
renderer = engine->createRenderer();
|
||||
scene = engine->createScene();
|
||||
camera = engine->createCamera();
|
||||
Entity c = EntityManager::get().create();
|
||||
camera = engine->createCamera(c);
|
||||
|
||||
filaView = engine->createView();
|
||||
|
||||
@@ -126,7 +127,9 @@ FilamentApp::~FilamentApp() {
|
||||
engine->destroy(renderer);
|
||||
engine->destroy(scene);
|
||||
engine->destroy(filaView);
|
||||
engine->destroy(camera);
|
||||
Entity c = camera->getEntity();
|
||||
engine->destroyCameraComponent(c);
|
||||
EntityManager::get().destroy(c);
|
||||
engine->destroy(swapChain);
|
||||
engine->destroy(&engine);
|
||||
}
|
||||
|
||||
@@ -112,7 +112,9 @@ static constexpr uint8_t BAKED_COLOR_PACKAGE[] = {
|
||||
engine->destroy(renderer);
|
||||
engine->destroy(scene);
|
||||
engine->destroy(filaView);
|
||||
engine->destroy(camera);
|
||||
Entity c = camera->getEntity();
|
||||
engine->destroyCameraComponent(c);
|
||||
EntityManager::get().destroy(c);
|
||||
engine->destroy(swapChain);
|
||||
engine->destroy(&engine);
|
||||
}
|
||||
@@ -144,7 +146,8 @@ static constexpr uint8_t BAKED_COLOR_PACKAGE[] = {
|
||||
swapChain = engine->createSwapChain((__bridge void*) self.layer);
|
||||
renderer = engine->createRenderer();
|
||||
scene = engine->createScene();
|
||||
camera = engine->createCamera();
|
||||
Entity c = EntityManager::get().create();
|
||||
camera = engine->createCamera(c);
|
||||
renderer->setClearOptions({.clearColor={0.1, 0.125, 0.25, 1.0}, .clear = true});
|
||||
|
||||
filaView = engine->createView();
|
||||
|
||||
@@ -113,7 +113,9 @@ static constexpr uint8_t BAKED_COLOR_PACKAGE[] = {
|
||||
engine->destroy(renderer);
|
||||
engine->destroy(scene);
|
||||
engine->destroy(filaView);
|
||||
engine->destroy(camera);
|
||||
Entity c = camera->getEntity();
|
||||
engine->destroyCameraComponent(c);
|
||||
EntityManager::get().destroy(c);
|
||||
engine->destroy(swapChain);
|
||||
engine->destroy(&engine);
|
||||
}
|
||||
@@ -153,7 +155,8 @@ static constexpr uint8_t BAKED_COLOR_PACKAGE[] = {
|
||||
|
||||
renderer = engine->createRenderer();
|
||||
scene = engine->createScene();
|
||||
camera = engine->createCamera();
|
||||
Entity c = EntityManager::get().create();
|
||||
camera = engine->createCamera(c);
|
||||
|
||||
filaView = engine->createView();
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#include <filament/Material.h>
|
||||
#include <filament/MaterialInstance.h>
|
||||
#include <filament/Texture.h>
|
||||
#include <filament/TextureSampler.h>
|
||||
#include <filament/VertexBuffer.h>
|
||||
#include <filament/View.h>
|
||||
|
||||
@@ -91,6 +92,7 @@ public:
|
||||
filament::Texture* mTexture = nullptr;
|
||||
bool mHasSynced = false;
|
||||
ImGuiContext* mImGuiContext;
|
||||
filament::TextureSampler mSampler;
|
||||
};
|
||||
|
||||
} // namespace filagui
|
||||
|
||||
@@ -65,8 +65,8 @@ ImGuiHelper::ImGuiHelper(Engine* engine, filament::View* view, const Path& fontP
|
||||
|
||||
// For proggy, switch to NEAREST for pixel-perfect text.
|
||||
if (fontPath.isEmpty() && !imGuiContext) {
|
||||
TextureSampler sampler(MinFilter::NEAREST, MagFilter::NEAREST);
|
||||
mMaterial->setDefaultParameter("albedo", mTexture, sampler);
|
||||
mSampler = TextureSampler(MinFilter::NEAREST, MagFilter::NEAREST);
|
||||
mMaterial->setDefaultParameter("albedo", mTexture, mSampler);
|
||||
}
|
||||
|
||||
utils::EntityManager& em = utils::EntityManager::get();
|
||||
@@ -108,8 +108,8 @@ void ImGuiHelper::createAtlasTexture(Engine* engine) {
|
||||
.build(*engine);
|
||||
mTexture->setImage(*engine, 0, std::move(pb));
|
||||
|
||||
TextureSampler sampler(MinFilter::LINEAR, MagFilter::LINEAR);
|
||||
mMaterial->setDefaultParameter("albedo", mTexture, sampler);
|
||||
mSampler = TextureSampler(MinFilter::LINEAR, MagFilter::LINEAR);
|
||||
mMaterial->setDefaultParameter("albedo", mTexture, mSampler);
|
||||
}
|
||||
|
||||
ImGuiHelper::~ImGuiHelper() {
|
||||
@@ -220,6 +220,8 @@ void ImGuiHelper::processImGuiCommands(ImDrawData* commands, const ImGuiIO& io)
|
||||
if (pcmd.TextureId) {
|
||||
TextureSampler sampler(MinFilter::LINEAR, MagFilter::LINEAR);
|
||||
materialInstance->setParameter("albedo", (Texture const*)pcmd.TextureId, sampler);
|
||||
} else {
|
||||
materialInstance->setParameter("albedo", mTexture, mSampler);
|
||||
}
|
||||
rbuilder
|
||||
.geometry(primIndex, RenderableManager::PrimitiveType::TRIANGLES,
|
||||
|
||||
@@ -33,7 +33,7 @@ namespace viewer {
|
||||
* [{
|
||||
* "name": "simple",
|
||||
* "base": {
|
||||
* "view.dof.focusDistance": 0.1,
|
||||
* "view.dof.cocScale": 1.0,
|
||||
* "view.bloom.strength": 0.5
|
||||
* },
|
||||
* "permute": {
|
||||
|
||||
@@ -506,9 +506,7 @@ static int parse(jsmntok_t const* tokens, int i, const char* jsonChunk, DepthOfF
|
||||
for (int j = 0; j < size; ++j) {
|
||||
const jsmntok_t tok = tokens[i];
|
||||
CHECK_KEY(tok);
|
||||
if (0 == compare(tok, jsonChunk, "focusDistance")) {
|
||||
i = parse(tokens, i + 1, jsonChunk, &out->focusDistance);
|
||||
} else if (0 == compare(tok, jsonChunk, "cocScale")) {
|
||||
if (0 == compare(tok, jsonChunk, "cocScale")) {
|
||||
i = parse(tokens, i + 1, jsonChunk, &out->cocScale);
|
||||
} else if (0 == compare(tok, jsonChunk, "maxApertureDiameter")) {
|
||||
i = parse(tokens, i + 1, jsonChunk, &out->maxApertureDiameter);
|
||||
@@ -1239,7 +1237,6 @@ static std::ostream& operator<<(std::ostream& out, const ViewerOptions& in) {
|
||||
|
||||
static std::ostream& operator<<(std::ostream& out, const DepthOfFieldOptions& in) {
|
||||
return out << "{\n"
|
||||
<< "\"focusDistance\": " << (in.focusDistance) << ",\n"
|
||||
<< "\"cocScale\": " << (in.cocScale) << ",\n"
|
||||
<< "\"maxApertureDiameter\": " << (in.maxApertureDiameter) << ",\n"
|
||||
<< "\"enabled\": " << to_string(in.enabled) << ",\n"
|
||||
|
||||
@@ -103,7 +103,6 @@ static const char* JSON_TEST_DEFAULTS = R"TXT(
|
||||
},
|
||||
"dof": {
|
||||
"enabled": false,
|
||||
"focusDistance": 10.0,
|
||||
"cocScale": 1.0,
|
||||
"maxApertureDiameter": 0.01
|
||||
},
|
||||
|
||||
@@ -18,11 +18,16 @@
|
||||
|
||||
namespace matc {
|
||||
|
||||
void MaterialLexer::readBlock() noexcept {
|
||||
bool MaterialLexer::readBlock() noexcept {
|
||||
size_t braceCount = 0;
|
||||
while (hasMore()) {
|
||||
skipWhiteSpace();
|
||||
|
||||
// This can occur if the block is malformed.
|
||||
if (mCursor >= mEnd) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (*mCursor == '{') {
|
||||
braceCount++;
|
||||
} else if (*mCursor == '}') {
|
||||
@@ -31,11 +36,12 @@ void MaterialLexer::readBlock() noexcept {
|
||||
|
||||
if (braceCount == 0) {
|
||||
consume();
|
||||
break;
|
||||
return true;
|
||||
}
|
||||
|
||||
consume();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void MaterialLexer::readIdentifier() noexcept {
|
||||
@@ -76,7 +82,11 @@ bool MaterialLexer::readLexeme() noexcept {
|
||||
size_t line = getLine();
|
||||
size_t cursor = getCursor();
|
||||
switch (nextMaterialType) {
|
||||
case MaterialType::BLOCK : readBlock(); break;
|
||||
case MaterialType::BLOCK:
|
||||
if (!readBlock()) {
|
||||
nextMaterialType = MaterialType::UNKNOWN;
|
||||
break;
|
||||
}
|
||||
case MaterialType::IDENTIFIER: readIdentifier(); break;
|
||||
case MaterialType::UNKNOWN: readUnknown(); break;
|
||||
default:
|
||||
|
||||
@@ -30,7 +30,7 @@ private:
|
||||
|
||||
bool peek(MaterialType* type) const noexcept;
|
||||
|
||||
void readBlock() noexcept;
|
||||
bool readBlock() noexcept;
|
||||
void readIdentifier() noexcept;
|
||||
void readUnknown() noexcept;
|
||||
};
|
||||
|
||||
@@ -77,7 +77,7 @@ public class PreviewMeshPanel extends JPanel {
|
||||
|
||||
Filament.getInstance().runOnFilamentThread((Engine engine) -> {
|
||||
mScene = engine.createScene();
|
||||
mCamera = engine.createCamera();
|
||||
mCamera = engine.createCamera(EntityManager.get().create());
|
||||
mView = engine.createView();
|
||||
mRenderer = engine.createRenderer();
|
||||
mPreviewCamera = new PreviewCamera(mCamera);
|
||||
@@ -136,7 +136,8 @@ public class PreviewMeshPanel extends JPanel {
|
||||
Filament.getInstance().runOnFilamentThread((Engine engine) -> {
|
||||
engine.destroyRenderer(mRenderer);
|
||||
engine.destroyScene(mScene);
|
||||
engine.destroyCamera(mCamera);
|
||||
engine.destroyCameraComponent(mCamera.getEntity());
|
||||
EntityManager.get().destroy(mCamera.getEntity());
|
||||
engine.destroyView(mView);
|
||||
mFilamentPanel.destroy(engine);
|
||||
engine.destroyVertexBuffer(mVertexBuffer);
|
||||
|
||||
@@ -256,10 +256,9 @@ Filament.loadClassExtensions = function() {
|
||||
|
||||
/// setDepthOfFieldOptions ::method::
|
||||
/// overrides ::argument:: Dictionary with one or more of the following properties: \
|
||||
/// focusDistance, cocScale, maxApertureDiameter, enabled.
|
||||
/// cocScale, maxApertureDiameter, enabled.
|
||||
Filament.View.prototype.setDepthOfFieldOptions = function(overrides) {
|
||||
const options = {
|
||||
focusDistance: 10.0,
|
||||
cocScale: 1.0,
|
||||
maxApertureDiameter: 0.01,
|
||||
enabled: false
|
||||
|
||||
1
web/filament-js/filament.d.ts
vendored
1
web/filament-js/filament.d.ts
vendored
@@ -102,7 +102,6 @@ export interface View$AmbientOcclusionOptions {
|
||||
}
|
||||
|
||||
export interface View$DepthOfFieldOptions {
|
||||
focusDistance?: number;
|
||||
cocScale?: number;
|
||||
maxApertureDiameter?: number;
|
||||
enabled?: boolean;
|
||||
|
||||
@@ -367,7 +367,6 @@ value_object<filament::View::AmbientOcclusionOptions>("View$AmbientOcclusionOpti
|
||||
.field("quality", &filament::View::AmbientOcclusionOptions::quality);
|
||||
|
||||
value_object<filament::View::DepthOfFieldOptions>("View$DepthOfFieldOptions")
|
||||
.field("focusDistance", &filament::View::DepthOfFieldOptions::focusDistance)
|
||||
.field("cocScale", &filament::View::DepthOfFieldOptions::cocScale)
|
||||
.field("maxApertureDiameter", &filament::View::DepthOfFieldOptions::maxApertureDiameter)
|
||||
.field("enabled", &filament::View::DepthOfFieldOptions::enabled)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "filament",
|
||||
"version": "1.9.25",
|
||||
"version": "1.10.0",
|
||||
"description": "Real-time physically based rendering engine",
|
||||
"main": "filament.js",
|
||||
"module": "filament.js",
|
||||
|
||||
Reference in New Issue
Block a user