C++ Xcode8.2.1上的OpenGL-窗口中未显示顶点
我现在正在学习C++ Xcode8.2.1上的OpenGL-窗口中未显示顶点,c++,xcode,opengl,C++,Xcode,Opengl,我现在正在学习c++和openGL,并让它在我的MacBookXcode中运行。我有以下代码: #include <GL/glew.h> #include <GLFW/glfw3.h> #include <stdio.h> int main () { GLFWwindow* window = NULL; const GLubyte* renderer; const GLubyte* version; if (!glfwIni
c++
和openGL
,并让它在我的MacBook
Xcode
中运行。我有以下代码:
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <stdio.h>
int main ()
{
GLFWwindow* window = NULL;
const GLubyte* renderer;
const GLubyte* version;
if (!glfwInit ()) {
fprintf (stderr, "ERROR: could not start GLFW3\n");
return 1;
}
glfwWindowHint (GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint (GLFW_CONTEXT_VERSION_MINOR, 2);
glfwWindowHint (GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint (GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
window = glfwCreateWindow (640, 480, "OpenGL", NULL, NULL);
if (!window) {
fprintf (stderr, "ERROR: could not open window with GLFW3\n");
glfwTerminate ();
return 1;
}
glfwMakeContextCurrent (window);
/* start GLEW extension handler */
glewExperimental = GL_TRUE;
glewInit ();
glEnable (GL_DEPTH_TEST);
glDepthFunc (GL_LESS);
GLfloat vertices[] = {
0.5f, 0.5f, 0.0f, // Top Right
0.5f, -0.5f, 0.0f, // Bottom Right
-0.5f, -0.5f, 0.0f, // Bottom Left
-0.5f, 0.5f, 0.0f // Top Left
};
GLuint indices[] = { // Note that we start from 0!
0, 1, 3, // First Triangle
1, 2, 3 // Second Triangle
};
GLuint VBO, VAO, EBO;
glGenVertexArrays(1, &VAO);
glGenBuffers(1, &VBO);
glGenBuffers(1, &EBO);
glBindVertexArray(VAO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid*)0);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
while (!glfwWindowShouldClose(window))
{
glfwPollEvents();
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glBindVertexArray(VAO);
glDrawArrays(GL_TRIANGLES, 0, 6);
// glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
glBindVertexArray(0);
glfwSwapBuffers(window);
}
glDeleteVertexArrays(1, &VAO);
glDeleteBuffers(1, &VBO);
glDeleteBuffers(1, &EBO);
glfwTerminate ();
return 0;
}
在while()
之前,但仍然是空的。什么似乎不起作用?Iprintf
以下是我使用的:
Renderer: Intel(R) Iris(TM) Graphics 6100
OpenGL version supported: 4.1 INTEL-10.22.25
glsl: 4.10
我如何解决这个问题
更新01
我有一个带有着色器的版本:
#include <iostream>
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <stdio.h>
const GLchar* vertexShaderSource = "#version 330 core\n"
"layout (location = 0) in vec3 position;\n"
"void main()\n"
"{\n"
"gl_Position = vec4(position.x, position.y, position.z, 1.0);\n"
"}\0";
const GLchar* fragmentShaderSource = "#version 330 core\n"
"out vec4 color;\n"
"void main()\n"
"{\n"
"color = vec4(1.0f, 0.5f, 0.2f, 1.0f);\n"
"}\n\0";
int main ()
{
GLFWwindow* window = NULL;
const GLubyte* renderer;
const GLubyte* version;
if (!glfwInit ()) {
fprintf (stderr, "ERROR: could not start GLFW3\n");
return 1;
}
glfwWindowHint (GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint (GLFW_CONTEXT_VERSION_MINOR, 2);
glfwWindowHint (GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint (GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
window = glfwCreateWindow (640, 480, "OpenGL", NULL, NULL);
if (!window) {
fprintf (stderr, "ERROR: could not open window with GLFW3\n");
glfwTerminate ();
return 1;
}
glfwMakeContextCurrent (window);
glewExperimental = GL_TRUE;
glewInit ();
glEnable (GL_DEPTH_TEST);
glDepthFunc (GL_LESS);
// Build and compile our shader program
// Vertex shader
GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
glCompileShader(vertexShader);
// Check for compile time errors
GLint success;
GLchar infoLog[512];
glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success);
if (!success)
{
glGetShaderInfoLog(vertexShader, 512, NULL, infoLog);
std::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\n" << infoLog << std::endl;
}
// Fragment shader
GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);
glCompileShader(fragmentShader);
// Check for compile time errors
glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success);
if (!success)
{
glGetShaderInfoLog(fragmentShader, 512, NULL, infoLog);
std::cout << "ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\n" << infoLog << std::endl;
}
// Link shaders
GLuint shaderProgram = glCreateProgram();
glAttachShader(shaderProgram, vertexShader);
glAttachShader(shaderProgram, fragmentShader);
glLinkProgram(shaderProgram);
// Check for linking errors
glGetProgramiv(shaderProgram, GL_LINK_STATUS, &success);
if (!success) {
glGetProgramInfoLog(shaderProgram, 512, NULL, infoLog);
std::cout << "ERROR::SHADER::PROGRAM::LINKING_FAILED\n" << infoLog << std::endl;
}
glDeleteShader(vertexShader);
glDeleteShader(fragmentShader);
GLfloat vertices[] = {
0.5f, 0.5f, 0.0f, // Top Right
0.5f, -0.5f, 0.0f, // Bottom Right
-0.5f, -0.5f, 0.0f, // Bottom Left
-0.5f, 0.5f, 0.0f // Top Left
};
GLuint indices[] = { // Note that we start from 0!
0, 1, 3, // First Triangle
1, 2, 3 // Second Triangle
};
GLuint VBO, VAO, EBO;
glGenVertexArrays(1, &VAO);
glGenBuffers(1, &VBO);
glGenBuffers(1, &EBO);
glBindVertexArray(VAO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid*)0);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
while (!glfwWindowShouldClose(window))
{
glfwPollEvents();
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
// Draw our first triangle
glUseProgram(shaderProgram);
glBindVertexArray(VAO);
// glDrawArrays(GL_TRIANGLES, 0, 6);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
glBindVertexArray(0);
// Swap the screen buffers
glfwSwapBuffers(window);
}
glDeleteVertexArrays(1, &VAO);
glDeleteBuffers(1, &VBO);
glDeleteBuffers(1, &EBO);
glfwTerminate ();
return 0;
}
#包括
#包括
#包括
#包括
const GLchar*vertexShaderSource=“#版本330核心\n”
“布局(位置=0)在vec3位置;\n”
“void main()\n”
“{\n”
gl_位置=vec4(位置.x,位置.y,位置.z,1.0);\n
"}\0";
const GLchar*fragmentShaderSource=“#版本330核心\n”
“输出vec4颜色;\n”
“void main()\n”
“{\n”
color=vec4(1.0f,0.5f,0.2f,1.0f);\n
“}\n\0”;
int main()
{
GLFWwindow*window=NULL;
常量GLubyte*渲染器;
常量GLubyte*版本;
如果(!glfwInit()){
fprintf(stderr,“错误:无法启动GLFW3\n”);
返回1;
}
glfwWindowHint(GLFW_上下文_版本_专业,3);
glfwWindowHint(GLFW_上下文_版本_小调,2);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT,GL_TRUE);
glfwWindowHint(GLFW_OPENGL_配置文件、GLFW_OPENGL_核心配置文件);
window=glfwCreateWindow(640480,“OpenGL”,NULL,NULL);
如果(!窗口){
fprintf(stderr,“错误:无法用GLFW3打开窗口\n”);
glfwderminate();
返回1;
}
glfwMakeContextCurrent(窗口);
glewExperimental=GL_TRUE;
glewInit();
glEnable(GLU深度试验);
glDepthFunc(GL_LESS);
//构建并编译我们的着色器程序
//顶点着色器
GLuint vertexShader=glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertexShader,1和vertexShaderSource,NULL);
glCompileShader(顶点着色器);
//检查编译时错误
辉煌的成功;
GLchar信息日志[512];
glGetShaderiv(顶点着色器、GL\u编译状态和成功);
如果(!成功)
{
glGetShaderInfoLog(vertexShader,512,NULL,infoLog);
我发现了这个问题
这是一条线:
glEnable (GL_DEPTH_TEST);
使四边形不显示。我对行进行注释,然后一切正常。我发现了问题
这是一条线:
glEnable (GL_DEPTH_TEST);
使四边形不显示。我对行进行注释,然后一切正常。你的着色器在哪里?@BDL请检查我的更新。谢谢!你的着色器在哪里?@BDL请检查我的更新。谢谢!实际的问题是,虽然启用了depthbuffer,但你没有清除它。你能将你的注释作为答案吗?这样我就可以使用它了接受它?实际的问题是,虽然启用了depthbuffer,但您没有清除它。您能将您的评论作为答案,以便我接受它吗?