scaleform 4.4.30关于opengl的问题



当我运行到bSuccess=m_pRenderHAL->InitHAL(GL::HALInitParams())时,我写了一个小演示,还没有完成,但已经可以运行了出现总账错误,

GraphicsDeviceImmediate::Initialize(0x502)之前断言:GL错误

是什么原因,某些设置不正确吗?

namespace SF = Scaleform;
using namespace Scaleform;
using namespace Render;
using namespace GFx;
    void initHAL()
    {
        SF::SysAllocMalloc a;
        SF::GFx::System gfxInit(&a);
        SingleThreadCommandQueue* queue = new SingleThreadCommandQueue;
        //m_pCommandQueue = queue;
        Ptr<GL::HAL> m_pRenderHAL = *new GL::HAL(queue);
        //assert(m_pRenderHAL != NULL);
        queue-> pHAL = m_pRenderHAL;
        bool bSuccess;
        //GLenum error = glGetError();
        bSuccess = m_pRenderHAL->InitHAL(GL::HALInitParams());
        assert(bSuccess == true);
    }
    int main()
    {
        initHAL();
    }

在正常操作下,Scaleform不应生成任何OpenGL错误。当您调用GL::HAL::InitHAL时,它会检查是否存在任何现有的总账错误代码。此断言警告您,在使用Scaleform之前,当前上下文中发生了错误。正如您的示例中所回避的那样,您可以在调用InitHAL之前简单地调用glGetError()(然后在渲染每个场景之前调用HAL::BeginScene/HAL::Display)来避免这种断言。

然而,Scaleform也期望在当前线程上正确初始化GL上下文——在您的示例中,没有代码显示这一点。如果它没有被正确初始化,那么对glGetError(Scaleform内部)的调用很可能失败。如果是这种情况,则需要在调用GL::HAL::InitHAL之前设置当前上下文。

我解决了这个问题,这是因为在引擎中,在调用scaleform的InitHAL函数之前会报告一些GL错误,在调试模式下,scaleform会报告这个错误,我只是使用了一些修复方法,在这个方法之前调用glGetError()。

相关内容

  • 没有找到相关文章

最新更新