Hi everybody I’m learning opengl with sdl from 3DBuzz tutorials which are well explained, but those tutorials were made with sdl 1. after some researching on the internet I got SDL2 and I configured my IDE( which is codeblocks ) to use SDL2 with mingw32.
again, as I mentioned i got some errors that are already solved (mainly with libraries end dependencies as well with the sdl.dll).
now, I compile the program and it successfully compiles, but when I press the RUN button the program window runs for less a second and the following message appears in the command prompt: Process returned 1 (0x1) execution time : 1.933 s
I don’t know what happens and I tried to get some help from internet and asking in onlie forums without a solution.
maybe you SDL2 community can help me to handle this problem.
Here’s the code I wrote following step by step the tutorial.
or maybe I did something wrong with this code?
#include <SDL2/SDL.h>
#include <stdio.h>
#include <stdlib.h>
#if defined (_WIN32) || defined(_WIN64)
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#endif // WIN32
#if defined(__APPLE__) && defined(__MACH__)
#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
#else
#include <GL/gl.h>
#include <GL/glut.h>
#endif // defined
const GLsizei windowWidth = 500;
const GLsizei windowHeight = 500;
GLfloat cubeRotateX = 45.0f;
GLfloat cubeRotateY = 45.0f;
const Uint8 *keys = NULL;
GLvoid establishProjectionMatrix(GLsizei width, GLsizei height)
{
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(50.0f, (GLfloat)width / (GLfloat)height, 0.1f, 200.0f);
}
GLvoid initGL(GLsizei width, GLsizei height)
{
establishProjectionMatrix(width, height);
glShadeModel(GL_SMOOTH);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glEnable(GL_PERSPECTIVE_CORRECTION_HINT);
}
GLvoid displayFPS(GLvoid)
{
static long lastTime = SDL_GetTicks();
static long loops = 0;
static GLfloat fps = 0.0f;
int newTime = SDL_GetTicks();
if (newTime - lastTime > 100)
{
float newFPS = (float)loops / float(newTime - lastTime) * 1000.0f;
fps = (fps + newFPS) / 2.0f;
char title[80];
printf(title, "OpenGL Demo - %2f", fps);
SDL_SetWindowTitle(NULL, title);
lastTime = newTime;
loops = 0;
}
loops++;
}
GLvoid drawScene(GLvoid)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0, 0, -5.0f);
glRotatef(cubeRotateX, 1, 0, 0);
glRotatef(cubeRotateY, 0, 1, 0);
//draw cube
glBegin(GL_QUADS);
//top face
glColor3f(1.0f, 0.5f, 0.0f);
glVertex3f(1.0f, 1.0f, -1.0f);
glVertex3f(-1.0f, 1.0f, -1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f(1.0f, 1.0f, 1.0f);
//bottom face
glColor3f(0.0f, 1.0f, 0.0f);
glVertex3f( 1.0f, -1.0f, -1.0f);
glVertex3f(-1.0f, -1.0f, -1.0f);
glVertex3f(-1.0f, -1.0f, 1.0f);
glVertex3f( 1.0f, -1.0f, 1.0f);
//front face
glColor3f(1.0f, 0.0f, 0.0f);
glVertex3f( 1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f, -1.0f, 1.0f);
glVertex3f( 1.0f, -1.0f, 1.0f);
//back face
glColor3f(1.0f, 1.0f, 0.0f);
glVertex3f( 1.0f, 1.0f, -1.0f);
glVertex3f(-1.0f, 1.0f, -1.0f);
glVertex3f(-1.0f, -1.0f, -1.0f);
glVertex3f( 1.0f, -1.0f, -1.0f);
//left face
glColor3f(0.0f, 0.0f, 1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f, 1.0f, -1.0f);
glVertex3f(-1.0f, -1.0f, -1.0f);
glVertex3f(-1.0f, -1.0f, 1.0f);
//right face
glColor3f(1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 1.0f, 1.0f);
glVertex3f( 1.0f, 1.0f, 1.0f);
glVertex3f( 1.0f, -1.0f, 1.0f);
glVertex3f( 1.0f, -1.0f, 1.0f);
glEnd();
glFlush();
// its suppose to replace glutSwapBuffers() wint SDL_GL_swapBuffers() how can i replace this line?
displayFPS();
}
GLboolean checkKeys(GLvoid)
{
static long lastTime = SDL_GetTicks();
const GLfloat speed = 1.0f;
const long updateTime = 10;
if (keys[SDLK_ESCAPE])
return true;
long newTime = SDL_GetTicks();
if (newTime - lastTime > updateTime)
{
if(keys[SDLK_LEFT])
cubeRotateY -= speed;
if(keys[SDLK_RIGHT])
cubeRotateY += speed;
if(keys[SDLK_UP])
cubeRotateX -= speed;
if(keys[SDLK_DOWN])
cubeRotateX += speed;
}
return false;
}
int main(int argc, char **argv)
{
SDL_Window *window = SDL_CreateWindow(
"SDL2_Demo",
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
windowWidth,
windowHeight,
SDL_WINDOW_OPENGL);
if ( SDL_Init(SDL_INIT_VIDEO) < 0 )
{
fprintf(stderr, "Unable to initialize SDL %s", SDL_GetError());
exit(1);
}
// How can I write this statement in SDL2?
// SDL_SetVideomode is no longer available and i changed it to SDL_SetWindowDisplayMode() but trows an error
/*if ( SDL_SetVideoMode(windowWidth, windowHeight, 0,0) == NULL )
{
fprintf(stderr, "Unable to crete openGL scene %s", SDL_GetError());
exit(2);
}*/
initGL(windowWidth, windowHeight);
SDL_GL_SwapWindow(window);
SDL_GL_SetSwapInterval(1);
keys = SDL_GetKeyboardState(NULL);
int done = 0;
while ( !done )
{
drawScene();
SDL_Event event;
while( SDL_PollEvent(&event) )
{
if ( event.type == SDL_QUIT )
done = 1;
keys = SDL_GetKeyboardState(NULL);
}
if ( checkKeys() )
done = 1;
}
SDL_Quit();
return 1;
}