为什么我在GLFW3中获得2个回调-OpenGL

mkuse

我将GLFW3用于OpenGL3.3 +的窗口处理。一切正常,但是我不明白为什么每次我按A键两次都会打印“按A”。我特别希望1按键A仅打印一次。

static void My_Key_Callback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
    if( key == 'A' )
    {
        std::cout<< "A pressed\n";
        return;
    }
}


int main( int argc, char ** argv )
{
    // --1-- Initialise GLFW
    if( glfwInit() == false )
    {
        std::cerr << "Failed to initialize GLFW3\nQuiting....\n";
        exit(1);
    }


    // --2-- Create Window
    glfwWindowHint(GLFW_SAMPLES, 4); // 4x antialiasing
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); // We want OpenGL 3.3
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // To make MacOS happy; should not be needed
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); //We don't want the old OpenGL

    GLFWwindow * window=NULL;
    window = glfwCreateWindow( 400, 400, "hello", NULL, NULL );
    if( window == NULL )
    {
        std::cerr << "Failed to create glfw window\nQuiting....\n";
        glfwTerminate();
        exit(1);
    }

    // --3-- Make current context
    glfwMakeContextCurrent( window );


// 
// .
// . Normal OpenGL code goes here
// .
//

    // set call back
    glfwSetKeyCallback( window, My_Key_Callback);

    // --5-- Main loop
    glfwSetInputMode( window, GLFW_STICKY_KEYS, GL_TRUE );
    glClearColor(0,0,.4,0);



    do
    {


        ////// Some more OpenGL code here 

        glDrawArrays(GL_TRIANGLES, 0, 36); 


        // swap buffers
        glfwSwapBuffers( window );
        glfwPollEvents();
    }
    while( glfwWindowShouldClose(window)==false );



}
布雷特·黑尔

GLFW3中有一个键盘事件回调也可以处理GLFW_RELEASE事件:

typedef void(* GLFWkeyfun)(GLFWwindow *,int,int,int,int)

第四个参数是actionGLFW_PRESS, GLFW_RELEASE or GLFW_REPEAT.您可以忽略键释放事件,例如,

if (action == GLFW_RELEASE)
    return;

// ... handle PRESS, REPEAT of a key...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Anttweakbar glfw3 OpenGL 3.2 not drawing

来自分类Dev

为什么我无法使用GLFW获得向前兼容的OpenGL上下文?

来自分类Dev

使用GLFW3创建OpenGL 4.3窗口失败

来自分类Dev

Anttweakbar glfw3 OpenGL 3.2无法绘制

来自分类Dev

在Mesa 10和GLFW3中使用OpenGL核心配置文件

来自分类Dev

在Mesa 10和GLFW3中使用OpenGL核心配置文件

来自分类Dev

在GLFW3中请求特定的OpenGL上下文版本

来自分类Dev

为什么我的openGL省略了?

来自分类Dev

OpenGL / GLUT更改glutMainLoop()中的回调

来自分类Dev

Haskell opengl纹理GLFW

来自分类Dev

为什么我总是使用openGL 2.1版?[openGL / SDL]

来自分类Dev

与GLFW3在OpenGL上下文之间共享纹理不起作用

来自分类Dev

C OpenGL glfw3三角形不显示

来自分类Dev

是否可以使用glfw3在Macbok Pro 2015 mid上运行OpenGL 3.0?

来自分类Dev

为 CentOS 7 构建 OpenGL SuperBible 7,缺少 glfw3

来自分类Dev

如何获得OpenGL的符号?

来自分类Dev

为什么我的OpenGL不起作用?

来自分类Dev

为什么我的OpenGL纹理是透明的?

来自分类Dev

为什么我要在opengl 3环境中使用opengl 4函数

来自分类Dev

Android OpenGL queueEvent为什么?

来自分类Dev

OpenGL API与什么接口?

来自分类Dev

什么是未扩展的OpenGL?

来自分类Dev

什么是Regal OpenGL?

来自分类Dev

OpenGL:glRotatef旋转什么?

来自分类Dev

OpenGL API与什么接口?

来自分类Dev

为什么我的点不显示在Haskell OpenGL中?

来自分类Dev

缩放纹理opengl 2

来自分类Dev

连续在OpenGL中暂停

来自分类Dev

OpenGL中的阴影贴图