音楽の4拍目(位置)に2つの異なるテクスチャの表示を同期させる機能を使って演奏しています。音楽はトラッカー形式です。行を含むパターンで構成されています。トラッカーのAPIは、現在再生中の行(行)を返します。行(位置)が変化したときに最初のテクスチャを1回だけクワッドに表示し、次に1回だけ第2テクスチャを表示する必要があります。 DrawGLScene()
では、各繰り返しで常にdrawNoise()
関数が呼び出されます。 1行の音楽には0.09秒かかります。 intPosCurrVal
変数は、これらの0.09秒で同じ値を持ちます。したがって、intPosCurrVal
の同じ値の場合、関数drawNoise()
が0.09秒の間何度も呼び出されます。 intPosCurrVal
変数は、次の音楽行が再生されるときに増加します。変数intPosCurrVal
の同じ値に対してdrawNoise()
を1回だけ呼び出すことを希望します。言い換えれば、すべての時間と呼ばれている主な描画機能、で、私はintPosCurrVal
変数の値が大きくなるなどの機能drawNoise()
一度1.一度だけ機能を実行
メイン描画機能によって呼び出すしたいと思います:
int DrawGLScene(GLvoid)
{
int posCurrVal = Music_GetPosition();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
drawNoise(intPosCurrVal);
// some other code
glFlush();
return TRUE;
}
drawNoise
機能:
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);
}
は事前
'posCurrVal'を保存し、保存された値が' posCurrVal'と異なる場合にのみ 'drawNoise'を呼び出します。 –