Problem programming with SDL and OpenGL

Started by
3 comments, last by Juanxo 14 years ago
I have just started programming in C++ while using the SDL and OpenGL libraries. Everything was going fine until my 'raw' OpenGL commands started returning an error in my compiler. The code of my program is below. There are two separate files, "2d3PortalEngine.cpp" and "2D3PortalEngine.h". I do not understand why my OpenGL commands are not working because in the file "SDL_opengl.h", the OpenGL library as well as "windows.h" are already included. I have looked on the forum he as well as the web and have found similar problems, but their solutions are not working. One solution was to add "-lGL" to my linker settings. This did not work, because my compiler told me that it could not find "-lGL". Keep in mind that this program runs perfectly fine until I start making pure OpenGL calls. I have marked where I start having problems with a comment in the code in the file "2D3PortalEngine.h" --------------------- //2D3PortalEngine.cpp #include "2D3PortalEngine.h" #include <iostream> using namespace std; int main(int argc, char* args[]){ // Initializes the engine if(Engine.Init(640, 480, 32, SDL_OPENGL)) // if Initialization is successful, we start our Game Loop while(Engine.bRunning){ Engine.Input(); Engine.EventsHandler(); Engine.Render(); } else // Exits our program. Only happens when bRunning=false SDL_Quit(); return 0; } ---------------------------- ---------------------------- //2d3PortalEngine.h // #ifdef 2D3PortalEngine_h // #define 2D3PortalEngine_h #include "SDL/SDL.h" #include "SDL/SDL_opengl.h" #include <iostream> using namespace std; // This is our EngineEditor class // This takes care of all the Initialization, Input, Event Handling, and Rendering class EngineEditor{ private: public: // bRunning is what tells our program if it is running or not // Our program runs while bRunning=true, if bRunning=false, our program terminates int sWidth, sHeight, bpp, flags; bool bRunning; SDL_Surface *Screen; bool Init(int sWidth, int sHeight, int bpp, int flags); void Input(); void EventsHandler(); void Render(); }Engine; void EngineEditor::Input(){ // SDL_EVENT variable that holds the key input SDL_Event KeyEvent; while(SDL_PollEvent(&KeyEvent)){ // Checks to see if a key was pressed if(KeyEvent.type == SDL_KEYDOWN){ switch (KeyEvent.key.keysym.sym){ // Specific Keypresses go here } break; } // Checks to see if a key was released if(KeyEvent.type == SDL_KEYUP){ switch (KeyEvent.key.keysym.sym){ // Specific KeyUps goes here case SDLK_ESCAPE: Engine.bRunning=false; break; } break; } } return ; } void EngineEditor::EventsHandler(){ return ; } void EngineEditor::Render(){ return ; } bool EngineEditor::Init(int sWidth, int sHeight, int bpp, int flags){ Engine.bRunning = true; SDL_Init(SDL_INIT_EVERYTHING); SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 8 ); SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 8 ); SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 8 ); SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 32 ); SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 ); Engine.Screen = SDL_SetVideoMode(sWidth, sHeight, bpp, flags); // This is where I am having problems!!! glEnable(GL_TEXTURE_3D); glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glViewport(0, 0, sWidth, sHeight); glClear(GL_COLOR_BUFFER_BIT); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0f, sWidth, sHeight, 0.0f, -1.0f, 1.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); SDL_GL_SwapBuffers(); return true; } // #endif
Advertisement
post the errors it is spitting out. I don't see you including the gl headers. It could also be that you didn't set the compiler to look in the correct directory for the gl headers, or that you didn't add the gl library path to your linker settings. but paste the errors so we can help

-me
Here is a link to the screenshots of the errors as well as what my compiler is linking to.

http://img691.imageshack.us/g/searchdirectorieslinker.gif/

The compiler that I am using is Code::Blocks. The gl headers are included in the SDL_opengl.h header file so I should not have to include them myself, at least for as much as I understand including files to work.

-BiasxEnvy
I believe I finally solved my problem, I went into my linker settings and linked my project with libglu3s.a and libopengl32.a.
you have to link OpenGL. If you are using windows, I think the command was -lGL

This topic is closed to new replies.

Advertisement