簡體   English   中英

OpenGL獲取設備上下文

[英]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庫創建窗口的教程

您沒有說明您的操作系統,但我從功能名稱假定為Windows。 問題完全與Reto Koradi在評論中指出的一樣。 要設置OpenGL,您需要執行以下操作:

  1. 獲取具有有效設備上下文的對象的操作系統句柄

    它可以是OS窗口或OS位圖。 如果您只有控制台應用程序,則需要首先創建一個有效的OS窗口並使用其句柄(據我所知,控制台沒有Canvas)。

    您可以使用GLUT進行窗口創建,或者如果您的編譯器IDE具有窗口應用程序,則可以使用GLUT 您也可以結合使用OpenGL和Window組件。 VCL也不是問題(我在OpenGL中使用了多年)

    在Windows中,您可以使用CreateWindowEx,以便在Google上找到它的示例...

    無論如何,您都應將句柄放在類似以下變量中:

     HWND hwin=NULL; 

    如果您沒有使用Windows應用程序的經驗,請為此使用GLUT 否則,您將需要學習很多知識,僅涉及窗口創建,事件的消息處理以及用戶/應用程序交互,這對於沒有指導的新手來說真的是不堪重負。

  2. 獲取該句柄的設備上下文

     HDC hdc = GetDC(hwin); 
  3. 設置設備上下文所需的像素格式

     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); 
  4. 為設備上下文創建OpenGL渲染上下文

     HGLRC hrc = wglCreateContext(hdc); 
  5. 將其設置為默認OpenGL上下文

     wglMakeCurrent(hdc, hrc); 

這是絕對最小值,沒有任何錯誤檢查,其他緩沖區等。有關更多信息和實際代碼,請參見相關的QA

您可以對所有這些使用GLUT 這是我通過快速搜索發現的第一擊:

或按照OpenGL教程進行操作,其中有很多...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM