小编iHa*_*ing的帖子

具有一个成员或仅 typedef 的结构

在编码时,我声明结构或类,因为它们基于现实世界的对象/想法/概念。

但通常这些结构/类只有一个成员。所以我想知道如果我简单地做一个 typedef 是否有什么区别。

然后我不确定这是否正确,因为在我看来 typedef 不是“对象”。

那么我应该这样做:

struct Y { int x; }
Run Code Online (Sandbox Code Playgroud)

要不就:

typedef int Y;
Run Code Online (Sandbox Code Playgroud)

有什么区别吗?我对结构体是对象而 typedef 是其他东西的看法是否正确?

c++ struct typedef

5
推荐指数
1
解决办法
2259
查看次数

为什么没有绑定VAO时glValidateProgram失败?

我在LWJGL / OpenGL 3中验证我的着色器程序时遇到问题。
我阅读了文档,但似乎找不到调用glValidateProgram时需要VAO的原因。

int program = glCreateProgram();
int vertexShader = glCreateShader(...);
int fragmentShader = glCreateShader(...);
// ... vertex and fragment shader loading, compiling, errorchecking ...
glAttachShader(program, vertexShader);
glAttachShader(program, fragmentShader);
glBindAttribLocation(program, 0, "position");
glBindAttribLocation(program, 1, "color");
glLinkProgram(program);
glDetachShader(program, shader);
glDetachShader(program, shader);
glValidateProgram(program);
if (glGetProgrami(program, GL_VALIDATE_STATUS) != GL_TRUE)
    System.exit(-1);
Run Code Online (Sandbox Code Playgroud)

这将退出程序,而不会出现任何错误消息。
GL_LINK_STATUS可以,并且GL.getErrors()也没有要报告的内容。
但是,在glValidateProgram周围创建VAO时,效果很好。
我还可以忽略glGetProgrami返回GL_FALSE并仅运行着色器程序这一事实。

我围绕glValidateProgram()创建VAO的意思是:

int vao = glGenVertexArrays();
glBindVertexArray(vao);
glValidateProgram(program);
if (glGetProgrami(program, GL_VALIDATE_STATUS) != GL_TRUE)
    System.exit(-1);
glDeleteVertexArrays(vao);
Run Code Online (Sandbox Code Playgroud)

当我这样做时,GL_VALIDATE_STATUS为true,我可以画画了。

使用的着色器是简单的直通着色器。
顶点着色器返回位置,片段着色器返回颜色。

那么,为什么我必须绑定VAO,即使我可以在验证后立即将其删除?

java opengl shader lwjgl vao

5
推荐指数
1
解决办法
1183
查看次数

标签 统计

c++ ×1

java ×1

lwjgl ×1

opengl ×1

shader ×1

struct ×1

typedef ×1

vao ×1