Exemple #1
0
bool JRenderServer::CacheIB( int ibID, BYTE* pData, int size, int& iteration, int& firstByte )
{
    if (ibID < 0 || ibID >= m_IBuffers.size()) return -1;
    IBInstance& ib = m_IBuffers[ibID];
    if (ib.m_CurIteration == iteration) return true;

    //  data is not in buffer - try to add it there
    if (ib.m_Size < ib.m_CurLastByte + size)
    {
        // no place in buffer - discard it
        ClearIB( ibID );
        ib.m_CurLastByte = 0;
        ib.m_CurIteration++;
    }

    if (ib.m_Size < size) 
    {
        rlog.err( "Could not cache %d bytes in index buffer %s", size, ib.m_Name.c_str() );
        return false;
    }
    
    firstByte = ib.m_CurLastByte;
    iteration = ib.m_CurIteration;

    BYTE* pBuf = LockIB( ibID, firstByte, size );
    memcpy( pBuf, pData, size );
    UnlockIB( ibID );

    return true;
} // JRenderServer::CacheIB
Exemple #2
0
const DWORD* D3D9Mesh::Indices() const
{
    if(_Indices == NULL)
    {
        LockIB();
    }
    return _Indices;
}
Exemple #3
0
void JRenderServer::CreateQuadIB()
{
    //  create quad index buffer
    m_QuadIB = CreateIB( "QuadIndexBuffer", c_QuadIBSize, true );
    WORD* pQuadIdx = (WORD*)LockIB( m_QuadIB, 0, c_QuadIBSize );
    if (!pQuadIdx)
    {
        rlog.err( "JRenderServer: Could not create internal quad index buffer." );
        return;
    }
    int curV = 0;
    for (int i = 0; i < c_QuadIBSize/2; i += 6)
    {
        pQuadIdx[i    ] = curV;
        pQuadIdx[i + 1] = curV + 1;
        pQuadIdx[i + 2] = curV + 2;
        pQuadIdx[i + 3] = curV + 2;
        pQuadIdx[i + 4] = curV + 1;
        pQuadIdx[i + 5] = curV + 3;
        curV += 4;
    }
    UnlockIB( m_QuadIB );
} // JRenderServer::CreateQuadIB
Exemple #4
0
void D3D9Mesh::Lock() const
{
    LockVB();
    LockIB();
}