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 ); }
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(); }
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; }