C++ Mac上的自制GLFW/GLEW

C++ Mac上的自制GLFW/GLEW,c++,macos,opengl,cmake,glfw,C++,Macos,Opengl,Cmake,Glfw,到目前为止,我已经通过MacOs上的自制软件安装了GLFW和GLEW。它们安装在以下目录(usr/local/ceral/)中 我从一个教程中获取了以下脚本,并添加了一些遗留的OpenGL,希望我能够测试OpenGL的所有链接和工作。(我这样做的原因是因为我仍在学习OpenGL,而我还没有在着色器下学习) CMakeList.txt cmake_minimum_required(VERSION 3.3) project(Lib_Test) set(CMAKE_CXX_FLAGS "${CMAK

到目前为止,我已经通过MacOs上的自制软件安装了GLFW和GLEW。它们安装在以下目录(usr/local/ceral/)中

我从一个教程中获取了以下脚本,并添加了一些遗留的OpenGL,希望我能够测试OpenGL的所有链接和工作。(我这样做的原因是因为我仍在学习OpenGL,而我还没有在着色器下学习)

CMakeList.txt

cmake_minimum_required(VERSION 3.3)
project(Lib_Test)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -framework Cocoa -framework OpenGL -framework IOKit")

set(SOURCE_FILES src/main.cpp CMakeLists.txt)

# add extra include directories
include_directories(/usr/local/include)

# add extra lib directories
link_directories(/usr/local/lib)

add_executable(Lib_Test main.cpp)
target_link_libraries(Lib_Test glfw)
target_link_libraries(Lib_Test glew)
find_package (GLM REQUIRED)
include_directories(include)
main.cpp

#include <stdio.h>


// Include GLEW. Always include it before gl.h and glfw.h, since it's a bit magic.

#include <GL/glew.h>

// Include GLFW
#include <GLFW/glfw3.h>


// Include GLM

#include <glm/glm.hpp>

using namespace glm;


int main(){

// Initialise GLFW
if( !glfwInit() )
{
    fprintf( stderr, "Failed to initialize GLFW\n" );
    return -1;
}


glfwWindowHint(GLFW_SAMPLES, 4); // 4x antialiasing
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); // We want OpenGL 3.3
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // To make MacOS happy; should not be needed
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); // We don't want the old OpenGL

// Open a window and create its OpenGL context
GLFWwindow* window; // (In the accompanying source code, this variable is global for simplicity)
window = glfwCreateWindow( 800, 600, "My App", NULL, NULL);
if( window == NULL ){
    fprintf( stderr, "Failed to open GLFW window.\n" );
    glfwTerminate();
    return -1;
}

glfwMakeContextCurrent(window); // Initialize GLEW
glewExperimental=true; // Needed in core profile
if (glewInit() != GLEW_OK) {
    fprintf(stderr, "Failed to initialize GLEW\n");
    return -1;
}


// Ensure we can capture keys being pressed below
glfwSetInputMode(window, GLFW_STICKY_KEYS, GL_TRUE);

do{

    glClear(GL_COLOR_BUFFER_BIT);

    glBegin(GL_TRIANGLES);
    glVertex2f(-0.5f, -0.5f);
    glVertex2f(0.0f, -0.5f);
    glVertex2f(0.5f, -0.5f);
    glEnd();

    // Swap buffers
    glfwSwapBuffers(window);
    glfwPollEvents();

} // Check if the ESC key was pressed or the window was closed
while( glfwGetKey(window, GLFW_KEY_ESCAPE ) != GLFW_PRESS && 
glfwWindowShouldClose(window) == 0 );



}
#包括
//包括GLEW。总是在gl.h和glfw.h之前包含它,因为它有点神奇。
#包括
//包括GLFW
#包括
//包括GLM
#包括
使用名称空间glm;
int main(){
//初始化GLFW
如果(!glfwInit())
{
fprintf(stderr,“未能初始化GLFW\n”);
返回-1;
}
glfwWindowHint(GLFW_样本,4);//4x抗锯齿
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR,3);//我们想要OpenGL 3.3
glfwWindowHint(GLFW_上下文_版本_小调,2);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT,GL_TRUE);//使MacOS高兴;不需要
glfwWindowHint(GLFW_OPENGL_PROFILE,GLFW_OPENGL_CORE_PROFILE);//我们不想要旧的OPENGL
//打开窗口并创建其OpenGL上下文
GLFWwindow*window;//(在附带的源代码中,为了简单起见,此变量是全局变量)
window=glfwCreateWindow(800600,“我的应用程序”,NULL,NULL);
如果(窗口==NULL){
fprintf(stderr,“无法打开GLFW窗口。\n”);
glfwTerminate();
返回-1;
}
glfwMakeContextCurrent(窗口);//初始化GLEW
glewExperimental=true;//核心配置文件中需要
如果(glewInit()!=GLEW\u确定){
fprintf(stderr,“未能初始化GLEW\n”);
返回-1;
}
//确保我们可以捕获下面正在按下的键
glfwSetInputMode(窗口,GLFW_粘滞键,GL_真);
做{
glClear(GLU颜色缓冲位);
glBegin(GL_三角形);
glVertex2f(-0.5f,-0.5f);
glVertex2f(0.0f,-0.5f);
glVertex2f(0.5f,-0.5f);
格伦德();
//交换缓冲区
glfwSwapBuffers(窗口);
glfwPollEvents();
}//检查是否按下ESC键或窗口是否关闭
while(glfwGetKey(窗口,GLFW_键_退出)!=GLFW_按&&
glfwWindowShouldClose(窗口)==0);
}
一切都在编译和运行。但什么都没有画出来。我甚至可以改变背景颜色(使用glClear)。我的问题是,如果有些东西不起作用,我甚至不确定那是什么东西


谢谢

您混合了旧的固定管道方式和现代(带着色器)方式

glBegin-
GLAND
之间和包括glBegin在内的所有行仅适用于旧的OpenGL

GLFW\u OPENGL\u FORWARD\u COMPAT
不应对OSX产生任何影响。无论如何,记住它与
GLFW\u OPENGL\u CORE\u PROFILE
不兼容

我的建议是您编写着色器的东西代码(编译等),即使这是第一次很长很难


顺便说一句,Mac中不需要
glew
。OSX提供gl函数,因此不需要检索指向它们的函数指针。不过使用它是无害的。

您将旧的固定管道方式和现代(带着色器)方式混合在一起

glBegin-
GLAND
之间和包括glBegin在内的所有行仅适用于旧的OpenGL

GLFW\u OPENGL\u FORWARD\u COMPAT
不应对OSX产生任何影响。无论如何,记住它与
GLFW\u OPENGL\u CORE\u PROFILE
不兼容

我的建议是您编写着色器的东西代码(编译等),即使这是第一次很长很难


顺便说一句,Mac中不需要
glew
。OSX提供gl函数,因此不需要检索指向它们的函数指针。但是使用它是无害的。

在核心配置文件中,无法使用glBegin/glEnd绘制。在核心配置文件中,无法使用glBegin/glEnd绘制。非常感谢!因为这对我来说是新的。我想在我太参与着色器等之前检查事情是否正常。但按照你的建议,我会坚持下去!太好了,谢谢!因为这对我来说是新的。我想在我太参与着色器等之前检查事情是否正常。但按照你的建议,我会坚持下去!