上周我一直试图在广场上画一个纹理,但无济于事。方形绘制但没有纹理。我正在使用OpenGL,Delphi XE3和Windows 10。
问题是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;
哪个会编译但在运行时会中止。
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可能很有趣。