在哪里可以找到2.0之前的OpenGL版本的文档? 在网站上:opengl.org,他们只列出了新的api。
我的情况是:我真的只有这台笔记本电脑正在开发中,并且意识到有些opengl方法不适用于这台电脑。
到目前为止,我通过针对用户版本的条件进行测试来解决一些问题。那些比2.0(含)更新的人会使用更新的代码,而那些2.0之前版本的人会使用ARB扩展的方法。
示例:
if(m_glVersion>2){//Integer value of your opengl version
glGenBuffers(NUM_BUFFERS, m_vertexArrayBuffers);
glBindBuffer(GL_ARRAY_BUFFER, m_vertexArrayBuffers[POSITION_VB]);
glBufferData(GL_ARRAY_BUFFER, sizeof(model.positions[0]) * model.positions.size(), &model.positions[0], GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, m_vertexArrayBuffers[TEXCOORD_VB]);
glBufferData(GL_ARRAY_BUFFER, sizeof(model.texCoords[0]) * model.texCoords.size(), &model.texCoords[0], GL_STATIC_DRAW);
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, m_vertexArrayBuffers[NORMAL_VB]);
glBufferData(GL_ARRAY_BUFFER, sizeof(model.normals[0]) * model.normals.size(), &model.normals[0], GL_STATIC_DRAW);
glEnableVertexAttribArray(2);
glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, 0, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_vertexArrayBuffers[INDEX_VB]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(model.indices[0]) * model.indices.size(), &model.indices[0], GL_STATIC_DRAW);
}else{
glGenBuffersARB(NUM_BUFFERS, m_vertexArrayBuffers);
glBindBufferARB(GL_ARRAY_BUFFER, m_vertexArrayBuffers[POSITION_VB]);
glBufferDataARB(GL_ARRAY_BUFFER, sizeof(model.positions[0]) * model.positions.size(), &model.positions[0], GL_STATIC_DRAW);
glEnableVertexAttribArrayARB(0);
glVertexAttribPointerARB(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glBindBufferARB(GL_ARRAY_BUFFER, m_vertexArrayBuffers[TEXCOORD_VB]);
glBufferDataARB(GL_ARRAY_BUFFER, sizeof(model.texCoords[0]) * model.texCoords.size(), &model.texCoords[0], GL_STATIC_DRAW);
glEnableVertexAttribArrayARB(1);
glVertexAttribPointerARB(1, 2, GL_FLOAT, GL_FALSE, 0, 0);
glBindBufferARB(GL_ARRAY_BUFFER, m_vertexArrayBuffers[NORMAL_VB]);
glBufferDataARB(GL_ARRAY_BUFFER, sizeof(model.normals[0]) * model.normals.size(), &model.normals[0], GL_STATIC_DRAW);
glEnableVertexAttribArrayARB(2);
glVertexAttribPointerARB(2, 3, GL_FLOAT, GL_FALSE, 0, 0);
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER, m_vertexArrayBuffers[INDEX_VB]);
glBufferDataARB(GL_ELEMENT_ARRAY_BUFFER, sizeof(model.indices[0]) * model.indices.size(), &model.indices[0], GL_STATIC_DRAW);
}
http://www.songho.ca/opengl/gl_vbo.html提供了一些关于网格创建和删除的良好来源,但是没有关于着色器的信息。
获取错误:glCreateProgram,我目前的假设是它不支持2.0以下的版本。 https://www.opengl.org/sdk/docs/man/html/glCreateProgram.xhtml
我找不到此方法的ARB版本。有吗?变通? 感谢。
答案 0 :(得分:0)
在OpenGL-2
下面看https://www.opengl.org/registry/OpenGL-1.2规范:https://www.opengl.org/registry/doc/glspec121_bookmarked.pdf
从来没有HTML在线参考,但大多数Linux发行版都有一个Mesa文档包,其中包含所有OpenGL函数的联机帮助页; OpenGL-2.x是OpenGL-1.x的真正超集,没有任何折旧。
网格创建和删除但是,没有关于着色器的可用。
GLSL着色器支持仅在OpenGL-2中引入;但是它们通常作为扩展提供,但如果您的目标系统不支持OpenGL-2,则根本不可能有可编程硬件;可能注册合并器,但就是这样。