C++ Ubuntu 12.04上的OpenGL 4教程

C++ Ubuntu 12.04上的OpenGL 4教程,c++,opengl,ubuntu,C++,Opengl,Ubuntu,我使用的是Ubuntu 12.04,我已经安装了OpenGL4 我还有一个支持CUDA的NVIDIA图形卡。请注意,我一直在我的PC上使用CUDA进行并行计算,这是可行的 [eeuser@roadrunner sample_opengl]$ glxinfo | grep gl server glx vendor string: NVIDIA Corporation server glx version string: 1.4 server glx extensions: client glx v

我使用的是Ubuntu 12.04,我已经安装了OpenGL4

我还有一个支持CUDA的NVIDIA图形卡。请注意,我一直在我的PC上使用CUDA进行并行计算,这是可行的

[eeuser@roadrunner sample_opengl]$ glxinfo | grep gl
server glx vendor string: NVIDIA Corporation
server glx version string: 1.4
server glx extensions:
client glx vendor string: NVIDIA Corporation
client glx version string: 1.4
client glx extensions:
    GL_ARB_texture_query_lod, GL_ARB_texture_rectangle, GL_ARB_texture_rg, 
    GL_NV_texture_multisample, GL_NV_texture_rectangle, GL_NV_texture_shader, 
我不能让一个简单的程序工作。有人能给我一个可以在我的电脑上运行的示例程序吗

以下是我正在使用的代码:

#include <GL/glew.h> // include GLEW and new version of GL on Windows
#include <GLFW/glfw3.h> // GLFW helper library
#include <stdio.h>

int main () {
  // start GL context and O/S window using the GLFW helper library
  if (!glfwInit ()) {
    fprintf (stderr, "ERROR: could not start GLFW3\n");
    return 1;
  } 

    // uncomment these lines if on Apple OS X
  /*glfwWindowHint (GLFW_CONTEXT_VERSION_MAJOR, 3);
  glfwWindowHint (GLFW_CONTEXT_VERSION_MINOR, 2);
  glfwWindowHint (GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
  glfwWindowHint (GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);*/

  GLFWwindow* window = glfwCreateWindow (640, 480, "Hello Triangle", NULL, NULL);
  if (!window) {
    fprintf (stderr, "ERROR: could not open window with GLFW3\n");
    glfwTerminate();
    return 1;
  }
  glfwMakeContextCurrent (window);

  // start GLEW extension handler
  glewExperimental = GL_TRUE;
  glewInit ();

  // get version info
  const GLubyte* renderer = glGetString (GL_RENDERER); // get renderer string
  const GLubyte* version = glGetString (GL_VERSION); // version as a string
  printf ("Renderer: %s\n", renderer);
  printf ("OpenGL version supported %s\n", version);

  // tell GL to only draw onto a pixel if the shape is closer to the viewer
  glEnable (GL_DEPTH_TEST); // enable depth-testing
  glDepthFunc (GL_LESS); // depth-testing interprets a smaller value as "closer"

  /* OTHER STUFF GOES HERE NEXT */

  // close GL context and any other GLFW resources
  glfwTerminate();
  return 0;
}
我得到一个错误:

main2.cpp:2:47: fatal error: GLFW/glfw3.h: No such file or directory
compilation terminated.
我现在想知道这个GLFW是什么?更确切地说,我该如何安装它?跟随@eapert 我将libglfw安装为-

sudo apt-get install libglfw-dev
仍然会出现以下错误

main2.cpp: In function ‘int main()’:
main2.cpp:18:2: error: ‘GLFWwindow’ was not declared in this scope
main2.cpp:18:14: error: ‘window’ was not declared in this scope
main2.cpp:18:79: error: ‘glfwCreateWindow’ was not declared in this scope
main2.cpp:24:32: error: ‘glfwMakeContextCurrent’ was not declared in this scope

警告:自作出此回答以来,问题发生了相当大的变化

“我尝试了一些教程,但我不能让一个简单的程序工作”我想,鉴于你之前所说的,你的CUDA程序在Windows上工作,而不是在Ubuntu上

1) 试着先安装一个更新的Ubuntu版本(如果你在那台电脑上有选择的话)。12.04有点老了,如果你没有充分的理由,你可能不应该使用它(例如,这是一台公司的PC,你会违反升级政策,类似的事情)

2)尝试安装专有NVIDIA驱动程序为您的卡(这也应该给你的英伟达OpenGL实现);您可能已经安装了

mesa
。我想当前的
mesa
版本至少有一些GPGPU支持,但我不确定他们是否支持CUDA(如果你不是特别喜欢CUDA,你也可以尝试OpenCL,你可能会有更好的机会。尽管你仍然有很好的机会需要专有的NVIDIA驱动程序)


GLFW是一个帮助程序库,用于创建窗口、在其中设置OpenGL并提供对输入函数等的访问。在这方面,它类似于GLUT(您似乎很熟悉),但是一个更现代的替代方案。您当然需要安装它才能使用它。您应该能够像往常一样通过Ubuntus软件包管理器安装它,尝试
apt cache search glfw
,这将帮助您找到确切的软件包名称。如果有多个“lib”版本,请安装以
-dev

结尾的版本安装GLFW的“dev”包:
sudo apt get install libglfw3 dev

警告:从软件包管理器获得的版本可能已过期

您可以按照说明或

我试着用-

 g++ main2.cpp  -lglut -lGL -lGLEW -lGLU 
g++ main2.cpp  -lglut -lGL -lGLEW -lGLU
当您想使用GLFW时,为什么要链接GLUT?此外,您的程序不需要GLU。试试这个:

g++ main2.cpp -lGL -lGLEW -lglfw

请发布您的代码和用于编译的命令。您的意思是我应该从源代码安装libglfw吗?仍然不起作用。main2.cpp:在函数“int main()中“:main2.cpp:18:2:错误:“GLFWwindow”未在此作用域main2中声明。cpp:18:14:错误:“window”未在此作用域main2中声明。cpp:18:79:错误:“glfwCreateWindow”未在此作用域main2中声明。cpp:24:32:错误:“glfwMakeContextCurrent”未在此作用域中声明。我在堆栈上添加了另一个指向答案的链接溢流在遵循说明之前,最好先卸载并删除您当前拥有的任何GLFW版本,然后再继续。这里正确的软件包是libglfw3 dev(请注意3)。