glfwGetWindowSize и другие функции GLFW возвращают 0 в cocos2d-x - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь вызвать GLFW функции, чтобы получить некоторые свойства окна внутри cocos2d-x , но независимо от того, какую функцию я вызываю и где, они всегда возвращают 0 :
сначала я получаю GLFWwindow вот так (возвращаемое window не NULL):

cocos2d::GLViewImpl* glv = (cocos2d::GLViewImpl*)cocos2d::Director::getInstance()->getOpenGLView();
GLFWwindow* window = glv->getWindow();

, а затем я хотел бы получить размер окна, вызвав glfwGetWindowSize вот так:

int width, height;
glfwGetWindowSize(window, &width, &height);

но width и height будут 0 . (Я делаю это в перезаписанной функции visit)

И аналогично другие функции glfw ведут себя так же, например, glfwGetFramebufferSize также возвращает 0 для ширины и высоты, и glfwGetWindowAttrib также возвращает 0, независимо от того, какой атрибут окна я хочу получить.

Я на Windows, использую cocos2d-x-3.17.1.

РЕДАКТИРОВАТЬ:

Вот конкретный пример: я создал класс MyClass, который наследуется от cocos2d::Node. Я переопределяю функцию visit.
в заголовке:

virtual void visit(Renderer *renderer, const Mat4& parentTransform, uint32_t parentFlags) override;

в cpp:

void MyClass::visit(cocos2d::Renderer *renderer, const cocos2d::Mat4 &parentTransform, uint32_t parentFlags)
{
    Node::visit(renderer, parentTransform, parentFlags);

    // glfw part:
    cocos2d::GLViewImpl* glv = (cocos2d::GLViewImpl*)cocos2d::Director::getInstance()->getOpenGLView();
    GLFWwindow* window = glv->getWindow();
    int isvisible = glfwGetWindowAttrib(window, GLFW_VISIBLE);
    int width, height;
    glfwGetWindowSize(window, &width, &height);
}

Когда я запускаю это, isVisible, width и height равны 0. Но если я добавлю glfw part в функцию visit базового Node класса, внутри CCNode.cpp, то все будет работать нормально (isVisible, width и height все установлены).
Что вызывает такое поведение?

...