gpt4 book ai didi

c++ - QT 和 OpenCascade 内存不足

转载 作者:行者123 更新时间:2023-11-28 04:31:09 28 4
gpt4 key购买 nike

我开始在 QT 中使用 OpenCascade 进行编码,发现了这个有趣的基本项目: https://github.com/eryar/occQt/

我已经编译了这个程序:

QT += core gui opengl

当我执行它时,出现以下错误:

TKOpenGl | Type: Performance | ID: 0 | Severity: Low | Message: VBO creation for Primitive Array has failed for 169 vertices. Out of memory?

我也在项目网站上发布了这个问题,但我不确定那个地方的事件。这就是为什么我问你是否有任何解决方法的想法。

我的测试平台:

  • 配备 8GB 内存的 Intel i7
  • Windows 10
  • OpenCascade 6.9.1 vc12-64
  • QT 5.5.1

最佳答案

我没有尝试编译程序,但快速查看后可能是 GPU 驱动程序 问题,出于某种原因 glGenBuffer 没有生成缓冲区对象这就是我的推断>>在occt6.9.1中,文件OpenGl_PrimitiveArray.cxx,函数:

Standard_Boolean OpenGl_PrimitiveArray::initNormalVbo (const Handle(OpenGl_Context)& theCtx) const 

有:

  if (!myVboAttribs->init (theCtx, 0, myAttribs->NbElements, myAttribs->Data(), GL_NONE, myAttribs->Stride))
{
TCollection_ExtendedString aMsg;
aMsg += "VBO creation for Primitive Array has failed for ";
aMsg += myAttribs->NbElements;
aMsg += " vertices. Out of memory?";
theCtx->PushMessage (GL_DEBUG_SOURCE_APPLICATION_ARB, GL_DEBUG_TYPE_PERFORMANCE_ARB, 0, GL_DEBUG_SEVERITY_LOW_ARB, aMsg);

clearMemoryGL (theCtx);
return Standard_False;
}

这意味着,在文件 OpenGl_VertexBuffer.cxx 中的函数:

bool OpenGl_VertexBuffer::init (const Handle(OpenGl_Context)& theGlCtx,
const GLuint theComponentsNb,
const GLsizei theElemsNb,
const void* theData,
const GLenum theDataType,
const GLsizei theStride)
{
if (!Create (theGlCtx))
{
return false;
}

Bind (theGlCtx);
myDataType = theDataType;
myComponentsNb = theComponentsNb;
myElemsNb = theElemsNb;
theGlCtx->core15fwd->glBufferData (GetTarget(), GLsizeiptr(myElemsNb) * theStride, theData, GL_STATIC_DRAW);
bool isDone = (glGetError() == GL_NO_ERROR); // GL_OUT_OF_MEMORY
Unbind (theGlCtx);
return isDone;
}

返回错误,

因为

bool OpenGl_VertexBuffer::Create (const Handle(OpenGl_Context)& theGlCtx)
{
if (myBufferId == NO_BUFFER)
{
theGlCtx->core15fwd->glGenBuffers (1, &myBufferId);
}
return myBufferId != NO_BUFFER;
}

返回 false ,这意味着 myBufferId 仍然等于在 OpenGl_VertexBuffer 的构造函数中设置的 NO_BUFFER这意味着

theGlCtx->core15fwd->glGenBuffers (1, &myBufferId);

没有改变任何东西。 OpenGl_Context.hxx 行中的注释:583 说

  OpenGl_GlCore15Fwd*  core15fwd;  //!< OpenGL 1.5 without deprecated entry points

OpenGl_GlCore15Fwd::glGenBuffers 函数只是调用文件 OpenGl_GlFunctions.hxx 中的 OpenGL 函数

  inline void glGenBuffers (GLsizei n, GLuint *buffers)
{
::glGenBuffers (n, buffers);
}

可能推导有误,但我没有深挖

关于c++ - QT 和 OpenCascade 内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52852269/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com