为什么glDrawArrays在Mac上不使用OpenGL进行绘制
Why glDrawArrays doesn't draw with OpenGL on mac
我是OpenGL的新手,我不明白为什么窗口中没有显示任何内容。我正在使用Mavericks(OS X 10.9.5),我想应该缺少一些东西
#include <SFML/Window.hpp>
#include <SFML/OpenGL.hpp>
#include "FirstTriangleExample.h"
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;
GLuint VertexArrayID;
void FirstTriangleExample::init() {
glClearColor(0.0f, 0.0f, 0.4f, 0.0f);
glGenVertexArraysAPPLE(1, &VertexArrayID);
glBindVertexArrayAPPLE(VertexArrayID);
glGenBuffers(1, &vertexbuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data), g_vertex_buffer_data, GL_STATIC_DRAW);
}
// called in loop
void FirstTriangleExample::update() {
glClear( GL_COLOR_BUFFER_BIT );
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (void*)0);
glDrawArrays(GL_TRIANGLES, 0, 3);
glDisableVertexAttribArray(0);
glFlush();
}
void FirstTriangleExample::dispose() {
glDeleteBuffers(1, &vertexbuffer);
glDeleteVertexArraysAPPLE(1, &VertexArrayID);
glDeleteProgram(programID);
}
下面的例子一切都很好(我看到红色方块)
#include "RedSquareExample.h"
#include <SFML/OpenGL.hpp>
void RedSquareExample::init() {}
void RedSquareExample::update() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_QUADS);
glColor3f(0.0f, 1.0f, 0.0f);
glVertex2f(-0.5f, -0.5f);
glVertex2f( 0.5f, -0.5f);
glVertex2f( 0.5f, 0.5f);
glVertex2f(-0.5f, 0.5f);
glEnd();
glFlush();
}
void RedSquareExample::dispose() {}
也许问题出在使用APPLE扩展(glGenVertexArraysAPPLE()
和glBindVertexArrayAPPLE()
)上?
从您的代码中可以看出,您使用的是固定函数管道。但是这个代码:
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (void*)0);
仅应在使用着色器时工作。在固定功能的情况下,您可能想要使用类似的东西
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, (void*)0);
此外,您没有正确使用VAO。VAO的目的是存储缓冲区与属性的绑定,但无论如何都要在更新方法中重置绑定。
相关文章:
- 如何在Visual Basic中使用矩形函数OpenGL绘制矩形
- OpenGL绘制三角形而不是正方形
- 使用 OpenGL 绘制 8 x 15 矩形网格C++ - 崩溃
- C++:OpenGL:绘制多个几何图形
- 使用OpenGL绘制更多对象时,性能会降低
- C openGL绘制像素
- 用OpenGL绘制三角形
- 如何使用Legacy OpenGL绘制不同的彩色线条
- Opengl 3+ 绘制不同颜色的线条
- OpenGL绘制三角形只有白色
- 使用 OpenGL 绘制基本三角形
- OpenGL-绘制相机空间后,将模型放置在世界空间中
- 用OpenGL绘制Sierpinski的麻烦
- 用OpenGL绘制任意线(即,轴范围没有限制)
- OpenGL绘制的是椭圆形而不是圆形
- OpenGL绘制圆圈 /椭圆(填充)无GLBEGIN
- OpenGL绘制程序在每次击键时都会更改
- 使用OpenGL绘制三角形:如何使用两个类进行管理
- Opengl绘制半圆
- OpenGL绘制多个对象