引擎(Engine)是google/filament应用程序的入口。它跟踪用户创建的所有资源、管理渲染线程以及硬件渲染器。 google/ filament的应用程序中应该首先创建引擎(Engine)
#include <filament/Engine.h>
using namespace filament;
Engine* engine = Engine::create();
渲染通常发生在操作系统窗口,这样的窗口由filament.Renderer管理。一个典型的filament渲染循环如下。
#include <filament/Engine.h>
#include <filament/Renderer.h>
#include <filament/Scene.h>
#include <filament/View.h>
using namespace filament;
Engine* engine = Engine::create();
SwapChain* swapChain = engine->createSwapChain(nativeWindow);
Renderer* renderer = engine->createRenderer();
Scene* scene = engine->createScene();
View* view = engine->createView();
view->setScene(scene);
do {
// typically we wait for VSYNC and user input events
if (renderer->beginFrame(swapChain)) {
renderer->render(view);
renderer->endFrame();
}
} while (!quit);
engine->destroy(&view);
engine->destroy(&scene);
engine->destroy(&renderer);
engine->destroy(&swapChain);
Engine::destroy(&engine);
资源跟踪(Resource Tracking)
引擎(Engine)它跟踪用户创建的所有资源,如顶点和索引缓冲区,光源,相机等。
线程安全(Thread safety)
引擎(Engine)不是线程安全的,因为目前没有实现同步(synchronize)。如果想使用多线程,用户必须自己进行扩展。
多线程(Multi-threading)
引擎(Engine)会开启一个渲染线程和多个工作线程,平台会自动设定工作线程的数量,以达到最优的性能。
交换链(Swap Chains)
交换链表示操作系统的可渲染表面, 通常它是一个窗口或视图。初始为类型为void*,随后根据运行的平台确定具体窗口类型。
google/filament支持的窗口类型如下:
Platform | nativeWindow type
:--------|:----------------------------:
Android | ANativeWindow*
OSX | NSView*
IOS | CAEAGLLayer*
X11 | Window
Windows | HWND
在Windows中的创建交换链的调用过程如下:
SDL_SysWMinfo wmi;
SDL_VERSION(&wmi.version);
ASSERT_POSTCONDITION(SDL_GetWindowWMInfo(sdlWindow, &wmi), "SDL version unsupported!");
HDC nativeWindow = (HDC) wmi.info.win.hdc;
using namespace filament;
Engine* engine = Engine::create();
SwapChain* swapChain = engine->createSwapChain((void*) nativeWindow);