glGetIntegerv返回垃圾值

Qua*_*fan 4 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;
}
Run Code Online (Sandbox Code Playgroud)
  1. 该程序的输出是,-858993460.为什么?它应该返回支持的扩展数.

  2. 如果我删除freeglut.h头文件,该程序不会运行并抛出一条错误消息,

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

但是,glGetIntegerv在里面glew.h.为什么删除freeglut.h会导致未解决的外部错误?

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

Qua*_*fan 10

@mario和@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;
}
Run Code Online (Sandbox Code Playgroud)

  • 无论您使用什么版本,都必须初始化OpenGL.如果没有有效的OpenGL上下文,您不能只调用随机OpenGL函数; 它不起作用. (3认同)