- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试在 qt 5.1.1 中使用着色器使用 opengl 渲染编写 map 应用程序。我能够使用 Glew 显示顶点。但我想使用 qopenglfunctions.h 中提供的功能奇怪的是,即使我包含这个文件,我也得到 glGenBuffers was not declared in this scope。当我打开 qopenglfunctions.h 时,它就在那个文件中!有人遇到过这个奇怪的问题吗?代码有点长。但是我添加了一些会引发链接器错误的内容。
initializeGLFunctions();
this->program=program;
glGenVertexArrays(1,&mapVAO); //This is where the linker throws an error
glBindVertexArray(mapVAO);
// Generate 2 VBOs
glGenBuffers(2, mapBuffer);
initMapBoundary();
void GeometryEngine::initMapBoundary()
{
GLfloat mapSize=5.0f;
VertexData boundary[] = {
// Vertex data for face 0
{QVector3D(-mapSize, -mapSize, 1.0), QVector2D(0, 0)}, // v0
{QVector3D( mapSize, -mapSize, 1.0), QVector2D(20.0,0/*0.33, 0.0*/)}, // v1
{QVector3D(-mapSize, mapSize, 1.0), QVector2D(0,20/*0.0, 0.5*/)}, // v2
{QVector3D( mapSize, mapSize, 1.0), QVector2D(20.0,20.0/*0.33, 0.5*/)}, // v3
};
GLushort indices[] = {
0, 1, 2, 3,
};
// Transfer vertex data to VBO 0
glBindBuffer(GL_ARRAY_BUFFER, mapBuffer[0]);
glBufferData(GL_ARRAY_BUFFER, 4 * sizeof(VertexData), boundary, GL_STATIC_DRAW);
// Transfer index data to VBO 1
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mapBuffer[1]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, 4 * sizeof(GLushort), indices, GL_STATIC_DRAW);
// Offset for position
quintptr offset = 0;
// Tell OpenGL programmable pipeline how to locate vertex position data
int vertexLocation = program->attributeLocation("a_position");
program->enableAttributeArray(vertexLocation);
// program->setAttributeBuffer(vertexLocation,GL_FLOAT,offset,3);
glVertexAttribPointer(vertexLocation, 3, GL_FLOAT, GL_FALSE, sizeof(VertexData), (const void *)offset);
// Offset for texture coordinate
offset += sizeof(QVector3D);
// Tell OpenGL programmable pipeline how to locate vertex texture coordinate data
int texcoordLocation = program->attributeLocation("a_texcoord");
program->enableAttributeArray(texcoordLocation);
glVertexAttribPointer(texcoordLocation, 2, GL_FLOAT, GL_FALSE, sizeof(VertexData), (const void *)offset);
//program->setAttributeBuffer(texcoordLocation,GL_FLOAT,offset,2);
}
就像我说的,所有这些在我的 linux 机器上都运行良好,所以我确信代码没有什么问题。我只需要知道如何告诉 qt 构建系统在 Windows (7) 机器上选择正确的 opengl 驱动程序。显卡 Nvidia GT325m
最佳答案
对于 Qt 5,它不会以常规方式为您工作。问题是预编译的 Qt SDK(您可能从他们的网站上获得)使用 GLES 2.0 后端进行默认启用的 GL 渲染。这意味着,您的 glew header 将获得与 qopenglfunction header 中的类似声明相关的各种错误。不幸的是,您将不得不使用 opengl -desktop 命令重建 Qt 源代码,这将为您消除对 ES2.0 的依赖。另一种方法是使用 Qt 4.8 版本。
关于c++ - 在 qopenglfunctions.h 中找不到 glGenBuffers、glBindBuffer 等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19963131/
我目前这样做是为了设置我的 vao: glBindVertexArray(vao); glBindBuffer(GL_ARRAY_BUFFER, vbo); ... glBindBuffer(GL_E
根据NVIDIA's OpenGL 4.5 Update presentation的第23张幻灯片以下说法正确的是: 非 DSA:glGenBuffers + glBindBuffer DSA:glC
我正在阅读 this教程,我在如何使用顶点缓冲区接近尾声,我看到我生成并调用 glBindBuffer 的顶点缓冲区已经我必须第二次绑定(bind): glBindBuffer(GL_ARRAY_BU
我发现我可以使用glBindBuffer(GL_ARRAY_BUFFER, vbo);绑定(bind)顶点缓冲区。这可行,我还可以使用 glBindBuffer(GL_ELEMENT_ARRAY_BU
( Segmentation fault with glBufferData()) 上有一篇类似的帖子,但它没有解决我的问题。 当我在下面调用 glBingBuffer() 时第二个参数为 0 以解除
好吧,我从 OpenGL 开始,通过阅读有关 glBindBuffer 的文档,我有点困惑。 "glBindBuffer binds a buffer object to the specified
我对 VBO 感到困惑, glGenBuffers(1, &positionBufferObject); glBindBuffer(GL_ARRAY_BUFFER, positionBufferObj
我认为glBindBuffer(target, buffer)的作用是将缓冲区的地址存储在目标上,这是一个特殊的地址。 但我找到了glBindBufferBase(target, index, buf
在OpenGL(特别是OpenGL ES 2.0)中,每次绑定(bind)新的VBO时是否都需要调用glVertexAttribPointer? 例如: glBindBuffer(GL_ARRAY_B
我写这个是为了测试如何使用opengl缓冲区绘图,这是初始化的函数: #include "GL/glew.h" #include "GL/glfw.h" int main ( int argc
我是 OpenGL 和图形编程的新手。到目前为止,我一直在阅读一本非常透彻且写得很好的教科书。但是,我在代码中遇到了一个我不太理解的点,我想在我理解这些行之前继续前进。 GLuint abuffer;
这个问题在这里已经有了答案: OpenGL object in C++ RAII class no longer works (2 个答案) 关闭 5 年前。 好吧,我在设置我的 OpenGL 代码
上面有区别吗,因为它们看起来都具有相同的效果,我的假设是un-map buffer方法更适合un-mapping而不是绑定(bind)一个buffer到0来un-map 最佳答案 Is there a
glBindBuffer 等同于 glBindBufferARB 吗? 枚举(如 GL_ARRAY_BUFFER 和 GL_ARRAY_BUFFER_ARB)是否等价?我可以在 glBindBuffe
我读到在 OpenGL 2(尤其是 ES)中优化非透明对象渲染顺序的最佳方法是优先避免上下文更改(绑定(bind)不同的缓冲区、着色器程序等)而不是深度排序。 如果你用一个已经绑定(bind)的缓冲区
我一直在尝试在我的计算机上实现 VBO,但遇到了段错误: Unhandled exception at 0x00000000 in attocube.exe: 0xC0000005: Access v
要在 OpenGL 中创建一个统一的缓冲区对象,为什么我必须同时调用 glBindBuffer 和 glBindBufferRange?根据documentation , Think of glBin
我已经制作了一个顶点缓冲区,在使用 glDrawArrays 时可以正确绘制,但是它们无法加载到 VBO 中。这是代码: FloatBuffer circleBuffer = ByteBuffer.a
我正在尝试在 qt 5.1.1 中使用着色器使用 opengl 渲染编写 map 应用程序。我能够使用 Glew 显示顶点。但我想使用 qopenglfunctions.h 中提供的功能奇怪的是,即使
我有一个初始化我的 VBO/VAO 的方法: glBindBuffer(GL_ARRAY_BUFFER, mVBO_VertexShader); glBufferDat
我是一名优秀的程序员,十分优秀!