scaleform 4.4.30 вопросы о opengl
Я пишу небольшую демонстрацию, не законченную, но уже могу запустить, когда я сталкиваюсь с bSuccess = m_pRenderHAL->InitHAL(GL::HALInitParams()); появилась ошибка GL,
Утверждение: ошибка GL перед GraphicsDeviceImmediate::Initialize (0x502).
в чем причина, некоторые настройки не верны?
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();
}
2 ответа
При нормальной работе Scaleform не должна генерировать никаких ошибок OpenGL. Когда вы звоните GL::HAL::InitHAL
, он проверяет любые существующие коды ошибок GL. Это утверждение предупреждает вас, что в текущем контексте произошла ошибка перед использованием Scaleform. Как указано в вашем примере, вы можете просто вызвать glGetError() перед вызовом InitHAL
(и впоследствии HAL::BeginScene
/HAL::Display
перед рендерингом каждой сцены), чтобы избежать этого утверждения.
Тем не менее, Scaleform также ожидает, что контекст GL правильно инициализируется в текущем потоке - в вашем примере нет кода, показывающего это. Если это не инициализировано должным образом, это вероятно вызов glGetError
(внутренне в Scaleform) не удается. Если это так, вам нужно будет установить текущий контекст перед вызовом GL::HAL::InitHAL
,
Я решил эту проблему, потому что в движке перед вызовом функции InitHAL от Scaleform сообщается об ошибке GL, когда в режиме отладки Scaleform сообщит об этой ошибке, я просто использую метод исправления, вызывающий glGetError() перед этим методом.