예제 #1
0
void render()
{
    //Clear color buffer
    glClear( GL_COLOR_BUFFER_BIT );

    //Initialize modelview matrix
    glLoadIdentity();

    //Render textured quad using VBOs
    gVBOTexture.render( ( SCREEN_WIDTH - gVBOTexture.imageWidth() ) / 2.f, ( SCREEN_HEIGHT - gVBOTexture.imageHeight() ) / 2.f );
}
예제 #2
0
void render()
{
    // clear color buffer
    glClear(GL_COLOR_BUFFER_BIT);

    // render OpenGL texture
    gCircleTexture.render((SCREEN_WIDTH - gCircleTexture.imageWidth()) / 2.f,
            (SCREEN_HEIGHT - gCircleTexture.imageHeight()) / 2.f);

    // update screen
    glutSwapBuffers();
}
void render()
{
    //Clear color and stencil buffer
    glClear( GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT );
    glLoadIdentity();

    //Disable rendering to the color buffer
    glColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE );

    //Start using the stencil
    glEnable( GL_STENCIL_TEST );

    //Place a 1 where rendered
    glStencilFunc( GL_ALWAYS, 1, 1 );

    //Replace where rendered
    glStencilOp( GL_REPLACE, GL_REPLACE, GL_REPLACE );

    //Render stencil triangle
    glTranslatef( gPolygonX, gPolygonY, 0.f );
    glRotatef( gPolygonAngle, 0.f, 0.f, 1.f );
    glBegin( GL_TRIANGLES );
        glVertex2f(           -0.f / 4.f, -SCREEN_HEIGHT / 4.f );
        glVertex2f(   SCREEN_WIDTH / 4.f,  SCREEN_HEIGHT / 4.f );
        glVertex2f(  -SCREEN_WIDTH / 4.f,  SCREEN_HEIGHT / 4.f );
    glEnd();

    //Reenable color
    glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE );

    //Where a 1 was not rendered
    glStencilFunc( gStencilRenderOp, 1, 1 );

    //Keep the pixel
    glStencilOp( GL_KEEP, GL_KEEP, GL_KEEP );

    //Render stenciled texture
    glLoadIdentity();
    gTexture.render( ( SCREEN_WIDTH - gTexture.imageWidth() ) / 2.f, ( SCREEN_HEIGHT - gTexture.imageHeight() ) / 2.f );

    //Finished using stencil
    glDisable( GL_STENCIL_TEST );

    //Update screen
    glutSwapBuffers();
}
예제 #4
0
bool loadMedia()
{
    // load texture
    if (!gCircleTexture.loadTextureFromFile("./images/circle.png")) {
        cout << "Unable to load circle texture!" << endl;
        return false;
    }

    // lock texture for modificatio
    gCircleTexture.lock();

    // calculate target color
    GLuint targetColor;
    GLubyte *colors = (GLubyte *)&targetColor;

    colors[0] = 000;
    colors[1] = 255;
    colors[2] = 255;
    colors[3] = 255;

    // replace target color with transparent black
    GLuint *pixels = gCircleTexture.getPixelData32();
    GLuint pixelCount = gCircleTexture.textureWidth() * gCircleTexture.textureHeight();

    GLuint i;
    for (i = 0; i < pixelCount; i++) {
        if (pixels[i] == targetColor)
            pixels[i] = 0;
    }

    // diagonal lines
    GLuint x, y;
    int factor = 10;
    for (y = 0; y < gCircleTexture.imageHeight(); y++) {
        for (x = 0; x < gCircleTexture.imageWidth(); x++) {
            if (y % factor != x % factor)
                gCircleTexture.setPixel32(x, y, 0);
        }
    }

    // update texture
    gCircleTexture.unlock();

    return true;
}