[英]OpenGL get Device Context
我正在嘗試在Windows上創建OpenGL應用程序。 據我了解,我必須獲得的第一件事情是設備上下文,它必須傳遞給選擇和設置像素格式並創建渲染上下文的幾個函數。 我使用OpenGL Wiki大致了解了我應該怎么做。 我的代碼是這樣的:
#include <iostream>
#include <windef.h>
#include <wingdi.h>
HDC hdc;
int main() {
hdc = wglGetCurrentDC();
std::cout << "HDC: " << hdc << std::endl;
return 0;
}
此打印
HDC: 0
我假設設備上下文是指物理設備,但我在某處讀到它指的是任何可繪制的“表面”。 在這兩種情況下,我的問題是:如何獲得非空DC? 還是應該執行一套完全不同的步驟來設置整個OpenGL系統?
我在線上找到了很多教程,但是它們都使用GLUT,GLEW,GLFW,X11,SDL等庫。 庫使某些事情變得容易,但是它們通常不會執行沒有使用它們就不可能完成的任務。 這次,我想嘗試用困難的方式做事,因此不使用任何庫,僅使用普通的OpenGL。
您沒有說明您的操作系統,但我從功能名稱假定為Windows。 問題完全與Reto Koradi在評論中指出的一樣。 要設置OpenGL,您需要執行以下操作:
獲取具有有效設備上下文的對象的操作系統句柄
它可以是OS窗口或OS位圖。 如果您只有控制台應用程序,則需要首先創建一個有效的OS窗口並使用其句柄(據我所知,控制台沒有Canvas)。
您可以使用GLUT進行窗口創建,或者如果您的編譯器IDE具有窗口應用程序,則可以使用GLUT 。 您也可以結合使用OpenGL和Window組件。 VCL也不是問題(我在OpenGL中使用了多年)
在Windows中,您可以使用CreateWindowEx,以便在Google上找到它的示例...
無論如何,您都應將句柄放在類似以下變量中:
HWND hwin=NULL;
如果您沒有使用Windows應用程序的經驗,請為此使用GLUT 。 否則,您將需要學習很多知識,僅涉及窗口創建,事件的消息處理以及用戶/應用程序交互,這對於沒有指導的新手來說真的是不堪重負。
獲取該句柄的設備上下文
HDC hdc = GetDC(hwin);
設置設備上下文所需的像素格式
PIXELFORMATDESCRIPTOR pfd; ZeroMemory( &pfd, sizeof( pfd ) ); // set the pixel format for the DC pfd.nSize = sizeof( pfd ); pfd.nVersion = 1; pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; pfd.iPixelType = PFD_TYPE_RGBA; pfd.cColorBits = 24; pfd.cDepthBits = 24; pfd.iLayerType = PFD_MAIN_PLANE; SetPixelFormat(hdc,ChoosePixelFormat(hdc, &pfd),&pfd);
為設備上下文創建OpenGL渲染上下文
HGLRC hrc = wglCreateContext(hdc);
將其設置為默認OpenGL上下文
wglMakeCurrent(hdc, hrc);
這是絕對最小值,沒有任何錯誤檢查,其他緩沖區等。有關更多信息和實際代碼,請參見相關的QA :
您可以對所有這些使用GLUT 。 這是我通過快速搜索發現的第一擊:
或按照OpenGL教程進行操作,其中有很多...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.