opengl 1.2版api?

时间:2016-03-10 20:45:31

标签: c++ opengl

在哪里可以找到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版本。有吗?变通? 感谢。

1 个答案:

答案 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,则根本不可能有可编程硬件;可能注册合并器,但就是这样。