osgViewer.WGL
是 OpenSceneGraph 中的一个窗口系统接口,它提供了使用 Win32 API 在 Windows 平台上创建 OpenGL 渲染窗口的功能。
osgViewer.WGL
是 osgViewer
模块下的一个实现窗口系统的类,它可以创建一个使用 Win32 API 的 OpenGL 渲染窗口,并提供了一些控制窗口行为的接口。
osgViewer::GraphicsWindow *gw = new osgViewer::GraphicsWindowWin32(traits, hWnd);
其中 traits
是 osg::GraphicsContext::Traits
类型,表示 OpenGL 上下文的属性,hWnd
是 Windows 窗口的句柄,可以通过 CreateWindow
等函数获得。
osgViewer.WGL
提供了一些方法来控制窗口,比如设置窗口的标题、大小、位置等等。
void setWindowName(const std::string &name);
void setWindowRectangle(int x, int y, int width, int height);
void setWindowDecoration(bool flag);
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#include <iostream>
#include <osgViewer/GraphicsWindow>
#include <osgViewer/Viewer>
int main()
{
// create win32 window
WNDCLASS wc = {};
wc.lpfnWndProc = DefWindowProc;
wc.hInstance = GetModuleHandle(nullptr);
wc.lpszClassName = "osgViewer";
RegisterClass(&wc);
HWND hWnd = CreateWindow(
"osgViewer", "Hello osgViewer.WGL", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 800, 600,
nullptr, nullptr, GetModuleHandle(nullptr), nullptr
);
// create osg viewer
osgViewer::GraphicsContext::Traits traits;
traits.windowDecoration = false;
traits.doubleBuffer = true;
traits.alpha = 8;
traits.depth = 24;
traits.stencil = 8;
traits.sampleBuffers = 1;
traits.samples = 4;
traits.sharedContext = nullptr;
traits.windowName = "Hello osgViewer.WGL";
traits.width = 800;
traits.height = 600;
osgViewer::GraphicsWindow *gw = new osgViewer::GraphicsWindowWin32(traits, hWnd);
osgViewer::Viewer viewer;
viewer.getCamera()->setGraphicsContext(gw);
// start render loop
while (!viewer.done())
{
viewer.frame();
}
// cleanup
delete gw;
DestroyWindow(hWnd);
return 0;
}