Linux 配置OpenGL環(huán)境
安裝QT
sudo apt-get install qt5-default qtcreator
或者在應用管家中查找qt進行安裝也可以.
安裝glfw
1.安裝cmake
sudo apt-get build-dep glfw
sudo apt-get install cmake xorg-dev libglu1-mesa-dev
安裝中報了個無法解析域名archive.ubuntukylin.com 的錯誤,可以查看下自己的DNS Server:
cat /etc/resolv.conf
# This file is managed by man:systemd-resolved(8). Do not edit.
#
# This is a dynamic resolv.conf file for connecting local clients to the
# internal DNS stub resolver of systemd-resolved. This file lists all
# configured search domains.
#
# Run "systemd-resolve --status" to see details about the uplink DNS servers
# currently in use.
#
# Third party programs must not access this file directly, but only through the
# symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way,
# replace this symlink by a static file or a different symlink.
#
# See man:systemd-resolved.service(8) for details about the supported modes of
# operation for /etc/resolv.conf.
nameserver 127.0.0.53
options edns0
search DHCP HOST
如果你的和上邊一樣投放,只有127.0.0.53這個地址愕宋,那可以通過下面的方式修改脱羡,再進行cmake的安裝:
1. sudo vim /etc/resolv.conf # 添加如下內容
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 127.0.0.1
2. 輸入Esc猜揪,:wq,保存并退出
3. sudo /etc/init.d/networking restart
2.在 https://www.glfw.org/ 下載GLFW壓縮包到本地檩禾,找個文件集命名為GLFW斜做,然后將壓縮包內文件提取到該文件夾中,在該文件夾內打開終端窗窗口谈为,執(zhí)行
makedir build
cd build
cmake ../
make
sudo make install
安裝glad
glad與glew作用相同旅挤,可以將其看作是glew的升級版
在下載頁面選擇版本和模式,版本選擇最新伞鲫,profile可以選擇核心模式粘茄,還是Compatibility,如果不需要對老版本進行支持秕脓,建議選擇核心模式.選好后點擊generate, 跳轉到下載頁面柒瓣,點擊zip文件鏈接進行下載:
img
下載后,解壓到本地吠架,將include中的文件拷貝到/usr/local/include當中:
cd include
sudo mv * /usr/local/include
配置QT工程設置
考慮到跨平臺芙贫,而且cmake使用較多,所以我們新建qt工程的時候使用的是camke作為工程配置的, 你可以根據(jù)需要傍药,在最后的target_link_libraries中添加所需要的庫即可
cmake_minimum_required(VERSION 2.8.12)
project(GLConsole)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(SOURCE_FILES main.cpp glad.c) # 源文件
find_package(Qt5Core)
add_executable(${PROJECT_NAME} ${SOURCE_FILES})
# 在這里添加lib庫
target_link_libraries(${PROJECT_NAME} glfw3 GL m Xrandr Xi X11 Xxf86vm pthread dl Xinerama Xcursor)
配置好以后磺平,我們就寫一個Hello OpenGL吧魂仍,具體代碼如下:
#include <iostream>
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#define GOUT std::cout
#define GENDL std::endl
enum GError{
GERROR_WINDOW_FAIL=-1,
GERROR_GLFW_FAIL = -2,
GERROR_GLAD_FAIL = -3
};
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
glViewport(0, 0, width, height);
}
int main()
{
// system("pause");
// 初始化glfw
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR,4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR,5);
glfwWindowHint(GLFW_OPENGL_PROFILE,GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_RESIZABLE,GL_FALSE);
// Create GLWindow
GLFWwindow* window = glfwCreateWindow(800, 600,"Hello OpenGL", nullptr, nullptr);
if(nullptr == window)
{
GOUT<<"Failed to create OpenGL window."<<GENDL;
glfwTerminate(); // Release GL Resources.
return GERROR_WINDOW_FAIL;
}
glfwMakeContextCurrent(window);
// Initialize GLAD
if(!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << "Failed to initialize GLAD" << std::endl;
return -1;
}
// 此函數(shù)設置窗口的維度(Dimension)
glViewport(0, 0, 800, 600);
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
while(!glfwWindowShouldClose(window))
{
glfwSwapBuffers(window);
glfwPollEvents();
}
std::cout<<"hello open gl"<<std::endl;
return 0;
}