查看源码 wxGLCanvas (wx v2.4.3)
wxGLCanvas
是一个用于显示 OpenGL 图形的类。
它总是与 wxGLContext
结合使用,因为只有当上下文与 wxGLCanvas
关联时,它才能变为当前(即,对 OpenGL 命令激活)。
更确切地说,您首先需要创建一个 wxGLCanvas
窗口,然后创建一个 wxGLContext
的实例,该实例使用此 wxGLCanvas
初始化,然后稍后使用 setCurrent/2
与 wxGLContext
的实例,或者使用 wxGLContext:setCurrent/2
与 wxGLCanvas
的实例(可能与创建上下文时使用的实例不同),将渲染上下文表示的 OpenGL 状态绑定到画布,最后调用 swapBuffers/1
来交换 OpenGL 画布的缓冲区,从而显示您当前的输出。
请注意,即使在 wxWindow
在高 DPI 显示器上使用受坐标缩放影响的逻辑像素的平台上,wxGLContext
始终使用物理像素。因此,如果您想将 OpenGL 视口设置为整个窗口的大小,则必须将 wxWindow:getClientSize/1
返回的结果乘以 wxWindow:getContentScaleFactor/1
,然后再将其传递给 glViewport()
。相同的考虑也适用于其他 OpenGL 函数和其他坐标,特别是从事件处理程序中的 wxMouseEvent
中检索的坐标。
请注意,2.9 之前的 wxWidgets 版本曾经在 wxGLCanvas
内部隐式创建 wxGLContext
。当前版本仍然支持此操作,但现在已弃用,将来将被删除,请更新您的代码以显式创建渲染上下文。
要设置画布的属性(深度缓冲区的位数、模板缓冲区的位数等),您可以使用 wxGLAttributes
(在 wx 中未实现)实例在构造函数中传递它们。您仍然可以使用 3.1.0 之前的旧方法(设置 attribList
参数的正确值),但不建议这样做。
注意:在那些使用配置脚本的平台(例如 Linux 和 macOS)上,如果找到了相关的头文件和库,则会自动启用 OpenGL 支持。要在其他平台(例如 Windows)下启用它,您需要编辑 setup.h
文件并将 wxUSE_GLCANVAS
设置为 1
,然后还将 USE_OPENGL=1
传递给 make 实用程序。您可能还需要将 opengl32.lib
(对于旧版本的 OpenGL,则为 glu32.lib
)添加到您的程序链接的库列表中。
参见:wxGLContext
此类派生自以下类,并且可以使用其中的函数:
wxWidgets 文档: wxGLCanvas
摘要
函数
销毁对象
确定是否可以使用具有指定属性的画布。
此构造函数仍然仅出于兼容性原因可用。
使 OpenGL 渲染上下文 context
表示的 OpenGL 状态变为当前状态,即
交换此窗口的双缓冲区,使后缓冲区变为前缓冲区,反之亦然,以便在窗口上显示先前 OpenGL 命令的输出。
类型
-type wxGLCanvas() :: wx:wx_object().
函数
-spec createSurface(This) -> boolean() when This :: wxGLCanvas().
-spec destroy(This :: wxGLCanvas()) -> ok.
销毁对象
确定是否可以使用具有指定属性的画布。
这仅适用于视觉属性,不适用于渲染上下文属性。请使用此方法的新形式,使用 wxGLAttributes
(在 wx 中未实现)。
返回:如果支持属性,则为 true。
-spec new(Parent) -> wxGLCanvas() when Parent :: wxWindow:wxWindow().
等效于 new(Parent, [])
。
-spec new(Parent, [Option]) -> wxGLCanvas() when Parent :: wxWindow:wxWindow(), Option :: {id, integer()} | {attribList, [integer()]} | {pos, {X :: integer(), Y :: integer()}} | {size, {W :: integer(), H :: integer()}} | {style, integer()} | {name, unicode:chardata()} | {palette, wxPalette:wxPalette()}.
此构造函数仍然仅出于兼容性原因可用。
请使用带有 wxGLAttributes
(在 wx 中未实现)的构造函数。
如果未指定 attribList
,则使用 wxGLAttributes::PlatformDefaults()
(在 wx 中未实现),以及其他一些属性(见下文)。
-spec setCurrent(This, Context) -> boolean() when This :: wxGLCanvas(), Context :: wxGLContext:wxGLContext().
使 OpenGL 渲染上下文 context
表示的 OpenGL 状态变为当前状态,即
它将用于所有后续的 OpenGL 调用。
这等效于使用此窗口作为参数调用的 wxGLContext:setCurrent/2
。
注意:此函数只能在窗口显示在屏幕上时调用,特别是通常不能从构造函数中调用,因为窗口此时尚未显示。
返回:如果发生错误,则为 false。
-spec swapBuffers(This) -> boolean() when This :: wxGLCanvas().
交换此窗口的双缓冲区,使后缓冲区变为前缓冲区,反之亦然,以便在窗口上显示先前 OpenGL 命令的输出。
返回:如果发生错误,则为 false。