Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 与GLFW和x27有问题;Debian上的s回调glfwSetDropCallback_C++_Opengl_Glfw - Fatal编程技术网

C++ 与GLFW和x27有问题;Debian上的s回调glfwSetDropCallback

C++ 与GLFW和x27有问题;Debian上的s回调glfwSetDropCallback,c++,opengl,glfw,C++,Opengl,Glfw,我目前正在创建一个轻量级程序来查看和操作3D对象,类似于程序混合器或3DS max 我使用C++、GLFW和OpenGL。虽然我计划让它跨平台,但我目前只在一台运行Debian9.0(stretch)和XFCE桌面环境的计算机上工作 目前,无论我如何尝试,回调glfwSetDropCallback似乎从未被调用。我设置了断点和断言,但什么都没有。我尝试过的所有其他回调都可以正常工作。我已经从我的项目中包括了我的GLFW cpp。如果还需要别的什么,尽管问吧 最后一点,我只是在使用GLFW,因为其

我目前正在创建一个轻量级程序来查看和操作3D对象,类似于程序混合器或3DS max

我使用C++、GLFW和OpenGL。虽然我计划让它跨平台,但我目前只在一台运行Debian9.0(stretch)和XFCE桌面环境的计算机上工作

目前,无论我如何尝试,回调glfwSetDropCallback似乎从未被调用。我设置了断点和断言,但什么都没有。我尝试过的所有其他回调都可以正常工作。我已经从我的项目中包括了我的GLFW cpp。如果还需要别的什么,尽管问吧

最后一点,我只是在使用GLFW,因为其他的东西对我来说都太重了。另外,直接使用X11似乎需要做很多工作,但收获不大,特别是因为我需要为每个OS I目标提供不同的解决方案。最后,我只希望能够将项目拖放到我的程序窗口中,然后让我的代码对路径做一些处理

#包括“GLFWindow.h”
#包括
#包括
//用于回调的变量。
静态布尔键[1024];
静态std::矢量拖放;
静态摄像机*\u摄像机;
静态GLdouble*_lastX;
静态GLdouble*整形术;
GLFWindow::GLFWindow()
:m_window(nullptr)、m_lastX(0.0)、m_lastY(0.0)
{
glfwInit();
glfwWindowHint(GLFW_上下文_版本_主要,GLFW_版本_主要);
glfwWindowHint(GLFW_上下文_版本_次要,GLFW_版本_次要);
glfwWindowHint(GLFW_OPENGL_配置文件、GLFW_OPENGL_核心配置文件);
glfwWindowHint(GLFW_可调整大小,GL_为FALSE);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT,GL_FALSE);//用于OSX
glfwWindowHint(GLFW_聚焦,GL_真实);
标准::cout编辑:

首先,确保您使用的是最新的稳定GLFW版本(现在是3.2.1)

最明显的原因可能是,您从未调用
GLFWindow::PollEvents()
,因此也从未调用
glfwPollEvents()
。然而,我怀疑这是原因,因为您从未提及任何其他输入问题

要验证回调是否真的从未被调用,请尝试以下示例:

glfwInit();

// You might need some of the window hints

GLFWwindow *window = glfwCreateWindow(600, 400, "Test glfwSetDropCallback", NULL, NULL);

glfwSetDropCallback(window, [](GLFWwindow*, int count, const char **paths)
{
    std::cout << "Drag and Drop count - " << count << std::endl;

    for (unsigned int i = 0; i < count; ++i)
        std::cout << "- " << paths[i] << std::endl;
});

while (!glfwWindowShouldClose(window))
{
    glfwSwapBuffers(window);
    glfwPollEvents();
}

glfwDestroyWindow(window);

glfwTerminate();
glfwInit();
//您可能需要一些窗口提示
GLFWwindow*window=glfwCreateWindow(600400,“测试glfwSetDropCallback”,NULL,NULL);
glfwSetDropCallback(窗口,[](GLFWwindow*,整数计数,常量字符**路径)
{

谢谢你的回复。我还有一段时间(窗口未关闭)在我看来,主要是轮询与您的示例类似的事件。因此,您是正确的,这不是我的事件轮询。我创建了一个新项目并运行了您的简单代码测试,我看到了与以前相同的问题。因此,听起来像是我怀疑的问题,可能是GLFW和X11存在错误,或者我的X11没有为此配置。我对directl几乎没有经验y与X11接口。我会在有时间的时候研究测试你的第二个建议。另外,我打电话给std::cout好的,我认为这是一个bug,我会将它报告给GLFW。我刚刚运行了你提到的X11代码,并报告支持它。
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xos.h>

Display *display =XOpenDisplay((char *)0);
if(XInternAtom(display, "XdndAware", False))
    std::cout << "Supported" << std::endl;
glfwInit();

// You might need some of the window hints

GLFWwindow *window = glfwCreateWindow(600, 400, "Test glfwSetDropCallback", NULL, NULL);

glfwSetDropCallback(window, [](GLFWwindow*, int count, const char **paths)
{
    std::cout << "Drag and Drop count - " << count << std::endl;

    for (unsigned int i = 0; i < count; ++i)
        std::cout << "- " << paths[i] << std::endl;
});

while (!glfwWindowShouldClose(window))
{
    glfwSwapBuffers(window);
    glfwPollEvents();
}

glfwDestroyWindow(window);

glfwTerminate();
Display *display = ...
if (XInternAtom(display, "XdndAware", False))
    std::cout << "Supported" << std::endl;