实际上在驱动程序“支持”时使用GL_LINE_WIDTH

时间:2017-11-15 00:02:19

标签: c++11 opengl-3

我知道驱动程序不需要支持可变行宽,查询驱动程序支持的方式显示为this answer

GLfloat lineWidthRange[2] = {0.0f, 0.0f};
glGetFloatv(GL_ALIASED_LINE_WIDTH_RANGE, lineWidthRange);
std::cout << "line width range:  " << lineWidthRange[0] << ", " << lineWidthRange[1] << std::endl;

查询当前行宽:

GLfloat currLineWidth[1] = {0.0f};
glGetFloatv(GL_LINE_WIDTH, currLineWidth);
std::cout << "line width before: " << currLineWidth[0] << std::endl;

现在,它应该并且确实报告1当前行宽。我只是为了确保在实际设置之前我没有读回值,所以请设置它并回读:

glLineWidth(8.0f);
{
    // local testing, #include <thread> and <chrono>
    std::this_thread::sleep_for(std::chrono::milliseconds(2000));
}
glGetFloatv(GL_LINE_WIDTH, currLineWidth);
std::cout << "line width after:  " << currLineWidth[0] << std::endl;

// since this is in my draw loop I'm just resetting again, removing
// doesn't change the impact
glLineWidth(1.0f);

我的应用程序没有设置glEnable(GL_LINE_SMOOTH)或任何东西,但似乎线宽从未实际改变。我很困惑,因为我得到以下打印输出:

line width range:  1, 10
line width before: 1
line width after:  1

如果line width range报告的范围为[1, 10],那么glLineWidth(8.0f)之类的内容就像我需要实际使用它一样......正确?

我不认为这是相关的,但我使用的是OpenGL 3.3核心配置文件,底层glDrawElements(GL_LINES, count, GL_UNSIGNED_INT, offset)与着色器程序一起使用。我省略了它,因为它为问题增加了很多代码。

更新:嗯。似乎驱动程序可能已在内部禁用它或其他东西。

glGetFloatv(GL_SMOOTH_LINE_WIDTH_RANGE, lineWidthRange);
std::cout << "smooth line width range:   " << lineWidthRange[0] << ", " << lineWidthRange[1] << std::endl;

在此框中,它会返回[1, 1],所以即使我glDisable(GL_LINE_SMOOTH),我似乎仍然无法使用它。

1 个答案:

答案 0 :(得分:1)

我认为你需要使用兼容性配置文件来使用线宽。 核心不支持它。如果使用核心,你可以做自己的粗线 通过使用屏幕对齐的四边形系统。

希望这会有所帮助。