Пока я размещал различные инпуты в главном классе, проблем не было:
Когда же я перенёс этот код в др. класс, то он начал жаловаться, что они не совместимы, например:
Ошибка (активно) E0167 аргумент типа "void (Game::*)(GLFWwindow *window, double xoffset, double yoffset)" несовместим с параметром типа "GLFWscrollfun"
Помогите понять как правильно сделать.
в главном классе
Никакого "главного" класса в твоём 1-м коде нет.
В качестве коллбэка можно использовать указатель на функцию, но не указатель на метод класса - это разные вещи. Сделай что-то типа этого:
MyClass *myPtr; //..где-нибудь инициализируем myPtr void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode) { //.... myPtr->doSomething( ); //... }
UPD: можно также связать указатель с окном:
glfwSetWindowUserPointer(window, ( void *)this); //... void key_callback( GLFWwindow* window, int key, int scancode, int action, int mode) { MyClass *c = ( MyClass)glfwGetWindowUserPointer( window); //... }
static void mouse_callback(GLFWwindow* window, double xpos, double ypos) { do something} static void scroll_callback( GLFWwindow* window, double xoffset, double yoffset) { do something} static void key_callback( GLFWwindow* window, int key, int scancode, int action, int mode) { do something}
Просто я исп. отдельный класс для камеры. И если я исп. статик фук-ию, то мне пишет:
Ошибка (активно) E0245 нестатическая ссылка не член должна указываться относительно заданного объекта.
А насчёт glfwSetWindowUserPointer и glfwGetWindowUserPointer я не понял как их применять. Можно подробней?
GLFWwindow* mWindow; Window::Window() { glfwSetWindowUserPointer( mWindow, this); glfwSetKeyCallback( mWindow, []( GLFWwindow *win, int key, int scancode, int action, int mods) { Window *window = static_cast<Window *>( glfwGetWindowUserPointer( win)); window->KeyboardCallback( key, scancode, action, mods); }); }
Тема в архиве.