// Framework // (c) 2003 Luke Philpot. #define BUFFER_OFFSET(i) ((char *)NULL + (i)) #define win32 // comment out for non win32 #ifdef win32 #define WIN32_LEAN_AND_MEAN #include #endif #include #include #include #include "glext.h" GLfloat data[] = { -1.0f, 1.0f, 0.0f, -1.0f, -1.0f, 0.0f, 1.0f, -1.0f, 0.0f }; GLuint buffer = 0; PFNGLBINDBUFFERARBPROC glBindBufferARB = NULL; PFNGLGENBUFFERSARBPROC glGenBuffersARB = NULL; PFNGLBUFFERDATAARBPROC glBufferDataARB = NULL; /* =========== main =========== */ #ifdef win32 int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmdLine, int nshow) #else int main(void) #endif { SDL_Event e; // for input // init window SDL_Init(SDL_INIT_VIDEO); SDL_SetVideoMode(640, 480, 32, 2); // set up OpenGL glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45, (float) 640 / (float) 480, 1, 512); glBindBufferARB = (PFNGLBINDBUFFERARBPROC) wglGetProcAddress("glBindBufferARB"); glGenBuffersARB = (PFNGLGENBUFFERSARBPROC) wglGetProcAddress("glGenBuffersARB"); glBufferDataARB = (PFNGLBUFFERDATAARBPROC) wglGetProcAddress("glBufferDataARB"); // enable depth testing glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); glEnableClientState(GL_VERTEX_ARRAY); glClearColor(0.5f, 0.5f, 1.0f, 1.0f); glGenBuffersARB(1, &buffer); glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); glBufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(data), data, GL_STATIC_DRAW_ARB); while (!SDL_PollEvent(&e) || e.type !=2) // check whether esc has been pressed { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0, 0, -3); glBindBufferARB(GL_ARRAY_BUFFER_ARB, buffer); glVertexPointer(3, GL_FLOAT, 0, 0); glDrawArrays(GL_TRIANGLE_STRIP, 0, 3); SDL_GL_SwapBuffers(); } return 0; }