- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我认为这是不可能的,但我在我的软件中看到了它。我已经构建了一个包装器对象来管理我的缓冲区对象(我正在使用共享上下文,所以我不能使用 VAO),并且在我开始使用 IBO(glDrawElements(),我' m 使用纯 OpenGL 3+ 环境)。
这是为我的对象 (Sy_GLObject) 添加缓冲区的代码:
QList< uint > Sy_GLObject::addBuffers( uint numBuffers, GLenum target,
GLenum numericType, GLenum usage )
{
uint* adds = new uint[numBuffers];
glGenBuffers( numBuffers, adds );
QList< uint > l;
for ( uint i = 0; i < numBuffers; ++i ) {
Buffer buffer( target, adds[i], 0, numericType, usage );
buffers_ << buffer;
l << i;
}
delete[] adds;
Sy_GL::checkError();
return l;
}
并且此函数返回的缓冲区名称很好,直到它被此代码调用:
void Sy_BVH::initialiseGLObject()
{
Sy_application::getMainWindow()->getActiveProject(
)->getModelContext()->makeCurrent();
GLuint vLoc = Sy_settings::get( "shader/flat/vertexLoc" ).toUInt();
drawBBs_ = Sy_GLObject::createObject();
// Add vertex array.
drawBBs_->addBuffers( 1 );
drawBBs_->buffers()[0].setVertexPointer( vLoc );
// Add indices array.
drawBBs_->addBuffers( 1, GL_ELEMENT_ARRAY_BUFFER, GL_UNSIGNED_INT );
}
出于某种原因,索引数组和顶点数组名称都相同! setVertexPointer() 实际上并不调用 glVertexAttribPointer(),它只是将它的参数存储在 POD 类中 - 因此在两个 addBuffers() 命令之间不会进行 OpenGL 调用。顶点调用是“正确的”,因为它比之前的 glGenBuffers() 结果高一个,但从 addBuffers() 的角度来看,调用之间应该没有区别。
在某些情况下,glGenBuffers 可能会返回已在使用的缓冲区的名称!?
谢谢!
更新
为了确保线程不是一个因素,我在 glGenBuffers() block 周围包装了一个静态互斥量。
QMutexLocker locker( &mutex_ ); // mutex_ is a QMutex static class member.
uint* adds = new uint[numBuffers];
glGenBuffers( numBuffers, adds );
locker.unlock();
但是完全没有效果...
最佳答案
感谢 OpenGL.org 论坛上的 Ilian Dinev 指出了这个愚蠢的错误。我在堆栈上创建了我的 Buffer 对象,并方便地调用了它的析构函数 glDeleteBuffers()。很棒的设计。
关于c++ - glGenBuffers 返回非唯一名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5836611/
我目前正在将一个数组传递给一个函数,然后尝试将 glGenBuffers 与传递给该函数的数组一起使用。我想不出让 glGenBuffers 与我传递的数组一起工作的方法。我对指针的基础知识有很好的掌
事情是这样的:如果我将代码保留为 glGenBuffers(1, vertexBuffers),代码就会编译并运行。但是,我认为它应该是 2,因为 vertexBuffers 的大小为 2。 我错过了
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我正在使用 GLFW 和 GLEW。但是在我的对象初始化期间 glGenBuffers 抛出异常 void Character::init2D(glm::vec3 top, glm::vec3 bot
我认为这是不可能的,但我在我的软件中看到了它。我已经构建了一个包装器对象来管理我的缓冲区对象(我正在使用共享上下文,所以我不能使用 VAO),并且在我开始使用 IBO(glDrawElements()
glGenBuffers(1, &bufferID) 将 ID 分配到 bufferID 失败的原因是什么? #define GL_GLEXT_PROTOTYPES 1 #include #incl
当我使用 glGenBuffers 创建一个带有指向它的指针的 VBO 时,我(认为)正在分配内存。对 glGenBuffers 的后续调用应该返回不同的指针,但是之前分配的内存呢?在 Nehe 示例
我正在使用 Windows,我注意到很多函数都是灰色的,因为我猜想 #ifdef GL_GLEXT_PROTOTYPES 没有定义。其中之一是 VBO 扩展。我应该只定义 GL_GLEXT_PROTO
我一直在实现一个基于本教程的小型 opengl 应用程序: http://openglbook.com/the-book/chapter-4-entering-the-third-dimension/
我检查了文档,它说 OpenGL 版本必须至少为 1.5 才能使 glGenBuffers() 工作。用户的版本是1.5,但是函数调用会导致崩溃。这是文档中的错误,还是用户的驱动程序问题? 我正在为
我似乎找不到 glGenBuffer Qt5 中的函数,我的包含列表看起来像 #include #include #include #include #include #include #
好吧,我从 OpenGL 开始,通过阅读有关 glBindBuffer 的文档,我有点困惑。 "glBindBuffer binds a buffer object to the specified
鉴于我们使用的是 OpenGL 4.5 或支持 GL_ARB_direct_state_access扩展,我们有新功能 glCreateBuffers . 此函数与 glGenBuffers 具有相同
我在其他地方看到过与我类似的问题,但没有人回答或解决我的问题。 在创建Context之后、调用glfwMakeContextCurrent()之前,我已经正确启动了GLEW 启动后,我尝试使用 glG
所以,我有一个顶点数组和一堆属性(顶点位置、颜色、法线、uvs...)但是有没有办法发送没有属性的数据或每帧生成缓冲区?或者有更好的方法吗? (具体来说,我在做一个批量渲染系统) 最佳答案 分配一次缓
当我使用 opengl 3.3 时,glGenBuffers() 和 glBufferData() 等函数工作得很好,但现在我使用的是 4.3,我想使用这些函数的更新版本,例如 glCreateBuf
当我运行this code时test_rbm.py 位于名为 python-deepnets 的目录中。 我遇到错误。 OpenGL.error.NullFunctionError:尝试调用未定义的函
在关于 OpenGL 3.0+ 的教程中,我们以这种方式创建顶点数组对象和顶点缓冲区对象: GLuint VAO, VBO; glGenVertexArrays(1, &VAO); glGenBuff
我正在使用支持 OpenGL 模式的 Ogre3d 引擎。 我有一个名为 Chunk 的对象,它创建了一个 Ogre::ManualObject。因为 ManualObject 的创建需要一些时间,所
我试图避开 PyOpenGL 的缓慢和高开销的后期绑定(bind)前端,并专门使用原始后端实现... 我遇到的问题是我似乎无法弄清楚前端如何将后端函数 glGenBuffers( n, buffers
我是一名优秀的程序员,十分优秀!