C++ 不带着色器的OpenGL

C++ 不带着色器的OpenGL,c++,opengl,glfw,C++,Opengl,Glfw,我已经阅读了一些教程来编写以下代码。 唯一的区别是使用SDL而不是GLEW的原始教程 我不明白这个代码有什么错误。它编译了,但我没有看到三角形。(教程也没有使用着色器) #包括 #包括 #包括 #包括 GLFWwindow*窗口; int main(int argc,const char*argv[] { 如果(!glfwInit()) { 返回-1; } glfwWindowHint(GLFW_样本,4个); glfwWindowHint(GLFW_上下文_版本_专业,3); glfwWind

我已经阅读了一些教程来编写以下代码。 唯一的区别是使用SDL而不是GLEW的原始教程

我不明白这个代码有什么错误。它编译了,但我没有看到三角形。(教程也没有使用着色器)

#包括
#包括
#包括
#包括
GLFWwindow*窗口;
int main(int argc,const char*argv[]
{
如果(!glfwInit())
{
返回-1;
}
glfwWindowHint(GLFW_样本,4个);
glfwWindowHint(GLFW_上下文_版本_专业,3);
glfwWindowHint(GLFW_上下文_版本_小调,3);
window=glfwCreateWindow(640480,“测试”,空,空);
如果(窗口==NULL)
{
返回-1;
}
glfwMakeContextCurrent(窗口);
glewExperimental=true;
如果(glewInit()!=GLEW\u确定)
{
返回-1;
}
glfwSetInputMode(窗口,GLFW_粘滞键,GL_真);
glClearColor(0.0f、1.0f、1.0f、1.0f);
做
{
glfwPollEvents();
浮动顶点[]={-0.5,-0.5,0.0,0.5,0.5,-0.5};
glClear(GLU颜色缓冲位);
glvertexattributepointer(0,2,GL_FLOAT,GL_FALSE,0,顶点);
GlenableVertexAttributeArray(0);
gldrawArray(GL_三角形,0,3);
glDisableVertexAttributeArray(0);
glfwSwapBuffers(窗口);
}
while(glfwGetKey(窗口,GLFW_键_退出)!=GLFW_按和GLFWWindowsShouldClose(窗口)==0);
glfwTerminate();
返回0;
}

如果使用的是固定函数管道,则不能使用通用顶点属性,如
glvertexattributepointer

然而,NVIDIA的实现在通用属性和非通用属性之间非法使用别名。这可能就是教程的最初作者在他们的机器上侥幸逃脱的原因

如果要以跨平台的方式编写此文件,必须使用
glvertexinter
glEnableClientState

glVertexPointer(2, GL_FLOAT, 0, vertices);
glEnableClientState(GL_VERTEX_ARRAY);

谢谢OpenGL中是否有一些“预构建”着色器?@Bob5421:没有。这就是固定函数管道。为什么您对不使用着色器如此感兴趣?因为我想先编写一个非常基本的程序。我想做现代的opengltoo@Bob5421:“现代OpenGL”意味着使用着色器。这就是它“现代”的部分原因。类似地,“现代OpenGL”意味着使用缓冲区对象来存储顶点数据。还有其他事情。所以你可以有“一个非常基本的程序”或者“现代opengl”;你不能两者兼得。虽然就我个人而言,我没有看到任何关于着色器或缓冲区对象的特别非“基本”的内容。。。
glVertexPointer(2, GL_FLOAT, 0, vertices);
glEnableClientState(GL_VERTEX_ARRAY);