Cześć
Jest to mój pierwszy post na forum więc witam się. Uczę się C++ oraz OpenGL. Aktualnie rozpoznaje możliwość synchronizacji wyświetlania na przemian dwóch różnych tekstur na quadzie zgodnie ze zmianą wiersza granej muzyki. Muzyka jest w formacie trackerowym. W skrócie składa się z patternów, które w sobie zawierają wiersze. API playera trackerowego zwraca aktualnie grany wiersz. Potrzebuje, aby wraz ze zmianą wiersza muzyki o jeden wiersz była wyświetlana raz jedna raz druga tekstura (tekstury są wypełnione pixelam o różnych odcieniach danej barwy i wyświetlenie na przemian da efekty śnieżenia ekranu). W głównej pętli rysującej co ramkę pobierany jest aktualnie grany wiersz muzyki i przekazywany do funkcji rysującej tekstury na quadzie:
int posCurrVal = Music_GetPosition();
drawNoise(intPosCurrVal);
Kod funkcji wyświetlającej na przemian tekstury:
void drawNoise( int x )
{
glEnable( GL_TEXTURE_2D );
glEnable( GL_DEPTH_TEST );
if( x > prev )
{
glBindTexture( GL_TEXTURE_2D, texPosNoise );
prev = x;
}
else
{
glBindTexture( GL_TEXTURE_2D, texNegNoise );
}
glBegin( GL_QUADS );
glColor3f( 1.0f, 1.0f, 1.0f );
glTexCoord2f( 0.0, 0.0 ); glVertex3f( - 15.0, - 15.0, 0.0 );
glTexCoord2f( 0.0, 1.0 ); glVertex3f( - 15.0, 15.0, 0.0 );
glTexCoord2f( 1.0, 1.0 ); glVertex3f( 15.0, 15.0, 0.0 );
glTexCoord2f( 1.0, 0.0 ); glVertex3f( 15.0, - 15.0, 0.0 );
glEnd();
glDisable( GL_TEXTURE_2D );
glDisable( GL_DEPTH_TEST );
}
Tekstury są bindowane na quada: raz jedna raz druga, ale ich wyświetlanie nie jest poprawne np. w danym momencie wyświetlane jest 1/3 jednej tekstury i 2/3 drugiej tekstury albo 1/2 jednej tekstury o 1/2 drugiej tekstury. Nie jest wyświetlana na zmianę raz jedna tekstura raz druga. Wyświetlanie zmienianej tekstury na quadzie jakby się "tnie". Dany wiersz muzyki jest grany przez krótki okres czasu i funkcja jest wywoływana wiele razy w tym czasie. Zależy mi na tym, aby funkcja byłą wywoływana tylko raz, dla danego wiersza muzyki. Czyli jak jest grany wiersz 1 wywoływana jest funkcja drawNoise(intPosCurrVal) raz, grany wiersz 1 wywoływana jest funkcja drawNoise(intPosCurrVal) raz, itd. Co muszę zmienić w kodzie? Potrzebuje jakiejś zmiennej logicznej?
Pozdrawiam