Ok, jest mały sukces. Nie wywala mi żadnego błędu. Ale nic nie widzę, żeby rysowało. Mam tylko czarny ekran. Uporządkowałem definicje tych glGenBuffers.
#include <iostream>
#include <SDL/SDL.h>
#include <SDL/SDL_opengl.h>
typedef void (APIENTRY * PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer);
typedef void (APIENTRY * PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers);
typedef void (APIENTRY * PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers);
typedef void (APIENTRY * PFNGLBUFFERDATAPROC) (GLenum target, int size, const GLvoid *data, GLenum usage);
PFNGLGENBUFFERSPROC glGenBuffers = NULL; // VBO Name Generation Procedure
PFNGLBINDBUFFERPROC glBindBuffer = NULL; // VBO Bind Procedure
PFNGLBUFFERDATAPROC glBufferData= NULL; // VBO Data Loading Procedure
PFNGLDELETEBUFFERSPROC glDeleteBuffers = NULL;
int main(int argc,char *argv[])
{
int zakoncz = 0;
int i = 0;
SDL_Init(SDL_INIT_VIDEO);
SDL_SetVideoMode(800, 600, 32, SDL_OPENGL|SDL_RESIZABLE);
glViewport(0, 0, 800, 600);
GLuint triangleVBO=0;
const float NUM_OF_VERTICES_IN_DATA=3;
float data[3][3] = { {0.0, 1.0, 0.0},
{-1.0, -1.0, 0.0},
{1.0, -1.0, 0.0}};
SDL_Event zdarzenie;
glGenBuffers = (PFNGLGENBUFFERSPROC)SDL_GL_GetProcAddress("glGenBuffers");
glBindBuffer=(PFNGLBINDBUFFERPROC)SDL_GL_GetProcAddress("glBindBuffer"); // VBO Bind Procedure
glBufferData=(PFNGLBUFFERDATAPROC)SDL_GL_GetProcAddress("glBufferData"); // VBO Data Loading Procedure
glDeleteBuffers=(PFNGLDELETEBUFFERSPROC)SDL_GL_GetProcAddress("glDeleteBuffers");
glGenBuffers(1, &triangleVBO); //tu jest b³¹d
//std::cout << SDL_GetError();
//glGetError();
//std::cout << glGetError();
glBindBuffer(GL_ARRAY_BUFFER_ARB, triangleVBO);
glBufferData(GL_ARRAY_BUFFER_ARB, NUM_OF_VERTICES_IN_DATA*9*sizeof(double), &data[0][0], GL_STATIC_DRAW_ARB);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, &data[0][0]);
//glClearColor(1.0, 0.0, 0.0, 1.0);
glColor3f(0.0f, 1.0f, 0.0f);
glDrawArrays(GL_TRIANGLES,0,3);
//glDisableClientState(GL_VERTEX_ARRAY);
//glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
glDeleteBuffers(1, &triangleVBO);
while (!zakoncz)
{
SDL_GL_SwapBuffers();
while (SDL_PollEvent(&zdarzenie))
{
switch (zdarzenie.type)
{
case SDL_VIDEORESIZE:
SDL_SetVideoMode(zdarzenie.resize.w, zdarzenie.resize.h,
32, SDL_OPENGL|SDL_RESIZABLE);
glViewport(0, 0, zdarzenie.resize.w, zdarzenie.resize.h);
break;
case SDL_QUIT:
zakoncz = 1;
break;
default:
break;
}
}
}
return 0;
}