scaleform 4.4.30 关于opengl的问题

Posted

技术标签:

【中文标题】scaleform 4.4.30 关于opengl的问题【英文标题】:scaleform 4.4.30 questions about opengl 【发布时间】:2016-02-14 18:00:05 【问题描述】:

我写了一个小demo,还没写完,但是已经可以运行了,当我遇到bSuccess = m_pRenderHAL->InitHAL(GL::HALInitParams());出现GL错误,

断言: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();
    

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于scaleform 4.4.30 关于opengl的问题的主要内容,如果未能解决你的问题,请参考以下文章

链接 Scaleform 以在 Qt Creator 中构建应用程序

用于游戏开发的 Autodesk Scaleform [关闭]

使用 Scaleform 进行游戏资产渲染,而不仅仅是 UI

Havok Vision 游戏引擎:在 Visual Studio 中为 Android 编译 Autodesk Scaleform

Scaleform 现在支持 AS3 吗?

为啥 scaleform 会将单独的影片剪辑上的蒙版合并为一个?