为什么找不到我的着色器属性?
Why can't I find my shader attributes?
我正在创建一个简单的opengl程序。编译并链接着色器程序后,我尝试使用glGetAttribLocation()
检索输入属性,但它返回 -1。
我像这样编译和链接我的程序:
GLuint vsID = glCreateShader(GL_VERTEX_SHADER);
GLuint fsID = glCreateShader(GL_FRAGMENT_SHADER);
char vsSource[] = "#version 330 coren
in vec4 position;
void main(void)
{
gl_Position = position;
}";
char fsSource[] = "#version 330n
out vec4 color;
void main(void)
{
color = vec4(1.0, 0.0, 0.0, 1.0);
}";
const char *p_vsSrc = &vsSource[0];
const char *p_fsSrc = &fsSource[0];
glShaderSource(vsID, 1, &p_vsSrc, nullptr);
glShaderSource(fsID, 1, &p_fsSrc, nullptr);
glCompileShader(vsID);
glCompileShader(fsID);
//Check shader for errors
GLint vsCompiled = GL_FALSE;
GLint fsCompiled = GL_FALSE;
glGetShaderiv(vsID, GL_COMPILE_STATUS, &vsCompiled);
glGetShaderiv(fsID, GL_COMPILE_STATUS, &fsCompiled);
if (vsCompiled != GL_TRUE)
{
//Error...
}
if (fsCompiled != GL_TRUE)
{
//Error...
}
GLuint shaderProgram = glCreateProgram();
glAttachShader(shaderProgram, vsID);
glAttachShader(shaderProgram, fsID);
glLinkProgram(shaderProgram);
这编译和链接很好。此外,我在代码中对glGetError()
的任何调用都返回 0。
但是我无法检索position
的位置:
GLuint vPosition = glGetAttribLocation(shaderProgram, "position");
//position == -1
这是为什么呢?
您必须验证着色器程序是否已正确链接,因为glGetAttribLocation
查询链接程序的属性变量的位置。属性(或程序输入(是程序资源,其位置在链接程序时确定:
glLinkProgram( shaderProgram );
GLint status = GL_TRUE;
glGetProgramiv( shaderProgram, GL_LINK_STATUS, &status );
if ( status == GL_FALSE )
{
GLint logLen;
glGetProgramiv( shaderProgram, GL_INFO_LOG_LENGTH, &logLen );
std::vector< char >log( logLen );
GLsizei written;
glGetProgramInfoLog( shaderProgram, logLen, &written, log.data() );
std::cout << "link error:" << std::endl << log.data() << std::endl;
.....
}
相关文章:
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 找不到QtResource文件中的文件
- VC++本机单元测试,找不到调试符号
- RegGetValue在当前用户下找不到名称
- 带有 -stdlib=libc++ 的 clang++ 9.0.1 找不到<optional>
- c++找不到具有相同哈希的无序集合元素
- 找不到以下加速库:boost_fiber
- 找不到 FLTK(缺少:FLTK_INCLUDE_DIR)
- 设置 Visual Studio for MPI: 找不到标识符错误
- "assimp/config.h"找不到,但它在文件夹中
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- C++系统找不到指定的文件错误
- 为什么找不到我的着色器属性?
- 我刚刚安装了Visual Studio,遇到了一些错误,特别是WindowsSDKDir属性未定义.可能找不到某些生成工
- 在Haxe NME中找不到CPP目标的RTTI属性
- QML 和C++属性 - 引用错误:找不到变量