Navigation Menu

Skip to content

Commit

Permalink
Add missing getWorldFromClip() API (#692)
Browse files Browse the repository at this point in the history
Fixes #671
  • Loading branch information
romainguy committed Jan 11, 2019
1 parent 045274b commit 8029ad5
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 0 deletions.
2 changes: 2 additions & 0 deletions filament/src/View.cpp
Expand Up @@ -602,13 +602,15 @@ void FView::prepareCamera(const CameraInfo& camera, const Viewport& viewport) co
const mat4f clipFromView(projectionMatrix);
const mat4f viewFromClip(Camera::inverseProjection(clipFromView));
const mat4f clipFromWorld(clipFromView * viewFromWorld);
const mat4f worldFromClip(worldFromView * viewFromClip);

UniformBuffer& u = getUb();
u.setUniform(offsetof(PerViewUib, viewFromWorldMatrix), viewFromWorld); // view
u.setUniform(offsetof(PerViewUib, worldFromViewMatrix), worldFromView); // model
u.setUniform(offsetof(PerViewUib, clipFromViewMatrix), clipFromView); // projection
u.setUniform(offsetof(PerViewUib, viewFromClipMatrix), viewFromClip); // 1/projection
u.setUniform(offsetof(PerViewUib, clipFromWorldMatrix), clipFromWorld); // projection * view
u.setUniform(offsetof(PerViewUib, worldFromClipMatrix), worldFromClip); // 1/(projection * view)

const float w = viewport.width;
const float h = viewport.height;
Expand Down
1 change: 1 addition & 0 deletions libs/filabridge/include/private/filament/UibGenerator.h
Expand Up @@ -49,6 +49,7 @@ struct PerViewUib { // NOLINT(cppcoreguidelines-pro-type-member-init)
math::mat4f clipFromViewMatrix;
math::mat4f viewFromClipMatrix;
math::mat4f clipFromWorldMatrix;
math::mat4f worldFromClipMatrix;
math::mat4f lightFromWorldMatrix;

math::float4 resolution; // viewport width, height, 1/width, 1/height
Expand Down
1 change: 1 addition & 0 deletions libs/filabridge/src/UibGenerator.cpp
Expand Up @@ -42,6 +42,7 @@ UniformInterfaceBlock const& UibGenerator::getPerViewUib() noexcept {
.add("clipFromViewMatrix", 1, UniformInterfaceBlock::Type::MAT4, Precision::HIGH)
.add("viewFromClipMatrix", 1, UniformInterfaceBlock::Type::MAT4, Precision::HIGH)
.add("clipFromWorldMatrix", 1, UniformInterfaceBlock::Type::MAT4, Precision::HIGH)
.add("worldFromClipMatrix", 1, UniformInterfaceBlock::Type::MAT4, Precision::HIGH)
.add("lightFromWorldMatrix", 1, UniformInterfaceBlock::Type::MAT4, Precision::HIGH)
// view
.add("resolution", 1, UniformInterfaceBlock::Type::FLOAT4, Precision::HIGH)
Expand Down
5 changes: 5 additions & 0 deletions shaders/src/common_getters.fs
Expand Up @@ -27,6 +27,11 @@ mat4 getClipFromWorldMatrix() {
return frameUniforms.clipFromWorldMatrix;
}

/** @public-api */
mat4 getWorldFromClipMatrix() {
return frameUniforms.worldFromClipMatrix;
}

/** @public-api */
vec4 getResolution() {
return frameUniforms.resolution;
Expand Down

0 comments on commit 8029ad5

Please sign in to comment.