带GL_CURRENT_COLOR的glGetFloatv不起作用

时间:2012-10-12 21:55:13

标签: c opengl graphics colors

我有一些看起来像这样的代码:

GLfloat c[4];
glGetFloatv(GL_CURRENT_COLOR, c);

我希望在调用c后将当前的RGBA颜色写入数组glGetFloatv。但是,数组中的值根本不会改变(即它在调用glGetFloatv之前和之后都包含相同的垃圾值)。

显然,我要么误解GL_CURRENT_COLOR的含义(获取之前通过调用glColor4f设置的颜色)或做错了什么......

P.S .: 此外,在调用glColor4f之前可能会调用此过程,但在这种情况下,我认为它应该返回(1.0, 1.0, 1.0, 1.0),对吗?

修改:尝试获取颜色后调用glGetError 0

1 个答案:

答案 0 :(得分:0)

在这里工作得很好:

#include <GL/glut.h>
#include <iostream>
using namespace std;

void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT);

    GLfloat color[4];

    glGetFloatv(GL_CURRENT_COLOR, color);
    cout << "Default color: ";
    for( size_t i = 0; i < 4; i++ )
        cout << color[i] << " ";
    cout << endl;

    glColor3ub( 255,0,0 );
    glGetFloatv(GL_CURRENT_COLOR, color);
    cout << "Should be red: ";
    for( size_t i = 0; i < 4; i++ )
        cout << color[i] << " ";
    cout << endl;

    glutSwapBuffers();
}

int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);

    glutInitWindowSize(200,200);
    glutCreateWindow("Color");

    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
}

输出:

Default color: 1 1 1 1
Should be red: 1 0 0 1

  

P.S。:另外,在调用glColor4f之前可能会调用此过程,但是在这种情况下我假设它应该返回(1.0,1.0,1.0,1.0),对吗?

"The initial value for the current color is (1, 1, 1, 1)."