void cd_illusion_draw_black_hole_icon (Icon *pIcon, CairoDock *pDock, CDIllusionData *pData) { _cairo_dock_enable_texture (); _cairo_dock_set_alpha (pIcon->fAlpha); if (pIcon->fAlpha == 1) _cairo_dock_set_blend_over (); else _cairo_dock_set_blend_alpha (); glBindTexture(GL_TEXTURE_2D, pIcon->iIconTexture); glPushMatrix (); cairo_dock_set_icon_scale (pIcon, pDock, 1.); glEnableClientState (GL_TEXTURE_COORD_ARRAY); glEnableClientState (GL_VERTEX_ARRAY); glTexCoordPointer (2, GL_FLOAT, 2 * sizeof(GLfloat), pData->pBlackHoleCoords); glVertexPointer (2, GL_FLOAT, 2 * sizeof(GLfloat), pData->pBlackHoleVertices); glDrawArrays (GL_QUADS, 0, 4 * (SPIRAL_NB_PTS - 1) * (SPIRAL_NB_PTS - 1)); glPopMatrix (); glDisableClientState (GL_TEXTURE_COORD_ARRAY); glDisableClientState (GL_VERTEX_ARRAY); _cairo_dock_disable_texture (); }
static void _draw_rotating_icon (Icon *pIcon, CairoDock *pDock, CDAnimationData *pData, double fScaleFactor) { gboolean bInvisibleBackground = TRUE; glPushMatrix (); glRotatef (pData->fRotationAngle, 0., 1., 0.); switch (myConfig.iMeshType) { case CD_SQUARE_MESH : default : cairo_dock_set_icon_scale (pIcon, CAIRO_CONTAINER (pDock), fScaleFactor); cd_animation_render_square (pIcon, pDock, bInvisibleBackground); break; case CD_CUBE_MESH : glRotatef (fabs (pData->fRotationAngle/4), 1., 0., 0.); cairo_dock_set_icon_scale (pIcon, CAIRO_CONTAINER (pDock), (1. + pData->fAdjustFactor * (sqrt (2.5) - 1)) * fScaleFactor); cd_animation_render_cube (pIcon, pDock, bInvisibleBackground); break; case CD_CAPSULE_MESH : cairo_dock_set_icon_scale (pIcon, CAIRO_CONTAINER (pDock), fScaleFactor); cd_animation_render_capsule (pIcon, pDock, bInvisibleBackground); break; } glPopMatrix (); }
void cd_animations_draw_wobbly_icon (Icon *pIcon, CairoDock *pDock, CDAnimationData *pData) { glPushMatrix (); cairo_dock_set_icon_scale (pIcon, CAIRO_CONTAINER (pDock), 1.); glColor4f (1., 1., 1., pIcon->fAlpha); glEnable(GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glEnable(GL_TEXTURE_2D); // Je veux de la texture glBindTexture(GL_TEXTURE_2D, pIcon->iIconTexture); glEnable(GL_MAP2_VERTEX_3); // active l'evaluateur 2D des sommets 3D glEnable(GL_MAP2_TEXTURE_COORD_2); glPolygonMode (GL_FRONT, GL_FILL); glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, &pData->pCtrlPts[0][0][0]); glMap2f(GL_MAP2_TEXTURE_COORD_2, 0, 1, 2, 2, 0, 1, 4, 2, &pTexPts[0][0][0]); glMapGrid2f(myConfig.iNbGridNodes, 0.0, 1.0, myConfig.iNbGridNodes, 0.0, 1.0); // Pour definir une grille reguliere de 0.0 a 1.0 en n etapes en u et m etapes en v glEvalMesh2(GL_FILL, 0, myConfig.iNbGridNodes, 0, myConfig.iNbGridNodes); // Pour appliquer cette grille aux evaluateurs actives. glPopMatrix (); if (pDock->bUseReflect) { glPushMatrix (); double x0, y0, x1, y1; double fReflectRatio = myIcons.fReflectSize * pDock->fRatio / pIcon->fHeight / pIcon->fScale; double fOffsetY = pIcon->fHeight * pIcon->fScale/2 + (myIcons.fReflectSize/2 + pIcon->fDeltaYReflection) * pDock->fRatio; if (pDock->bHorizontalDock) { if (pDock->bDirectionUp) { fOffsetY = pIcon->fHeight * pIcon->fScale + pIcon->fDeltaYReflection; glTranslatef (0., - fOffsetY, 0.); glScalef (pIcon->fWidth * pIcon->fWidthFactor * pIcon->fScale, - pIcon->fHeight * pIcon->fScale, 1.); // taille du reflet et on se retourne. x0 = 0.; y0 = 1. - fReflectRatio; x1 = 1.; y1 = 1.; } else { glTranslatef (0., fOffsetY, 0.); glScalef (pIcon->fWidth * pIcon->fWidthFactor * pIcon->fScale, myIcons.fReflectSize * pDock->fRatio, 1.); x0 = 0.; y0 = fReflectRatio; x1 = 1.; y1 = 0.; } } else { if (pDock->bDirectionUp) { glTranslatef (fOffsetY, 0., 0.); glScalef (- myIcons.fReflectSize * pDock->fRatio, pIcon->fWidth * pIcon->fWidthFactor * pIcon->fScale, 1.); x0 = 1. - fReflectRatio; y0 = 0.; x1 = 1.; y1 = 1.; } else { glTranslatef (- fOffsetY, 0., 0.); glScalef (myIcons.fReflectSize * pDock->fRatio, pIcon->fWidth * pIcon->fWidthFactor * pIcon->fScale, 1.); x0 = fReflectRatio; y0 = 0.; x1 = 0.; y1 = 1.; } } ///glActiveTextureARB(GL_TEXTURE0_ARB); // Go pour le multitexturing 1ere passe glBindTexture(GL_TEXTURE_2D, pIcon->iIconTexture); glColor4f(1.0f, 1.0f, 1.0f, myIcons.fAlbedo * pIcon->fAlpha); // transparence du reflet. glBlendFuncSeparate (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA); glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glEnable(GL_MAP2_TEXTURE_COORD_2); glMap2f(GL_MAP2_TEXTURE_COORD_2, 0, 1, 2, 2, 0, 1, 4, 2, &pTexPts[0][0][0]); /*glActiveTextureARB(GL_TEXTURE1_ARB); // Go pour le texturing 2eme passe glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, g_pGradationTexture[pDock->bHorizontalDock]); glColor4f(1.0f, 1.0f, 1.0f, myIcons.fAlbedo * pIcon->fAlpha); // transparence du reflet. // myIcons.fAlbedo * pIcon->fAlpha glEnable(GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); // Le mode de combinaison des textures //glTexEnvi (GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT, GL_MODULATE); // multiplier les alpha. glEnable(GL_MAP2_TEXTURE_COORD_2); glMap2f(GL_MAP2_TEXTURE_COORD_2, 0, 1, 2, 2, 0, 1, 4, 2, &pTexPts[0][0][0]);*/ /*glEnable(GL_MAP2_COLOR_4); //glMap2f(GL_MAP2_COLOR_4, 0, 1, 4, 2, // 0, 1, 8, 2, &pColorPts[0][0][0]); glMap2f(GL_MAP2_COLOR_4, 0.0, 1.0, 4, 4, 0.0, 1.0, 16, 4, &colorPoints[0][0][0]);*/ glEvalMesh2(GL_FILL, 0, myConfig.iNbGridNodes, myConfig.iNbGridNodes*0, myConfig.iNbGridNodes*1); /**glActiveTextureARB(GL_TEXTURE1_ARB); glDisable(GL_TEXTURE_2D); glDisable(GL_TEXTURE_GEN_S); glDisable(GL_TEXTURE_GEN_T); glActiveTextureARB(GL_TEXTURE0_ARB); glDisable(GL_TEXTURE_2D); glDisable(GL_TEXTURE_GEN_S); glDisable(GL_TEXTURE_GEN_T);*/ glDisable(GL_MAP2_COLOR_4); glPopMatrix (); } glDisable(GL_MAP2_VERTEX_3); glDisable(GL_MAP2_TEXTURE_COORD_2); glDisable(GL_TEXTURE_2D); glDisable (GL_BLEND); }