Jump to content

  • Log In with Google      Sign In   
  • Create Account

OpenGL Rendering over SDL


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
9 replies to this topic

#1 xXDreamXx   Members   -  Reputation: 114

Like
0Likes
Like

Posted 24 October 2012 - 07:45 PM

Hey guys. My problem may be pretty simple. I am writing some code for a world. I have it where opengl renders and sdl does everything else. The problem is that SDL wants to render before opengl, and if It doesn't create a screen I can't control my audio sound effect events. Does anyone know how to make SDL no render and give me only audio and controls with opengl doing the rendering thanks.

I will attach the current code of the audio for sdl. The issue is that if I don't have
SDL_Surface *screen;
screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE);

uncommented out; I am not able to use my events. Worse it will not let opengl render over SDL.

I will not let me upload the file so here is the code.


/*This program is a test program for using SDL Mixer to create sound in programs
Music and file loading on program works great. I just need to figure out how to control audio effect events without
SDL needing to create a screen.
I also need to put this into a function
Note: The only issue with the program is that I can't controly my audio effect events unless I let SDL create a screen*/

#include <SDL/SDL.h>
#include "SDL_mixer.h" //This include library directory may change on different machines


//SDL sound function
void SDL_Sound()
{
SDL_Init(SDL_INIT_AUDIO);
SDL_Surface *screen; //test
screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE); //test
Mix_Chunk* effect1; //new varible to create effects from SDL lib
Mix_Music* music; //used to create the music

//Open Audio
Mix_OpenAudio(22050, MIX_DEFAULT_FORMAT,2, 4096);//require 4 parameters ( references (default 22050 or 41000), format(how to open,number of channels , chunk size)

//Loading Music
music = Mix_LoadMUS("Train.wav"); //assigns music to load Mix_LoadMUS(filenam. filetype)

//Assiging music to load
effect1=Mix_LoadWAV("TrainHorn.wav");

//Playing the music
Mix_PlayMusic(music,-1);//Telling program to play the music (play music file, how long to play 0 = play once, -1 = repeat, 1 = will repeat once)


//now to control the effect when key is pressed
bool running=true; //boolean expression to make true
Uint32 start;
//SDL_Event event;
while(running)
{

start=SDL_GetTicks();
SDL_Event event;
while(SDL_PollEvent(&event))
{

switch(event.type)
{
case SDL_QUIT:
running=false;
break;
case SDL_KEYDOWN:
switch(event.key.keysym.sym)
{

case SDLK_1: //number key 1 can be pressed
Mix_PlayChannel(-1, effect1, 0);// there are a total of 8 channels (channel, effect to play, how to repeat)
break;
case SDLK_2: //number key 1 can be pressed
running = false;
break;
}
}
}

};
Mix_FreeChunk(effect1);
Mix_FreeMusic(music);
}



int main(int argc,char** argv)
{


SDL_Sound();


//Closing Audio
Mix_CloseAudio();
SDL_Quit();
return 0;
}

Edited by dreamslayerx, 24 October 2012 - 07:47 PM.


Sponsor:

#2 JTippetts   Moderators   -  Reputation: 8649

Like
0Likes
Like

Posted 24 October 2012 - 09:26 PM

When you say that OpenGL renders, do you mean that you are creating another window via some other means? Why don't you just use SDL_SetVideoMode(640,480,32,SDL_OPENGL) to create your GL window, and still have access to the SDL events and Mixer?

#3 AlexB.hpp   Members   -  Reputation: 201

Like
0Likes
Like

Posted 27 October 2012 - 09:47 AM

I have a little listing for you


#include "SDL/SDL.h"

#include <GL/gl.h>

#include <GL/glu.h>

#include <unistd.h>

#define CHECK_IT(A) \

  if((A)) { \

    SDL_Quit(); \

    return 1; \

  }

void SetupGL() {

  int nRange = 10;

  int w = 640, h = 480;

  glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

  glShadeModel(GL_FLAT);

  glViewport(0, 0, 640, 480); // set size of frame for opengl to build perspective

  glOrtho (-nRange*w/h, nRange*w/h, -nRange, nRange, -nRange, nRange);

  // glMatrixMode(GL_PROJECTION);

  //glLoadIdentity();

  gluPerspective(45.0f, w/h, 0.0f, 500.0f);

  glMatrixMode(GL_MODELVIEW);

  glLoadIdentity();

}

void Draw() {

  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

  glEnable(GL_CULL_FACE | GL_DEPTH_TEST);

  glPushMatrix();



  glBegin(GL_TRIANGLE_STRIP);

  {

    //glTranslatef(0.0, 0.0, 10.0);

    glColor3f(0.5f, 0.5f, 0.0f);

    glVertex2f(0.0f, 0.0f);

    glVertex2f(-10.0f, 0.0f);

    glVertex2f(0.0f, -10.0f);

    glVertex2f(-10.0f, -10.0f);

  }

  glEnd();

  glBegin(GL_TRIANGLE_STRIP);

  {

    glColor3f(0.0, 0.5, 0.5);

    glVertex2f(0.0f, 0.0f);

    glVertex2f(10.0f, 0.0f);

    glVertex2f(0.0f, 10.0f);

    glVertex2f(10.0f, 10.0f);

    glTranslatef(10.0, 0.0, 0.0);

  }

  glEnd();

  glPopMatrix();

  glMatrixMode(GL_PROJECTION);

  glLoadIdentity();

  glMatrixMode(GL_MODELVIEW);

  SDL_GL_SwapBuffers();

}

int main() {

  int result = SDL_Init(SDL_INIT_VIDEO);

  CHECK_IT(result < 0);

  SDL_SetVideoMode(640, 480, 16, SDL_OPENGL); // here you set openGL using for render inframe stuff

  SetupGL();

  Draw();

  sleep(3);

  SDL_Quit();

  return 0;

}



I pretty sure this code has few mistakes but it still showing how to link sdl and opengl.
C x 2 C x o C x C f nice C x C s C x C c

#4 xXDreamXx   Members   -  Reputation: 114

Like
0Likes
Like

Posted 30 October 2012 - 07:55 AM

Here are the windows that I am getting. I have attached them a a file. I only want the opengl window, but I don't need the SDL App window to come up. The big issue is will I have to put my OpenGL rendering within the while(running = true) loop to just get it to render with the sound? I only want OpenGL to do rendering, but SDL to control sound and events. Is that possible? Currently the only thing that I want from SDL is Audio, but it wants to control video or a screen as well, even though I only use SDL_Init(SDL_INIT_AUDIO).

I have already actually tried inputing SDL_SetVideoMode(640,480,32,SDL_OPENGL). SDL still wants to render a screen if I want to control my sound effect events.

Here is the adjusted code for the main section of the program. I decided to move the sound function into the main program. There may be a better way of doing this though.

SDL and glut conflicts, since they like to control the same things. Basically here SDL events can not even be controlled at all unless you first do SDL_SetVideoMode().

[source lang="java"]int main(int argc, char ** argv){//SDL_Init(SDL_INIT_AUDIO);//Real program glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE| GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(500,500); glutCreateWindow("colorcube"); //Function that makes display list for the Terrain loadTerrain(); //Original Code //function added in to make display list for Geometry makeGeometry(); cout<<endl; cout<<" Elevation[1] : " <<Elevation[1]<<endl; //Place initialization function here initRendering(); //SOUND TESTING NEW// SDL_Sound();//*********************************************************Big test: Delete all later************************************************************** SDL_Init(SDL_INIT_AUDIO); SDL_Surface *screen; //test screen = SDL_SetVideoMode(640, 480, 32, SDL_OPENGL); //test Mix_Chunk* effect1; //new varible to create effects from SDL lib Mix_Music* music; //used to create the music //Open Audio Mix_OpenAudio(22050, MIX_DEFAULT_FORMAT,2, 4096);//require 4 parameters ( references (default 22050 or 41000), format(how to open,number of channels , chunk size) //Loading Music music = Mix_LoadMUS("Train.wav"); //assigns music to load Mix_LoadMUS(filenam. filetype) //Assiging music to load effect1=Mix_LoadWAV("TrainHorn.wav"); //Playing the music Mix_PlayMusic(music,-1);//Telling program to play the music (play music file, how long to play 0 = play once, -1 = repeat, 1 = will repeat once) //now to control the effect when key is pressed bool running=true; //boolean expression to make true Uint32 start; SDL_Event event; while(running) { start=SDL_GetTicks(); SDL_Event event; while(SDL_PollEvent(&event)) { switch(event.type) { case SDL_QUIT: running=false; break; case SDL_KEYDOWN: switch(event.key.keysym.sym) { case SDLK_1: //number key 1 can be pressed Mix_PlayChannel(-1, effect1, 0);// there are a total of 8 channels (channel, effect to play, how to repeat) break; case SDLK_2: //number key 1 can be pressed running = false; break; } } glutReshapeFunc(myReshape); glutDisplayFunc(display); //glutIdleFunc(spinCube); glutMouseFunc(mouse); glutMainLoop(); // } };//**************************************************************************************************************************************************//Section for deleting variable arrays to free up memory//These may be properly placed later; like in a new load clear function when putting in multiple geometry//Note** If I do not use display list to store the image and these are placed before the main loop the image will not show, since the stored data would be deleted on the second loop of main//This will be used to free up the memory so that I can read in another object using a function delete [] vertices; delete [] vertNorm; delete [] vertCoord; delete [] makePoint; delete [] texPoint; delete [] VNormPoint; //Original //glutMainLoop(); // anything placed after this will really not be read since it makes main loop until it comes back to this function then repeats//********************SOUND TEST AREA 2******************************************************************* //Deleteing variables recently created //Mix_FreeChunk(effect1); //Mix_FreeMusic(music); //Closing Audio Mix_CloseAudio(); SDL_Quit(); //**********************END SOUND TEST AREA 2********************************************************** return 0;}[/source]

Attached Thumbnails

  • Windows1.jpg

Edited by dreamslayerx, 30 October 2012 - 01:55 PM.


#5 Sponji   Members   -  Reputation: 1354

Like
0Likes
Like

Posted 31 October 2012 - 02:19 AM

I only want OpenGL to do rendering, but SDL to control sound and events.

That doesn't make much sense, what do you need GLUT then for? You can do the same OpenGL stuff with SDL, so why not just use it?
Derp

#6 AlexB.hpp   Members   -  Reputation: 201

Like
0Likes
Like

Posted 31 October 2012 - 03:29 AM

SDL and glut conflicts, since they like to control the same things.

Exactly! It do the same thing. You have to chose one and use it... If you want to use glut so just find another one sound handler ie OpenAL.
C x 2 C x o C x C f nice C x C s C x C c

#7 xXDreamXx   Members   -  Reputation: 114

Like
0Likes
Like

Posted 31 October 2012 - 06:39 AM


I only want OpenGL to do rendering, but SDL to control sound and events.

That doesn't make much sense, what do you need GLUT then for? You can do the same OpenGL stuff with SDL, so why not just use it?


SDL and glut conflicts, since they like to control the same things.

Exactly! It do the same thing. You have to chose one and use it... If you want to use glut so just find another one sound handler ie OpenAL.


That's very true. I wanted to explore the functionality of both, but for now I will only use SDL. I think SDL provides a more straight forward approach. I haven't been able to find a really good tutorial for OpenAL for beginners. I'm going to adjust the code later and see what you guys think about it. I am going to use only SDL in the first case. Also any advice on whether I should use SDL or glut/OpenAL? Which would be more practical for creating an rpg game?

#8 AlexB.hpp   Members   -  Reputation: 201

Like
1Likes
Like

Posted 31 October 2012 - 11:32 PM

That's very true. I wanted to explore the functionality of both, but for now I will only use SDL. I think SDL provides a more straight forward approach. I haven't been able to find a really good tutorial for OpenAL for beginners. I'm going to adjust the code later and see what you guys think about it. I am going to use only SDL in the first case. Also any advice on whether I should use SDL or glut/OpenAL? Which would be more practical for creating an rpg game?

Use SDL for your projects. It provides set of completed tools to create nice looking games.
C x 2 C x o C x C f nice C x C s C x C c

#9 Sponji   Members   -  Reputation: 1354

Like
1Likes
Like

Posted 01 November 2012 - 02:48 AM

I would use SDL too, but it doesn't matter that much. Remember that you could also use SDL for window handling/input and OpenAL for audio. Just don't make your game depending (too much) on some windowing thingie.
Derp

#10 xXDreamXx   Members   -  Reputation: 114

Like
0Likes
Like

Posted 01 November 2012 - 07:50 AM

Thanks for the advice.




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS