最近在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...