更新的图形卡不会更新opengl32.dll

时间:2019-04-06 22:22:19

标签: windows delphi opengl textures

上周,我一直在尝试在正方形上绘制纹理,但无济于事。正方形绘制但没有纹理。 我正在使用OpenGL,Delphi XE3和Windows10。

问题是glGenerateMipmap函数。 我的旧版opengl没有MipMap函数。 因此,我用较新的(OGL 4.6)替换了卡,该更新现在具有该功能。 但这仍然行不通。

问题是,旧的opengl32.dll尚未更改,并且仍然没有功能。

所以问题是: 程序如何找到MipMap函数? 是否可以通过新功能以某种方式更新opengl32.dll? 还是我的程序需要引用其他一些dll? 还是应该更新winapi.opengl单元?

根据khronos,除非设置了MipMap,否则不会绘制纹理。 https://www.khronos.org/opengl/wiki/Common_Mistakes#Creating_a_complete_texture

我正在尝试通过以下方式链接到DLL中的glGenerateMipmap函数:

  procedure glGenerateMipmap (target: GLenum); stdcall; external OpenGL32; 

运行时将编译但中止。

1 个答案:

答案 0 :(得分:4)

opengl32.dll没变是很好的,因为它不应该变。 opengl32.dll是操作系统组件。 Windows本身,例如在更新过程中,唯一应触及此文件的地方。

Windows提供了一个通用的OpenGL实现,该实现应始终可用(可以求助于软件渲染)。此通用实现仅支持OpenGL 1.1,这就是opengl32.dll仅导出基本OpenGL 1.1 API函数的原因。除此之外,其他OpenGL实现也可以以可安装客户端驱动程序(ICD)的形式插入系统。在为您的GPU安装驱动程序时,GPU供应商通常会安装并注册这样的ICD以使用您的GPU运行OpenGL。通过WGL APIs创建OpenGL上下文时,操作系统将look for and load合适的ICD,并设置您的OpenGL上下文与该ICD对话。在opengl32.dll中导出的OpenGL 1.1 API函数实际上只是转发到ICD。

ICD可以(并且通常确实)提供通过opengl32.dll公开的基本OpenGL 1.1 API的附加功能。要访问此类附加功能,您必须通过wglGetProcAddress()手动加载相应的功能。由于编写所有代码(例如,加载整个OpenGL 4.6核心配置文件API)非常繁琐,因此通常使用uses a library(例如GLEW或glad)来解决这一问题……

对于Delphi,我猜dglOpenGL可能很有趣。