sourceRect != NULL ? &rect : 0);
}
+ void
+ irr_video_drawVertexPrimitiveList(irr_video_IVideoDriver* driver,
+ const void* vertices,
+ unsigned int vertexCount,
+ const void* indexList,
+ unsigned int primCount,
+ irr_video_E_VERTEX_TYPE vType,
+ irr_scene_E_PRIMITIVE_TYPE pType,
+ irr_video_E_INDEX_TYPE iType)
+ {
+ // Convert vertices
+ irr::video::S3DVertex irrVertices[vertexCount];
+ for (int i=0; i<vertexCount; i++)
+ {
+ irr_video_S3DVertex *vertex = (irr_video_S3DVertex*)vertices + i;
+ irrVertices[i] =
+ irr::video::S3DVertex(vertex->pos.x, vertex->pos.y, vertex->pos.z,
+ vertex->normal.x, vertex->normal.y, vertex->normal.z,
+ irr::video::SColor(vertex->color.a,
+ vertex->color.r,
+ vertex->color.g,
+ vertex->color.b),
+ vertex->tCoords.x, vertex->tCoords.y);
+ }
+
+ // Convert indices
+ size_t indexListSize =
+ ((iType == irr_video_EIT_16BIT) ? sizeof(irr::u16) : sizeof(irr::u32)) *
+ primCount * 3;
+ void* irrIndexList = malloc(indexListSize);
+
+ for (int i=0; i<primCount*3; i++)
+ {
+ unsigned int *index = (unsigned int*)indexList + i;
+ if (iType == irr_video_EIT_16BIT)
+ {
+ ((irr::u16*)irrIndexList)[i] = *index;
+ }
+ else
+ {
+ ((irr::u32*)irrIndexList)[i] = *index;
+ }
+ }
+
+ ((irr::video::IVideoDriver*)driver)
+ ->drawVertexPrimitiveList(&irrVertices[0], vertexCount,
+ irrIndexList, primCount,
+ (irr::video::E_VERTEX_TYPE)vType,
+ (irr::scene::E_PRIMITIVE_TYPE)pType,
+ (irr::video::E_INDEX_TYPE)iType);
+
+ free(irrIndexList);
+ }
+
int
irr_video_endScene(irr_video_IVideoDriver* driver)
{