Я хочу создать простую современную программу OpenGL hello world. У меня уже есть некоторый опыт работы с современным OpenGL. Однажды я даже собрал свои собственные шейдеры и все такое. Теперь я хочу использовать некоторые более современные функции, такие как glVertexAttribPointer. Код компилируется, но все, что я получаю, это черный экран. Ни один треугольник не появляется. Это какая-то проблема с моей видеокартой или я делаю что-то не так?
Я читал этот урок: https://www.youtube.com/watch?v=Dyue3MzJDss&index=5&list=PLRwVmtr-pp06qT6ckboaOhnm9FxmzHpbY
Когда я смотрю в комментариях, многие говорят, что все, что они получают, это черный экран.
#include <iostream>
#define GL3_PROTOTYPES 1
#include <GL/glew.h>
#include <SDL/SDL.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <vector>
#define BUFFER_OFFSET(i) ((char *)NULL + (i))
GLuint vbo;
GLuint w=0;
float f[]={0.0, 1.0, -1.0, -1.0, 1.0, -1.0}; //vertex array
void init()
{
glClearColor(0,0,0,1);
glEnable(GL_DEPTH_TEST);
glGenBuffers(1,&vbo); //generate an index for the vertexbuffer
glBindBuffer(GL_ARRAY_BUFFER,vbo); //use vbo as ARRAY_BUFFER
glBufferData(GL_ARRAY_BUFFER,sizeof(f),f,GL_STATIC_DRAW);//fill up the array with vertex and color-data
glEnableVertexAttribArray(w);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0));
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glDrawArrays(GL_TRIANGLES,0,3); //draw it
}
int main()
{
SDL_Init(SDL_INIT_EVERYTHING);
SDL_SetVideoMode(640,480,32,SDL_OPENGL);
glewInit();
Uint32 start;
SDL_Event event;
bool running=true;
init();
bool b=false;
while(running)
{
start=SDL_GetTicks();
while(SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_QUIT:
running=false;
break;
case SDL_KEYDOWN:
switch(event.key.keysym.sym)
{
case SDLK_ESCAPE:
running=false;
break;
}
break;
}
}
display();
SDL_GL_SwapBuffers();
if(1000.0/30>SDL_GetTicks()-start)
SDL_Delay(1000.0/30-(SDL_GetTicks()-start));
}
glDeleteBuffers(1,&vbo);
SDL_Quit();
}