MAC 下編寫opengl3 程式

2021-07-03 02:45:26 字數 2334 閱讀 3646

最近在mac和windows兩邊寫opengl**,但由於mac原本只支援2.1,所以兩邊寫不同的語法,讓我很苦惱,而且在mac上無法學習一些較新的教程,在搜尋了和踩了一些坑之後,終於實現在mac上編寫opengl 3+ 程式.

osx對於gl 2.1以上只支援core profile.

glfw支援建立core profile context.

glfw 建議通過brew安裝,在命令列介面:

執行以下命令:

brew update

brew tap homebrew/versions

brew install glfw3

安裝成功後,標頭檔案和庫檔案會分別在/usr/local/include 和/usr/local/lib

在標頭檔案路徑中增加 /usr/local/include

在庫路徑中增加 /usr/local/cellar/glfw3/3.1.1/lib

如果僅僅按glfw官網教程框架是無法編寫opengl3+的程式的,我們必須在建立glfw視窗之前加上以下4行:

glfwwindowhint(glfw_opengl_forward_compat, gl_true);

glfwwindowhint(glfw_opengl_profile, glfw_opengl_core_profile);

glfwwindowhint(glfw_context_version_major, 3);

glfwwindowhint(glfw_context_version_minor, 2);

而且不要使用glut框架

注意,一旦加了這4行,以前的固定管線函式就無效了,像glbegin,glend就無法使用了。

下面給乙個示例程式:

#include 

#include

#include

#include "initshader.h"

static

void error_callback(int error, const

char* description)

static

void key_callback(glfwwindow* window, int key, int scancode, int action, int mods)

static

const glfloat g_vertex_buffer_data = ;

#define printglerr(func) err = glgeterror(); if (err) fprintf(stderr, func " error: %u at line %d\n", err, __line__);

gluint err =gl_invalid_operation;

void init()

void display()

int main(void)

glfwmakecontextcurrent(window);

glfwswapinterval(1);

glfwsetkeycallback(window, key_callback);

init();

while (!glfwwindowshouldclose(window))

glfwdestroywindow(window);

glfwterminate();

exit(exit_success);

}

未給出的是initshader函式**,這個網上很多實現,就不加在這裡顯的**很長了

然後是vertex shader;

#version 330 core

layout(location =0 )in

vec3 vposition;

void main()

fragment shader:

#version 330 core

outvec4 glcolor;

void main()

OpenGL3時代到來

amazon上預售的opengl programming guide第七版和opengl shading language第三版是關於opengl3.0 3.1和glsl1.3 1.4的。在8月3日開始正式發售。由此opengl3也有了官方的書籍,opengl3的時代正式到來了。gl3將是乙個轉折的...

在ubuntu下編寫OpenGL程式

下午一直在搞這個,總算搞好了 在終端中逐步執行以下命令,即可完成基本編譯環境的設定 安裝基本編譯環境 sudo apt get install build essential 安裝opengl工具箱 sudo apt get install freeglut3 dev 然後就可以編譯寫好的openg...

MFC的Dialog下編寫OPENGL !

環境 vc6 1.新建 windows 的 dialog 體並可以執行!所有的設定全部為預設 2.新建 控制項 改id 為idc gl screen 3.新建類 cglscreen 其父類為 cwnd 4.新建函式 oninit cpaintdc dc this device context for...