Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 带有Dev-C++;SDL呢?_Opengl_Sdl_Shader_Dev C++ - Fatal编程技术网

Opengl 带有Dev-C++;SDL呢?

Opengl 带有Dev-C++;SDL呢?,opengl,sdl,shader,dev-c++,Opengl,Sdl,Shader,Dev C++,我正要用Dev-C++在Windows下重建我的库;但是,我同时添加的着色器功能不受支持,编译器无法找到相关函数(::glCreateShader(),::glCreateProgram()等) 翻阅互联网和Dev-C++文件夹,我发现OpenGL实现(gl.h)只有v1.1版。我发现可以从下载最新的标题。然而,经过仔细研究,我发现gl3.h并没有包含在我的项目中,我应该看看SDL/SDL_opengl.h EDIT:SDL\u opengl.h确实包含gl.h并声明了相关函数的原型。所以问题是

我正要用Dev-C++在Windows下重建我的库;但是,我同时添加的着色器功能不受支持,编译器无法找到相关函数(::glCreateShader(),::glCreateProgram()等)

翻阅互联网和Dev-C++文件夹,我发现OpenGL实现(gl.h)只有v1.1版。我发现可以从下载最新的标题。然而,经过仔细研究,我发现gl3.h并没有包含在我的项目中,我应该看看SDL/SDL_opengl.h

EDIT:SDL\u opengl.h确实包含gl.h并声明了相关函数的原型。所以问题是,为什么我给出编译时错误而不是链接器错误

(我的库只链接到mingw32、libOpenGL32、libSDL、libSDL_Image和libSDL_Mixer,就像在OSX下一样(当然,除了mingw32),我没有任何问题。)


如何在Dev-C++和SDL中使用openglv2.0着色器

您能否在运行时加载函数的地址

typedef GLhandle (APIENTRYP PFNGLCREATESHADERPROC) (GLenum shaderType);
PFNGLCREATESHADERPROC glCreateShader = NULL;
glCreateShader = (PFNGLCREATESHADERPROC)wglGetProcAddress("glCreateShader");

typedef GLhandle (APIENTRYP PFNGLCREATEPROGRAMPROC) ();
PFNGLCREATEPROGRAMPROC glCreateProgram = NULL;
glCreateProgram = (PFNGLCREATEPROGRAMPROC)wglGetProcAddress("glCreateProgram");

h仅适用于OpenGL 1.1(在某些情况下,根据您使用的文件版本和操作系统,最高可达1.3)。对于您另外需要的所有内容,可能是(Linux/Unix)或(Windows)

更新版本的OpenGL中的所有函数必须在运行时链接。因此,为了使用它们,您必须获得正确的函数地址并将其分配给函数指针。要做到这一点,最简单的方法是使用以下内容

手动方式如下所示:

PFNGLCREATESHADERPROC glCreateShader = NULL;
glCreateShader = (PFNGLCREATESHADERPROC) wglGetProcAddress("glCreateShader");
或者对于Linux:

PFNGLCREATESHADERPROC glCreateShader = NULL;
glCreateShader = (PFNGLCREATESHADERPROC) glXGetProcAddress((GLubyte*) "glCreateShader");
如果在包含GLEXT.h之前定义GL_GLEXT_原型,可以省略第一行


EDIT:SDL\u opengl.h看起来像是包含了glext.h的副本(但不是最新的)。因此,如果您使用,上述内容仍然有效。如果要使用单独的glext.h,则必须在包含SDL_opengl.h之前定义NO_SDL_glext。此外,只要没有定义GL_GLEXT_原型,或者您自己编写原型,函数原型就不可用


EDIT2:显然SDL有自己的GetProcAddress函数调用。

你到底为什么要使用Dev-C++?帮自己一个忙,使用一个在过去4年中更新过的IDE。(即使在支持的情况下,这也不是错误和缺乏功能)为什么选择Dev-C++而不是VC++2008 Express?这是一个公平的观点,我不能说我没有看到它的到来。Windows不是我的主要平台,我讨厌清单和6种风格的MSVC运行时。另外,我打算为GP2X开发,它的官方devkit是一个精疲力竭的Dev-C++,所以我认为它很方便。。。是的,不是。IDE的选择是一个品味的问题,但是DevC++不再更新了。他指定的继任者是Code::Blocks()。所以选择这个,或者尝试其他(Eclipse,VC+Express),找到你最喜欢的,但是你不应该再使用DEV C++了。谢谢你的提示,我曾经使用VS,也许我会回到那个。我还没有听说过Eclipse,我肯定会检查一下它,如果它不起作用,我仍然可以使用Code::Blocks。“此外,只要没有定义GL_GLEXT_原型,或者您自己编写原型,函数原型就不可用。”