檢視原始碼 wxGLCanvas (wx v2.4.3)

wxGLCanvas 是一個用於顯示 OpenGL 圖形的類別。

它總是與 wxGLContext 一起使用,因為只有當上下文與 wxGLCanvas 相關聯時,才能將其設為當前(即 OpenGL 命令的活動狀態)。

更精確地說,您首先需要建立一個 wxGLCanvas 視窗,然後建立一個 wxGLContext 的實例,並使用此 wxGLCanvas 初始化,然後稍後使用 setCurrent/2wxGLContext 的實例,或者使用 wxGLContext:setCurrent/2wxGLCanvas 的實例(可能與建立上下文時使用的不同),以將渲染上下文表示的 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.

銷毀物件

連結到此函式

isDisplaySupported(AttribList)

檢視原始碼
-spec isDisplaySupported(AttribList) -> boolean() when AttribList :: [integer()].

判斷是否提供具有指定屬性的畫布。

這僅適用於視覺屬性,不適用於渲染上下文屬性。請使用此方法的新形式,使用 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 中未實作) ,加上其他一些屬性(請參閱下文)。

連結到此函式

setCurrent(This, Context)

檢視原始碼
-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。