gl3w
$ python gl3w_gen.py
<urlopen error [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590)>
openssl version
python -c "import ssl; print(ssl.OPENSSL_VERSION)"
得出openssl與python的版本不匹配跪妥,Mac上解決:
brew install python
中間如果出現(xiàn)權(quán)限報(bào)錯(cuò)的問題:
sudo chown $(whoami):admin /usr/local/Frameworks
之后關(guān)聯(lián)python:
brew link python3
接下來運(yùn)行python
文件,
$ python gl3w_gen.py
文件會(huì)自動(dòng)下載gl3w
相關(guān)的頭文件與庫實(shí)現(xiàn)声滥;
glfw/glew
首先通過homebrew
安裝這兩個(gè)工具,
brew install glew
brew install glfw
安裝完成后侦香,庫文件會(huì)在你的Mac系統(tǒng)目錄下落塑,
/usr/local/Cellar
接下來就是將這兩個(gè)庫的目錄添加到Xcode
工具設(shè)置里;
點(diǎn)擊Command+.
罐韩,在設(shè)置中Locations->Custom Path
中添加憾赁,
glew_header
/usr/local/Cellar/glew/2.1.0/include
glew_lib
/usr/local/Cellar/glew/2.1.0/lib
glfw_header
/usr/local/Cellar/glfw/3.3/include
glfw_lib
/usr/local/Cellar/glfw/3.3/lib
工程中頭文件與庫查找配置
將文章開頭使用python
下載的gl3w.c
以及頭文件引入工程文件中,并配置頭文件搜索目錄:
.c
文件則直接引入工程中(這里也可以將.c
編譯成動(dòng)態(tài)庫或者靜態(tài)庫散吵,我們這里不多作討論)龙考;
接下來配置glfw
和glew
搜索蟆肆,Header search paths
中添加:
$(glew_header)
$(glfw_header)
Library search paths
中添加:
$(glew_lib)
$(glfw_lib)
配置測(cè)試
我們用gl3w
官網(wǎng)用例來進(jìn)行測(cè)試,注意官網(wǎng)給出了glfw
和glut
的版本晦款,由于在Mac系統(tǒng)下glut
有對(duì)應(yīng)的庫GLUT/GLUT.h
炎功,所以我們不再去下載源碼進(jìn)行編譯,且glut
大部分庫為deprecated
缓溅,我們這里使用glfw
測(cè)試版本:
在main.cpp
中:
#include <stdio.h>
#include <stdlib.h>
#include <GL/gl3w.h>
#include <GLFW/glfw3.h>
static int width = 600, height = 600;
static float randf()
{
return (float) rand() / ((float) RAND_MAX + 1);
}
static void display(GLFWwindow *window)
{
glClearColor(randf(), randf(), randf(), 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glfwSwapBuffers(window);
}
static void reshape(GLFWwindow *window, int w, int h)
{
width = w > 1 ? w : 1;
height = h > 1 ? h : 1;
glViewport(0, 0, width, height);
glClearDepth(1.0);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glEnable(GL_DEPTH_TEST);
}
int main(int argc, char **argv)
{
GLFWwindow *window;
glfwInit();
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
window = glfwCreateWindow(width, height, "cookie", NULL, NULL);
glfwSetFramebufferSizeCallback(window, reshape);
glfwSetWindowRefreshCallback(window, display);
glfwMakeContextCurrent(window);
if (gl3wInit()) {
fprintf(stderr, "failed to initialize OpenGL\n");
return -1;
}
if (!gl3wIsSupported(3, 2)) {
fprintf(stderr, "OpenGL 3.2 not supported\n");
return -1;
}
printf("OpenGL %s, GLSL %s\n", glGetString(GL_VERSION),
glGetString(GL_SHADING_LANGUAGE_VERSION));
while (!glfwWindowShouldClose(window)) {
display(window);
glfwPollEvents();
}
glfwTerminate();
return 0;
}
效果如下: