欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > Qt之OpenGL中的shader layout

Qt之OpenGL中的shader layout

2025/4/13 10:29:03 来源:https://blog.csdn.net/suntingsheng123/article/details/147160799  浏览:    关键词:Qt之OpenGL中的shader layout

layout一共有两种绑定方法。一种是把设定好的值绑定到shader中、另一种是shader中的layout绑定到代码中。

第一种方法(注意:要在link之前绑定同时要把shader代码中的layout设置删掉)

void sunOpengl::initializeGL()
{this->initializeOpenGLFunctions();shaderProgram.addShaderFromSourceFile(QOpenGLShader::Vertex,":/shades/shapes.vert");shaderProgram.addShaderFromSourceFile(QOpenGLShader::Fragment,":/shades/shapes.frag");int posLocation=4;shaderProgram.bindAttributeLocation("aPos",posLocation);bool success=shaderProgram.link();if(!success){qDebug()<<shaderProgram.log();}glGenVertexArrays(1,&VAO);glGenBuffers(1,&VBO);glBindVertexArray(VAO);glBindBuffer(GL_ARRAY_BUFFER,VBO);//将数据传入显存glBufferData(GL_ARRAY_BUFFER,sizeof(vertices),vertices,GL_STATIC_DRAW);//显卡解析参数glVertexAttribPointer(posLocation,3,GL_FLOAT,GL_FALSE,3*sizeof(float),(GLvoid*)0);//开始VOA属性glEnableVertexAttribArray(posLocation);//EBOglGenBuffers(1,&EBO);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,EBO);glBufferData(GL_ELEMENT_ARRAY_BUFFER,sizeof(indices),indices,GL_STATIC_DRAW);glBindVertexArray(0);glBindBuffer(GL_ARRAY_BUFFER,0);
}

 第二种方法(获取shader源码中layout的值)

void sunOpengl::initializeGL()
{this->initializeOpenGLFunctions();shaderProgram.addShaderFromSourceFile(QOpenGLShader::Vertex,":/shades/shapes.vert");shaderProgram.addShaderFromSourceFile(QOpenGLShader::Fragment,":/shades/shapes.frag");bool success=shaderProgram.link();if(!success){qDebug()<<shaderProgram.log();}glGenVertexArrays(1,&VAO);glGenBuffers(1,&VBO);glBindVertexArray(VAO);glBindBuffer(GL_ARRAY_BUFFER,VBO);//将数据传入显存int posLocation=shaderProgram.attributeLocation("aPos");//获取shder代码里面layout参数shaderProgram.bindAttributeLocation("aPos",posLocation);glBufferData(GL_ARRAY_BUFFER,sizeof(vertices),vertices,GL_STATIC_DRAW);//显卡解析参数glVertexAttribPointer(posLocation,3,GL_FLOAT,GL_FALSE,3*sizeof(float),(GLvoid*)0);//开始VOA属性glEnableVertexAttribArray(posLocation);//EBOglGenBuffers(1,&EBO);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,EBO);glBufferData(GL_ELEMENT_ARRAY_BUFFER,sizeof(indices),indices,GL_STATIC_DRAW);glBindVertexArray(0);glBindBuffer(GL_ARRAY_BUFFER,0);
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词