Jump to content
  • Advertisement
Sign in to follow this  
nullsquared

Unity SDL + OpenGL does not render anything.

This topic is 4328 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Solution Below.
Hello great GameDev community! How is your day? I am coding in C++ currently, and as you [might] have read (in one of my other threads), I am on my new pc right now. Well, OpenGL applications themselves work wonders. But, my SDL OpenGL application clears the screen and draws nothing, even though I sent 3 verteces to make a simple white triangle. Here is the minimal code:
#include <SDL/SDL.h>
#include <gl/gl.h>
#include <gl/glu.h>

enum {
    SCREENW = 640,
    SCREENH = 480
};

int main(int, char**) {
    if (SDL_Init(SDL_INIT_VIDEO) < 0)
        return 1;

    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);

    SDL_Surface *window = SDL_SetVideoMode(SCREENW, SCREENH, 32, SDL_OPENGL);
    if (!window)
        return 2;

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

    glViewport(0, 0, SCREENW, SCREENH);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    gluPerspective(45.0f, (const float)SCREENW / SCREENH, 1.0f, 1000.0f);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    SDL_Event event; for (bool done = false; !done; ) {
        while (SDL_PollEvent(&event)) {
            if (event.type == SDL_QUIT)
                done = true;
        }

        glClear(GL_COLOR_BUFFER_BIT);

        glTranslatef( 0.0f, 0.0f,-6.0f);

        glBegin(GL_TRIANGLES);
            glVertex3f( 0.0f, 1.0f, 0.0f);
            glVertex3f(-1.0f,-1.0f, 0.0f);
            glVertex3f( 1.0f,-1.0f, 0.0f);
        glEnd();

        SDL_GL_SwapBuffers();
    }

    SDL_Quit();

    return 0;
}



(Sorry for the mess, this is intended to see if everything was set up correctly.) Now, there are 2 possibilities: 1) Something has gone wrong with SDL's (1.2.11) to use OpenGL. [or] 2) I am missing something really small and am not seeing it. Any ideas what could be wrong? This all happened because I decided to experiment with lights (with Beginning OpenGL Game Programming - great book!), and fired up a simple SDL project for OpenGL, since I always used SDL with OpenGL. Once nothing showed up I disabled lights, blending, everything, and still didn't work. So I tried the above example and still no results. I greatly thank you in advance for your replies. *Cheers.* [Edited by - agi_shi on August 16, 2006 6:33:17 PM]

Share this post


Link to post
Share on other sites
Advertisement
Quote:
Original post by agi_shi
Hello great GameDev community! How is your day?

I am coding in C++ currently, and as you [might] have read (in one of my other threads), I am on my new pc right now.

Well, OpenGL applications themselves work wonders. But, my SDL OpenGL application clears the screen and draws nothing, even though I sent 3 verteces to make a simple white triangle.

Here is the minimal code:
*** Source Snippet Removed ***
(Sorry for the mess, this is intended to see if everything was set up correctly.)

Now, there are 2 possibilities:
1) Something has gone wrong with SDL's (1.2.11) to use OpenGL. [or]
2) I am missing something really small and am not seeing it.

Any ideas what could be wrong?

This all happened because I decided to experiment with lights (with Beginning OpenGL Game Programming - great book!), and fired up a simple SDL project for OpenGL, since I always used SDL with OpenGL. Once nothing showed up I disabled lights, blending, everything, and still didn't work. So I tried the above example and still no results.

I greatly thank you in advance for your replies. *Cheers.*


I'm not clearing the modelview matrix after translating [grin], and thus my triangle moves too far away from the eye to be visible.

I'll leave this post open so that anyone that might accidentally make the same mistake will easily fix it [wink].

Share this post


Link to post
Share on other sites
Generally glPushMatrix and glPopMatrix are used to save and restore the current transformation. These functions are also perfect for setting up hierarchical transformations(cameras,animation,etc).

Example:
glPushMatrix();
..do glTranslate,glRotate,glMultMatrix,glScale calls
..render using current modelview matrix
glPopMatrix();

This is the preferred method of getting the modelview back to its original state. I'am not sure if this is what you meant when you said you forgot to clear it.


Good Luck.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!