#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;
}
此程序的输出为-858993460
。为什么?它应该返回支持的扩展数。
如果删除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。
答案 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
。我怀疑这个版本与glGetIntegerv
,GL_MAJOR_VERSION
或GL_MINOR_VERSION
等参数使用GL_NUM_EXTENSIONS
非常相关。
实际上,GL/GL.h
中没有定义这些内容,例如GL_VERSION
和GL_EXTENSIONS
。但是当包括GL/glew.h
时,所有这些常量都可用。
对于GL_VERSION_1_1
,三个常量GL_MAJOR_VERSION
,GL_MINOR_VERSION
或GL_NUM_EXTENSIONS
都不是有效的枚举值,实际上如果在尝试使用其中一个后调用glGetError他们使用glGetIntegerv
时会收到错误0x500
(十进制为1280
),这是GL_INVALID_ENUM
错误。