Jump to content

  • Log In with Google      Sign In   
  • Create Account


Nathan Handley

Member Since 04 May 2002
Offline Last Active Jan 22 2014 01:28 PM
-----

Posts I've Made

In Topic: Stuck on nested FrameBufferObjects

15 February 2013 - 10:15 AM

In the end, it was the texture size issue. For any Googlers out there, this works:

 

    uint16 mDisplayHeight = 1000;
    uint16 mDisplayWidth = 1600;
    int32 mVideoFlags;

    // Init SDL
    SDL_Init(SDL_INIT_VIDEO);
    mVideoFlags  = SDL_OPENGL;          // Use OpenGL in SDL
    mVideoFlags |= SDL_HWPALETTE;       // Hardware enabled palette
    const SDL_VideoInfo* sdlVideoInfo = SDL_GetVideoInfo();
    if (sdlVideoInfo->hw_available)
        mVideoFlags |= SDL_HWSURFACE;   // Hardware enabled surfaces
    else
        mVideoFlags |= SDL_SWSURFACE;   // Software enabled surfaces
    if (sdlVideoInfo->blit_hw)
        mVideoFlags |= SDL_HWACCEL;     // Hardware enabled blitting
    SDL_SetVideoMode(mDisplayWidth, mDisplayHeight, 32, mVideoFlags);
    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
    SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, 1);

    // Initialize OpenGL
    glewInit();
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glDisable(GL_DEPTH_TEST);

    // Create the frame buffers and textures
    unsigned int mFrameBufferTexIDs[2];
    unsigned int mFrameBufferObjectIDs[2];
    for (int i = 0; i < 2; i++)
    {
        glGenFramebuffers(1, &mFrameBufferObjectIDs[i]);
        glBindFramebuffer(GL_FRAMEBUFFER, mFrameBufferObjectIDs[i]);
        glGenTextures(1, &mFrameBufferTexIDs[i]);
        glBindTexture(GL_TEXTURE_RECTANGLE_ARB, mFrameBufferTexIDs[i]);
        glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
        glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
        glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA8, mDisplayWidth, mDisplayHeight, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL);
        glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE_ARB, mFrameBufferTexIDs[i], 0);
        glBindFramebuffer(GL_FRAMEBUFFER, 0);
    }

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, mDisplayWidth, mDisplayHeight, 0, -1, 1);
    glMatrixMode(GL_MODELVIEW);

    // Framebuffer and texture arrays are as follows:
    // 0 : Final output (what I want to present to the screen)
    // 1 : Intermediate output (what I want to render to and then render THAT to the screen)
    bool renderToIntermediateFBO = true;

    while(true)
    {
        if (renderToIntermediateFBO == false)
        {
            glBindFramebuffer(GL_FRAMEBUFFER, mFrameBufferObjectIDs[0]);

            // Draw a quad with no texture
            glDisable(GL_TEXTURE_RECTANGLE_ARB);
            glColor3f(1.0f, 1.0f, 0.0f);
            glBegin(GL_QUADS);
                glVertex2i(10, 10);
                glVertex2i(50, 10);
                glVertex2i(50, 50);
                glVertex2i(10, 50);
            glEnd();
            glEnable(GL_TEXTURE_RECTANGLE_ARB);
        }
        else
        {
            glBindFramebuffer(GL_FRAMEBUFFER, mFrameBufferObjectIDs[1]);

            // Draw a quad with no texture
            glDisable(GL_TEXTURE_RECTANGLE_ARB);
            glColor3f(1.0f, 1.0f, 0.0f);
            glBegin(GL_QUADS);
                glVertex2i(10, 10);
                glVertex2i(50, 10);
                glVertex2i(50, 50);
                glVertex2i(10, 50);
            glEnd();
            glEnable(GL_TEXTURE_RECTANGLE_ARB);

            // Draw the intermediate FBO onto the final FBO
            glBindFramebuffer(GL_FRAMEBUFFER, mFrameBufferObjectIDs[0]);
            glBindTexture(GL_TEXTURE_RECTANGLE_ARB, mFrameBufferTexIDs[1]);
            glBegin(GL_QUADS);
                glTexCoord2i(0, mDisplayHeight);
                glVertex2i(0, 0);
                glTexCoord2i(mDisplayWidth, mDisplayHeight);
                glVertex2i(mDisplayWidth, 0);
                glTexCoord2i(mDisplayWidth, 0);
                glVertex2i(mDisplayWidth, mDisplayHeight);
                glTexCoord2i(0, 0);
                glVertex2i(0, mDisplayHeight);
            glEnd();

            // Draw another untextured quad on the final FBO
            glDisable(GL_TEXTURE_RECTANGLE_ARB);
            glColor3f(0.0f, 1.0f, 1.0f);
            glBegin(GL_QUADS);
                glVertex2i(20, 20);
                glVertex2i(60, 20);
                glVertex2i(60, 60);
                glVertex2i(20, 60);
            glEnd();
            glEnable(GL_TEXTURE_RECTANGLE_ARB);
        }

        // Present the final information to the screen
        glBindFramebuffer(GL_FRAMEBUFFER, 0);
        glLoadIdentity();
        glBindTexture(GL_TEXTURE_RECTANGLE_ARB, mFrameBufferTexIDs[0]);
        glColor3f(1.0f, 1.0f, 1.0f);
        glBegin(GL_QUADS);
            glTexCoord2i(0, mDisplayHeight);
            glVertex2i(0, 0);
            glTexCoord2i(mDisplayWidth, mDisplayHeight);
            glVertex2i(mDisplayWidth, 0);
            glTexCoord2i(mDisplayWidth, 0);
            glVertex2i(mDisplayWidth, mDisplayHeight);
            glTexCoord2i(0, 0);
            glVertex2i(0, mDisplayHeight);
        glEnd();
        SDL_GL_SwapBuffers();
    }

 


In Topic: Stuck on nested FrameBufferObjects

14 February 2013 - 08:07 PM

I disable GL_TEXTURE_RECTANGLE in order to unbind the current texture, so that the quad that is rendered is simply color splashed. I'm rendering 2D style, so Ortho should handle what I would have used viewport for.

I've not see that frame debugger before. Thanks. I'll take a look. When I try and dump the texture memory manually of that second texture, it doesn't appear that anything is being written there. Even more surprising, there are no GL_ERRORS! I've even adjusted the generated texture to be a power of two.

It has to be something simple... I just know it.

Edit: Oh, I had an extra disable. I see what you mean. Clipped it out.

In Topic: So who is still around these days?

07 October 2011 - 12:32 PM

I can't seem to get away from here.

In Topic: Locking Down an Application

07 October 2011 - 12:31 PM

If you're worried about damage to your system, and you use windows, grab Sandboxie.

If it's a privacy concern, the solutions to that can be rough. I don't buy many games with monitoring software or DRM, but when I do I use a clean dual-bootable Windows 7 Install with a strict firewall just for that purpose. Once I'm done playing whatever-game it was, I sometimes refresh with a clean image before playing a new game.

Really... that's all you can do. If you want privacy, you're going to have to try very damn hard for the reasons people listed thus far. Google knows who you are. Facebook knows. Every game 'platform' knows. Every Console. You're not really going to fall off the grid unless you take some pretty extreme measures, and if you haven't been doing that yet then it's probably too late anyway. So really, don't worry much about it.

In Topic: Covered or Naked, That is a Question?

27 September 2011 - 06:02 PM

Depends. Generally, I see nude or light-armor as heroic. See:
Posted Image

Heroic characters have heroic traits. Low reliance on armor signifies natural toughness, which is a desirable physical state. Sexiness and fit/form are also desirable physical states.

Your question and source are more scoped around cultural context. Some cultures-- specifically in America-- it's only really taboo if the female shows skin. If you need an example to prove that, just go to any book store and count the number of super-built-super-sexy men on the covers of the Romance novels. Stores of equal display of topless women here are 'adult only'. Be mindful, that's just America! Think of countries where women are forced to wear clothes head-to-toe. In these, such as the one linked above, it's a no brainer that more needs to be covered.

As long as both genders fit under the same rules in a game, I like it either way. In fact, when I see a powerful character (male or female) messing up hordes of creatures or people wearing bearly anything, I usually think "Damn, he/she is bad ass". On the flip side, I love a good highly ornate heavy armor design as well. In the end, I care more about form rather than function in most fantasy games unless it's a "Super Serious" game with no magic or dragons and stuff.

In the example you linked, however, I like the more covered armor style of the female for sure.

PARTNERS