gpt4 book ai didi

c++ - OSX Xcode 6 上的 OpenGL 4.1 设置困难

转载 作者:太空狗 更新时间:2023-10-29 20:57:32 25 4
gpt4 key购买 nike

我正在尝试学习一些 OpenGL,并立即发现 OpenGL >3.2 的版本更适合学习。

所以我已经使用 Xcode 和命令行工具设置了我的 Mac OS X 10.10.3 来运行一些示例。

但是jebus这个东西是一个痛苦的屁股。

我得到的错误是。

    Undefined symbols for architecture x86_64:
"LoadShaders(char const*, char const*)", referenced from:
_main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

所以我有最新版本的 GLFW GLEW cmake 来让一切顺利进行。

我将我的 header 和库路径添加到项目中。

库搜索路径

/opt/X11/lib /usr/lib/ /Users/mac/Dev/workspace/C++/Test/glfw/build/src/Debug /Users/mac/Dev/workspace/C++/Test/glew/lib
  • 我添加最后两个目录只是为了在目录上加倍

header 搜索路径看起来与 include 相似,而不是 lib

我的链接器很大(来自尝试随机的东西)

-framework OpenGl -lGLUT -lglew -lglfw -lGL -lGLU -lXmu -lXi -lXext -lX11 -lXt

而且我也将二进制文件与库链接起来。我哪里错了??我的 GPU 是 Intel HD 4000,似乎最高支持 OpenGL4.1。

我需要添加编译器标志吗?这是不合理的吗?

这是我尝试运行的教程代码。

    #include <stdio.h>
#include <stdlib.h>

//GLEW
#define GLEW_STATIC
#include <GL/glew.h>

#include <GLUT/glut.h>

//GLFW
#include <GLFW/glfw3.h>
#include <AGL/glm.h>

GLFWwindow* window;

//no real explanation of what this is.....
#include <common/shader.hpp>

//MAIN FUNCTION
int main(int argc, char *argv[])
{
if( !glfwInit() )
{
fprintf( stderr, "Failed to initialize GLFW\n" );
return -1;
}

// specify GL information
glfwWindowHint(GLFW_SAMPLES, 4); // 4x antialiasing
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); // We want 4.1>= OpenGL_version >=3.3
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1);
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
window = glfwCreateWindow( 600, 375, "Tutorial 02", NULL, NULL);

if( window == NULL ){
fprintf( stderr, "Failed to open GLFW window. If you have an Intel GPU, they are not 3.3 compatible. Try the 2.1 version of the tutorials.\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 the escape key being pressed below
glfwSetInputMode(window, GLFW_STICKY_KEYS, GL_TRUE);

// Dark blue background
glClearColor(0.0f, 0.0f, 0.4f, 0.0f);

// Create Vertex Array Object.
GLuint VertexArrayID;
glGenVertexArrays(1, &VertexArrayID);
glBindVertexArray(VertexArrayID);

// Create and compile our GLSL program from the shaders
GLuint programID = LoadShaders( "SimpleVertexShader.vertexshader", "SimpleFragmentShader.fragmentshader" );

// An array of 3 vectors which represents 3 vertices
static const GLfloat g_vertex_buffer_data[] = {
-1.0f, -1.0f, 0.0f,
1.0f, -1.0f, 0.0f,
0.0f, 1.0f, 0.0f,
};

GLuint vertexbuffer;
glGenBuffers(1, &vertexbuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data), g_vertex_buffer_data, GL_STATIC_DRAW);

do{
// Clear the screen
glClear( GL_COLOR_BUFFER_BIT );

// Use our Shader
glUseProgram(programID);

// 1st attribute buffer : vertices
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);

// glVertexAttribPointer(
// Atrribute,
// size,
// type,
// normalized,
// stride,
// array buffer offset
// );
glVertexAttribPointer( 0, 3, GL_FLOAT, GL_FALSE, 0, (void*)0);

// Draw the triangle
glDrawArrays(GL_TRIANGLES, 0, 3);

glDisableVertexAttribArray(0);

// 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 );

// Cleanup VBO
glDeleteBuffers(1, &vertexbuffer);
glDeleteVertexArrays(1, &VertexArrayID);
glDeleteProgram(programID);

// Close OpenGL window and terminate GLFW
glfwTerminate();

return 0;
}

我在这里主要遵循这个指南 Oscar Chavez, Setup instructions

最佳答案

LoadShaders() 函数不是 OpenGL 的一部分,也不是您正在使用的任何库的一部分(我看到了 GLEW 和 GLFW)。简而言之,缺少 LoadShaders()

我的猜测是 LoadShaders() 是教程作者编写的函数,但教程的格式有点令人沮丧(至少可以这么说!)所以我不是当然。

关于c++ - OSX Xcode 6 上的 OpenGL 4.1 设置困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30369058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com