void render()
{
    //Clear color buffer
    glClear( GL_COLOR_BUFFER_BIT );

    //Calculate texture maxima
    GLfloat textureRight = (GLfloat)SCREEN_WIDTH / (GLfloat)gRepeatingTexture.textureWidth();
    GLfloat textureBottom = (GLfloat)SCREEN_HEIGHT / (GLfloat)gRepeatingTexture.textureHeight();

    //Use repeating texture
    glBindTexture( GL_TEXTURE_2D, gRepeatingTexture.getTextureID() );

    //Switch to texture matrix
    glMatrixMode( GL_TEXTURE );

    //Reset transformation
    glLoadIdentity();

    //Scroll texture
    glTranslatef( gTexX / gRepeatingTexture.textureWidth(), gTexY / gRepeatingTexture.textureHeight(), 0.f );

    //Render
    glBegin( GL_QUADS );
        glTexCoord2f(          0.f,           0.f ); glVertex2f(          0.f,           0.f );
        glTexCoord2f( textureRight,           0.f ); glVertex2f( SCREEN_WIDTH,           0.f );
        glTexCoord2f( textureRight, textureBottom ); glVertex2f( SCREEN_WIDTH, SCREEN_HEIGHT );
        glTexCoord2f(          0.f, textureBottom ); glVertex2f(          0.f, SCREEN_HEIGHT );
    glEnd();

    //Update screen
    glutSwapBuffers();
}
Пример #2
0
void render()
{
    // clear color buffer
    glClear(GL_COLOR_BUFFER_BIT);

    // calculate centered offsets
    GLfloat x = (SCREEN_WIDTH - gCheckerBoardTexture.textureWidth()) / 2.f;
    GLfloat y = (SCREEN_HEIGHT - gCheckerBoardTexture.textureHeight()) / 2.f;

    // render checkerboard texture
    gCheckerBoardTexture.render(x, y);

    // update screen
    glutSwapBuffers();
}
void update()
{
    //Scroll texture
    gTexX++;
    gTexY++;

    //Cap scrolling
    if( gTexX >= gRepeatingTexture.textureWidth() )
    {
        gTexX = 0.f;
    }
    if( gTexY >= gRepeatingTexture.textureHeight() )
    {
        gTexY = 0.f;
    }
}
Пример #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;
}