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