glGetIntegerv返回垃圾值

时间:2011-07-06 09:28:44

标签: c++ opengl

#include<iostream>
#include"Glew\glew.h"
#include"freeGlut\freeglut.h"
using namespace std;

int main(int argc, char* argv[])
{
    GLint ExtensionCount;
    glGetIntegerv(GL_NUM_EXTENSIONS, &ExtensionCount);
    cout << ExtensionCount << endl;

    return 0;
}
  1. 此程序的输出为-858993460。为什么?它应该返回支持的扩展数。

  2. 如果删除freeglut.h头文件,程序将无法运行并抛出错误消息,

  3. error LNK2019: unresolved external symbol __imp__glGetIntegerv@8 referenced in function _main

    但是,glGetIntegerv位于glew.h内。为什么删除freeglut.h会导致无法解决的外部错误?

    编辑我支持OpenGL 3.3。使用Radeon 4670和催化剂11.6。

5 个答案:

答案 0 :(得分:10)

@mario&amp; @Banthar是的,谢谢。我必须首先创建一个上下文以使用任何Opengl功能。(是的,即使对于默认使用windows的Opengl 1.1也是如此。)

glGetIntegerv没有返回垃圾。 glGetIntegerv返回一个好的值,或者根本不触及指向的地址。您看到垃圾的原因是因为该变量未初始化。这似乎是一个迂腐的评论,但实际上重要的是要知道glGetIntegerv如果失败则不接触变量。谢谢@Damon

这裸骨很好。

int main(int argc, char* argv[])
{
    glutInit(&argc, argv);

    glutInitContextVersion(3,3);
    glutInitContextProfile(GLUT_FORWARD_COMPATIBLE);
    glutInitContextProfile(GLUT_CORE_PROFILE);

    glutCreateWindow("Test");

    GLint ExtensionCount;
    glGetIntegerv(GL_NUM_EXTENSIONS, &ExtensionCount);
    cout << ExtensionCount << endl;

    return 0;
}

答案 1 :(得分:2)

你确定你有opengl 3.0吗?在OpenGL 3.0中添加了AFAIK,GL_NUM_EXTENSIONS。

答案 2 :(得分:2)

我猜你的渲染上下文使用的是3.0之前的OpenGL版本(从我读过的GL_NUM_EXTENSIONS开始在OpenGL 3.0中引入;只是因为你的卡支持它并不意味着你实际上在使用它)。您可以检索字符串GL_EXTENSIONS,然后自己拆分/计算元素。但是,我认为并不是所有地方都可以使用(2.0 +?)。

你想做什么(除了返回扩展数量)?

答案 3 :(得分:0)

也许您的图书馆标题需要包含<GL/gl.h>

答案 4 :(得分:0)

在我的Windows SDK(7.1)中,所包含的GL/GL.h定义了符号GL_VERSION_1_1。我怀疑这个版本与glGetIntegervGL_MAJOR_VERSIONGL_MINOR_VERSION等参数使用GL_NUM_EXTENSIONS非常相关。

实际上,GL/GL.h中没有定义这些内容,例如GL_VERSIONGL_EXTENSIONS。但是当包括GL/glew.h时,所有这些常量都可用。

对于GL_VERSION_1_1,三个常量GL_MAJOR_VERSIONGL_MINOR_VERSIONGL_NUM_EXTENSIONS都不是有效的枚举值,实际上如果在尝试使用其中一个后调用glGetError他们使用glGetIntegerv时会收到错误0x500(十进制为1280),这是GL_INVALID_ENUM错误。

相关问题