2012-02-15 125 views
0

我使用eclipse CDT来编写我的C++程序。但eclipse和GCC编译器无法识别glShaderSource()。我做了以下“装入”头:OpenGL Archlinux GLext无法识别。 (编辑:GLEW不起作用)

#include <GL/glew.h> 
#include "Shader.h" 

这是代码,它产生的错误:

void Shader::setShaders(const char* vsFile, const char* fsFile) { 
    char *vs, *fs; 

    v = glCreateShader(GL_VERTEX_SHADER); 
    f = glCreateShader(GL_FRAGMENT_SHADER); 

    vs = textFileRead(vsFile); 
    fs = textFileRead(fsFile); 

    const char * vv = vs; 
    const char * ff = fs; 

    glShaderSource(v, 1, &vv, NULL); 
    glShaderSource(f, 1, &ff, NULL); 

    free(vs); 
    free(fs); 

    glCompileShader(v); 
    glCompileShader(f); 

    p = glCreateProgram(); 

    glAttachShader(p, v); 
    glAttachShader(p, f); 

    glLinkProgram(p); 
    glUseProgram(p); 
} 

每个GL-功能无法找到。对于实例给出了这样的错误:

Function 'glCreateShader' could not be resolved 

Eclipse中说,该glext头可以被认可,我甚至可以看看它。其他GL函数的工作(1.0函数)。

[老:] 我已经通过

sudo pacman -S glext 

安装GLext然后安装包gtkglext,这是唯一的选择。

我真的没有计划要做什么。也没有额外的libGLEXT.so或类似的东西,我只有libGL,libGLU和其他。

回答

0

我推荐GLEW用于扩展加载。

+0

不,这不是我想要做的。我实际上尝试了GLEW,但是它在头文件中给出了很大的错误...... – matheus23 2012-02-15 17:21:41

2

你的问题是,扩展函数不是通过OpenGL API库通过常规导出,而是通过扩展机制公开的。加载扩展使用功能xxxGetProcAddress完成,其中xxx是平台特定的。由于加载扩展是乏味的,但其代码可以从OpenGL规范自动生成,所以GLEW项目就是这样做的。

GLEW(http://glew.sf.net)是一个扩展加载器/包装库,为您完成繁琐的任务。还有其他类似的库,但GLEW是迄今为止最好的维护。

+0

似乎很有趣......但是如果我想用GLEW编译该项目,他会给我很多typedef错误,比如“错误:声明与»typedef void(* PFNGLFRAG​​MENTLIGHTFVSGIXPROC)(GLenum,GLenum,GLfloat *)冲突»“ – matheus23 2012-02-15 17:34:18

+1

您是否阅读过GLEW的文档?它明确指出,使用GLEW时,您不得使用标准的OpenGL标头。只使用GLEW标头。 – datenwolf 2012-02-15 19:14:21

+0

okey,现在我做到了,但是我的错误与gl_ext头文件一样... – matheus23 2012-02-15 20:43:19

0

我对GL扩展函数有类似的问题。 我设法通过下载GLEW源代码并静态链接到我的项目来解决它。 然而这很烦人,所以我在论坛中搜索得更深,发现了这个解决方案。 在linux上,你只需要定义GL_GLEXT_PROTOTYPES。 此解决方案不适用于Windows!与往常一样,它在Windows上“更容易”,因此需要与glew或glext配置和链接进行对抗。

对我来说,它工作时,我把它添加到QtCreator的项目选项。每个IDE应该有一个在项目/构建选项中定义的位置。 我已将此添加到列表: -DGL_GLEXT_PROTOTYPES

我的#include,但我不知道我需要它:)反正我没有明确链接到任何其他的库,但GL和GLU。