Я пытаюсь вызвать 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
все установлены).
Что вызывает такое поведение?