【发布时间】:2017-03-23 22:26:12
【问题描述】:
我正在尝试在 Windows 上创建一个 OpenGL 应用程序。据我所知,我必须获取的第一件事是设备上下文,它必须传递给几个函数,这些函数可以选择和设置像素格式并创建渲染上下文。我使用the 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。
我终于找到了a tutorial,它只使用了windows库来创建一个窗口。
【问题讨论】:
-
我也是这么认为的,但是这篇文章主要是关于创建一个OpenGL上下文,而我需要的上下文是一个设备上下文。文章指出:“您应该知道什么是窗口句柄 (HWND) 和设备上下文 (DC),以及如何创建它们。”
-
所以你的意思是代码在这种情况下不适用。我认为你可能是对的,但问题就变成了我必须如何创建一个。
-
对不起,你是对的;因为它是 WGL 函数,所以我把它误认为是
wglGetCurrentContext。 -
wglGetCurrentDC()在这里无济于事。如果您查看它的文档,它“......获取与当前 OpenGL 渲染上下文相关联的设备上下文的句柄......”。这意味着您只能在创建 OpenGL 上下文之后 使用它。这一切都需要更多的代码。您必须先创建一个窗口,然后通过各种步骤来获取 DC,选择像素格式,创建 OpenGL 上下文等。超出此处的答案范围,至少对我而言……从学习开始如何仅使用 Win32 编写基本应用程序,然后添加 OpenGL 片段。 -
好的,有道理。谢谢。