首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

没有打开窗口的OpenGL上下文 - 当使用GetDesktopWindow制作的HWND时,wglMakeCurrent因HDC和HGLRC而失败

首先,要了解OpenGL上下文没有打开的原因,我们需要先了解OpenGL上下文的创建和渲染过程。在Windows系统上,当使用OpenGL API创建一个OpenGL上下文时,需要使用wglCreateContextAttribs函数,并指定一个HDC(设备上下文)和HGLRC(OpenGL渲染上下文)来创建一个OpenGL渲染上下文。如果指定的HDC和HGLRC无效,则无法创建OpenGL渲染上下文,从而导致OpenGL上下文创建失败。

此外,在使用wglMakeCurrent函数将OpenGL上下文设置为当前上下文时,如果HDC和HGLRC无效,也会导致OpenGL上下文创建失败。因此,在使用OpenGL API创建OpenGL上下文时,需要确保指定的HDC和HGLRC有效。

如果OpenGL上下文创建失败,可以检查以下几个方面:

  1. 确保HDC和HGLRC有效:在使用OpenGL API创建OpenGL上下文之前,需要确保指定的HDC和HGLRC有效。可以使用Windows系统提供的函数如GetDC、CreateDC、DeleteDC等来获取和创建HDC和HGLRC。
  2. 检查OpenGL驱动是否安装正确:如果OpenGL驱动未正确安装,也会导致OpenGL上下文创建失败。可以尝试重新安装OpenGL驱动,或者使用其他驱动程序安装工具来安装OpenGL驱动。
  3. 检查OpenGL库文件是否存在:如果OpenGL库文件不存在,也会导致OpenGL上下文创建失败。可以尝试安装OpenGL库文件,或者使用其他库文件来代替。
  4. 检查运行环境:如果运行环境不正确,也会导致OpenGL上下文创建失败。可以检查编译器和运行时环境是否已正确安装和配置。

如果以上方法都无法解决问题,可以尝试使用其他OpenGL上下文创建函数,例如wglCreateContext、wglCreateLayerContext等,或者使用其他Windows API函数来创建OpenGL上下文。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

OpenGL】八、初始化 OpenGL 渲染环境 ( 导入 OpenGL 头文件 | 链接 OpenGL 库 | 将窗口设置为 OpenGL 窗口 | 设置像素格式描述符 | 渲染绘制 ) ★

OpenGL 窗口 ; 四、获取窗口设备 ---- 窗口设备在初始化 OpenGL 上下文 , 进行 OpenGL 绘制都需要用到 , 这里设置到全局变量中 ; // 窗口设备 // 提取到全局变量中...上下文对象 ---- 根据窗口设备创建 OpenGL 上下文对象 , 注意该操作必须在设置完像素格式后进行操作 , 然后设置该 OpenGL 上下文对象 ; 其中 dc 是 窗口设备 , HDC dc...= GetDC(hWnd); // 创建 OpenGL 上下文对象 , 注意该操作必须在设置完像素格式后进行操作 HGLRC rc = wglCreateContext(dc);...// 设置 OpenGL 上下文对象 , 将 rc dc 作为当前渲染设备 wglMakeCurrent(dc, rc); 八、设置清除缓冲区背景颜色 ---- 调用 glClearColor...HGLRC rc = wglCreateContext(dc); // 设置 OpenGL 上下文对象 , 将 rc dc 作为当前渲染设备 wglMakeCurrent(dc

1.6K00
  • windowsmfc程序中使用OpenGL多重采样功能

    windows/mfc程序中使用OpenGL多重采样功能 学过opengl基础的人都知道,打开混合功能并调用glEnable(GL_POINT_SMOOTH)/glEnable(GL_LINE_SMOOTH...OpenGL对于多边形反走样有另一个多重采样特性支持——glEnable(GL_MULTISAMPLE) 但是调用后发现还是不起作用,查阅资料后才发现在Windows程序中要想使用OpenGL多重采样...,但是使用wglChoosePixelFormatARB函数必须先调用glewInit()来初始化glew库,要初始化glew库则必须先得到窗口渲染上下文,于是就必须先有一个临时窗口,但不能是真正窗口...SetPixelFormat(tempHdc, 1, &pfd)) //每个窗口只能设置一次 return -1; HGLRC temphRC = wglCreateContext...if (nPixelFormat == -1) //多重采样,如果硬件不支持就使用下面的代码关闭多重采样 { // Try again without MSAA

    1.1K20

    小菜学Chromium之OpenGL学习之二

    在这个教程里,我们一起来玩第一个OpenGL程序.它将显示一个空OpenGL窗口,可以在窗口全屏模式下切换,按ESC退出.它是我们以后应用程序框架....DC将窗口连接到GDI(Graphics Device Interface图形设备接口)。RC将OpenGL连接到DC。第三行变量 hWnd 将保存由Windows给我们窗口指派句柄。...HGLRC hRC=NULL;// 窗口着色描述表句柄 HDC hDC=NULL;// OpenGL渲染描述表句柄 HWND hWnd=.../ 窗口活动标志,缺省为TRUE bool fullscreen=TRUE;// 全屏标志缺省,缺省设定成全屏模式 下面的代码作用是重新设置OpenGL场景大小,不管窗口大小是否已经改变(假定您没有使用全屏模式...OpenGL场景尺寸将被设置成它显示所在窗口大小。

    1K60

    OpenGL】十、OpenGL 绘制点 ( 初始化 OpenGL 矩阵 | 设置投影矩阵 | 设置模型视图矩阵 | 绘制点 | 清除缓冲区 | 设置当前颜色值 | 设置点大小 | 绘制点 )

    四、运行效果展示 五、相关资源 上一篇博客 【OpenGL】九、OpenGL 绘制基础 ( OpenGL 状态机概念 | OpenGL 矩阵概念 ) 简单介绍 OpenGL一些理论概念 ; 本篇博客开始使用...库 | 将窗口设置为 OpenGL 窗口 | 设置像素格式描述符 | 渲染绘制 ) ★ 博客 ; 2、设置当前颜色值 设置当前绘制颜色 : 调用 glColor4ub 函数设置当前绘制颜色 , 传入参数是...---- 这里只展示部分代码 , 完整代码可以到 博客源码快照 中查看 , 已上传 CSDN 资源 , 关注即可下载 ; 初始化 OpenGL 相关代码 : // 创建 OpenGL 渲染上下文...// 获取窗口设备 dc = GetDC(hWnd); // 颜色描述符, 像素格式描述符 , 选取 OpenGL 渲染像素格式 PIXELFORMATDESCRIPTOR...HGLRC rc = wglCreateContext(dc); // 设置 OpenGL 上下文对象 , 将 rc dc 作为当前渲染设备 wglMakeCurrent(dc

    1.9K00

    OpenGL】七、桌面窗口搭建 ( 导入头文件 | 桌面程序入口函数 | 注册窗口 | 创建窗口 | 显示窗口 )

    , OpenGL 系列开发基于该桌面程序进行 ; 本篇博客简单介绍下该桌面初始化操作 , 注册桌面窗口 , 创建桌面窗口 , 显示桌面窗口 ; 一、导入头文件 ---- Windows 窗口程序需要导入...: 设置菜单 ; lpszClassName : 设置窗口标识 ; 窗口注册代码示例 : 下面的代码 Visual Studio 自动身 // // 函数: MyRegisterClass() /...(&wcex); } 四、创建窗口 ---- 调用 CreateWindowW 方法 , 创建 Windows 窗口 , 创建完成之后 , 验证下创建方法返回值 hWnd , 如果创建失败 , 直接退出...); UpdateWindow(hWnd); 六、完整代码示例 ---- Windows 窗口完整代码 , 这是 Visual Studio 自动生成代码 ; // OpenGL.cpp :...= BeginPaint(hWnd, &ps); // TODO: 在此处添加使用 hdc 任何绘图代码...

    1.2K00

    WinExec、ShellExecute用法详解「建议收藏」

    第一次运行程序 应该使用这个值   如果调用成功,这个函数会返回一个不小于31值,否则调用失败,其返回值意义如下:   --0 系统内存或资源不足   --ERROR_BAD_FORMAT...示例,我想要用记事本打开”C:\HDC.TXT”,以正常方式运行: WinExec(pChar('notepad.exe C:\HDC.TXT'),SW_SHOWNORMAL);   这个函数system...ShellExecute功能要强得多,并且可以完全替代WinExec(),事实上,WinExec()也是为了以前版本兼容保留,所以,我们要尽量使用ShellExecute()。   ...函数调用过程出现错误时,它将作为Windows消息窗口窗口。...第一次运行程序 应该使用这个值   若ShellExecute函数调用成功,则返回值为被执行程序实例句柄。若返回值小于32,则表示出现错误。

    1.8K30

    【专业技术】Win32 SDK编程:我们如何输出文本

    使用Win32编程,我们常常需要输出文本到窗口上,Windows所有的文本字符或者图形输出都是通过图形设备接口(GDI)进行,Windows三大组件之一GDI32.dll封装了所有的文本图像输出函数...不错,这个确实是可以输出文本,但是这个智能用于console下文本输出,不能用于直接在窗口上面。...通过WM_PAINT绘制文本会在窗口有更新自动调用,因此不用担心什么时候需要重绘问题,Windows会在以下情况下受到WM_PAINT消息: 用户移动一个窗口,导致原来被盖住部分窗口显示出来...= BeginPaint(hWnd, &ps); //使用BeginPaint函数返回句柄 TextOut(hDC,50, 50, TEXT("Hello, World!")...消息通过BeginPaint函数获取设备上下文画出来文本依然存在。

    2K50

    关于GetDC与GetWindowDC

    对于通用设备环境,GetDc函数每次获取一个设备环境都会用默认属性对它进行初始化。该函数获得私有设备环境会与它们最后一次设置保持一致。...设备环境不再需要,应该调用ReleaseDC函数将其释放。    GetWindowDC函数:返回hWnd参数所指定窗口设备环境。...不再需要该设备环境,需要调用ReleaseDC函数释放设备环境。...注意,该函数只获得通用设备环境,该设备环境任何属性改变都不会反映到窗口私有或者类设备环境中(如果窗口有的话) ReleaseDC函数 函数功能:函数释放设备上下文环境(DC)供其他应用程序使用。...函数原型:int ReleaseDC(HWND hWnd, HDC hdc); 参数: hWnd:指向要释放设备上下文环境所在窗口句柄。 hDC:指向要释放设备上下文环境句柄。

    1.9K60

    【CC++】回调函数详解&注册窗口类&LRESULT & CALLBACK详解以及游戏中应用

    style 用来指定窗口样式,具体可以查看这篇文章 Class Styles 了解,这里使用 CS_HREDRAW | CS_VREDRAW 组合样式,代表窗口改变大小时进行重绘操作。...); 函数接收一个窗口指针,如果成功会返回一个窗口句柄,如果失败则会返回0。...一般在使用中 SendMessage 会导致线程堵塞,所以在处理耗时任务不推荐使用,会导致界面假死,常用场景是一些同步通知且处理迅速场景。...PM_NOYIELD,该值使系统不释放等待调用程序空闲线程。可以前两个值组合使用窗口绘制消息 窗口第一次显示时候,客户区必须被绘制。...如果你想直接关闭窗口不显示任何提示信息,你只要简单调用 DestoryWindows 即可。 一个窗口销毁之后,会收到 WM_DESTORY 消息。

    1.6K21

    浅谈window桌面GUI技术及图像渲染性能测试实践

    Win32程序 使用 Win32 API 来创建程序成为Win32程序。 提供 Win32 APIdll被加载到应用程序进程中,应用程序通过这些API来创建线程、窗口控件。...Win32程序中,所有窗口控件都是一个窗口实例,都拥有一个窗口句柄,窗口对象属于内核对象,由Windows子系统来维护。...WPF程序 WPF控件不再是通过Win32 API来创建窗口使用Win32 API并不能查找操作WPF控件 WPF所有控件动画都是使用DirectX 绘制 WPF控件不直接支持MSAA,而是通过...: 显卡,不同显卡输出文字渐变色时候有细微差别,所以不同机器上显示控件输出图片通常不完全相同,特别是控件上有文字时候。...DPI设置,将机器DPI设置为120%,100x100大小控件将显示为120x120像素 当在远程桌面上运行测试,远程连接选项“字体平滑”会影响控件显示输出图片 大屏幕可视化WPF应用 由于大屏幕分辨率

    3.8K30

    【二】Windows API 零门槛编程指南——CreateWindow 窗口创建 “万字长篇专业术语全解”

    窗口处理指针:为指向窗体过程函数,为指针,使用 WndProc 处理应用程序在发生事件从 Windows 接收消息,以下将会讲解 WndProc cbClsExtra 窗口类结构后附加字节数...必须更新其显示WM_PAINT窗口一部分时,应用程序将接收消息。 当用户在窗口前面移动窗口,然后再次将其移开,可能会发生此事件。 您应用程序不知道这些事件何时发生。...hdc上下文句柄 x,y:对齐字符串x,y坐标 lpString:字符串指针,指向字符串 c:字符串长度 —————————————————————————————————— HDC 引用文档解释:...HDC代码中是设备上下文句柄,这是 Windows 用于使应用程序与图形子系统通信数据结构。...因此,如果hWnd为NULL,则将同时处理窗口消息线程消息。”

    1K20

    【Win32】初识Win32编程

    使用找到窗口类信息,创建窗口返回。 在系统窗口类中查找,如果找到创建窗口返回,否则创建窗口失败。...窗口句柄 消息ID 消息两个参数(两个附带信息) 消息产生时间 消息产生鼠标位置 消息作用 系统通知窗口工作,就采用消息方式(DispatchMessage)派发给(调用)窗口窗口处理函数...LPARAM lParam;//消息参数 ); 系统通知窗口,(DispatchMessage)会调用窗口处理函数,同时将消息ID消息参数传递给窗口处理函数。...---- 绘图编程 绘图基础 绘图设备(上下文/描述表)DC(Device Context)绘图上下文/绘图描述表 HDC - DC句柄,表示绘图设备,绘图设备句柄。...对话框原理 对话框分类 模式对话框-当前对话框显示,会禁止本进程其它窗口用户交互操作。 无模式对话框-在对话框显示后,本进程其它窗口仍然可以用户进行操作。

    2.1K110

    Windows程序设计学习笔记(四)自绘控件与贴图实现

    HWND hwndItem; //控件句柄 HDC hDC; //绘制控件设备上下文句柄 RECT rcItem; //控件项矩形范围 DWORD itemData;...4)使用BitBlt贴图 函数BitBlt,该函数原型如下: BOOL BitBlt( HDC hdcDest, // 目的控件设备上下文句柄 int nXDest, // int...nYDest, // 这两个参数表示需要贴在目的设备对应矩形中哪个位置,分别是客户坐标的横坐标纵坐标 int nWidth, int nHeight, //图片大小宽度 HDC...// 贴图方式,它规定了原图片颜色如何与目标控件颜色组合已形成最终颜色 ); 对于第二步操作并不是必要,在贴图我们可以使用同一个句柄作为原目的句柄,但是当我们需要贴图片过多,使用同一个句柄会造成客户区闪烁..., NULL);//在创建ListBox定义为自画风格,同时WS_CLIPSIBLINGS风格指明在重绘子窗口不重绘整个客户区 在WM_DRAWITEM消息中编写重绘代码: LPDRAWITEMSTRUCT

    1.4K20

    AdjustWindowRect 与 SetWindowPos

    函数返回,该结构容纳所需客户区域窗口左上角右下角坐标。     dwStyle:指定将被计算尺寸窗口窗口风格。     bMenu:指示窗口是否有菜单。     ...适用于客户区非客户区(包括标题栏滚动条)任何由于窗回移动露出窗口所有部分。如果设置了这个标志,应用程序必须明确地使窗口无效并区重画窗口任何部分窗口需要重画部分。     ...一个窗口被置为最顶层窗口,属于它所有窗口均为最顶层窗口所有者z序并不改变。     ...如果HWND_TOPMOSTHWND_NOTOPMOST标志均未指定,即应用程序要求窗口在激活同时改变其在Z序中位置,在参数hWndinsertAfter中指定值只有在下列条件中才使用:     ...一个最顶层窗口被置为非最顶级,则它所有者窗口所属者窗口均为非最顶层窗口。     一个非最顶端窗口可以拥有一个最顶端窗口,但反之则不可以。

    1.8K70

    数字时钟

    本期文章就介绍下数字时钟制作过程,介绍内容还是以未加缓存动画制作过程为主 后台回复关键字【数字时钟】获取更新之后源程序源代码,还有我参考时钟程序 01 win32框架 首先呢,我还是用的上周发送...,我已经讲述了如何利用windowsAPI对窗口进行移动追加菜单并对菜单功能进行实现,以及定时器开启使用。...,这需要数字时钟随客户区大小改变改变 HDC hdc = GetDC(hwnd); RECT rt; GetClientRect(hwnd, &rt); //获取客户区大小...,日期,,分,秒在不同圆周内 其中minSize控制着data_x,使得数字时钟随客户区大小改变改变 确定时钟最小半径 //确定时钟最小半径 if (rt.bottom > rt.right...每个月份度数,至于后面为什么又要加上360/12,也就是30,是因为月份是从1开始currentTime.wMonth = 1;,初始旋转角度initOrg应该为0,也就是不旋转。

    1.7K30
    领券