void COutput::OutputBuffer(WAVEHDR* pHdr) { if (!pHdr->dwBytesRecorded) { CAutoLock lock(&m_csecBuff); SetEvent(m_hEvent); return; } if (m_fDoubleBuf) { FadeIn((LPBYTE)pHdr->lpData, pHdr->dwBytesRecorded); CAutoLock lockBuf(&m_csecBuff); // !!!! m_cWritten++; if (m_cWritten >= m_cBuf) ResetEvent(m_hEvent); m_nCurrent = (m_nCurrent + 1) % m_cBuf; m_dwWritten += pHdr->dwBytesRecorded / m_pcm.wf.nBlockAlign; } else { CAutoLock lockDev(&m_csecDevice); FadeIn((LPBYTE)pHdr->lpData, pHdr->dwBytesRecorded); waveOutWrite(m_hwo, pHdr, sizeof(WAVEHDR)); CAutoLock lockBuf(&m_csecBuff); m_cWritten++; if (m_cWritten >= m_cBuf) ResetEvent(m_hEvent); m_nCurrent = (m_nCurrent + 1) % m_cBuf; m_dwWritten += pHdr->dwBytesRecorded / m_pcm.wf.nBlockAlign; } }
void GLRGBARender::perRender(){ Image img; lockBuf(0, &img); if(mTextures[0] && img.plane[0]!=NULL){ mTextures[0]->subImage((const GLvoid*)img.plane[0], 0, 0, img.width, img.height, GL_RGBA); mProgram->bindTexture("texture", mTextures[0]->getTextureId(), mTextures[0]->getTextureUnit()); } unlockBuf(0); }