Создаешь нужную функцию для коллбека и уже в нем её вызываешь
void Draw(){
}
bool CALLBACK Present(const RECT* pSourceRect, const RECT* pDestRect, HWND hDestWindowOverride, const RGNDATA* pDirtyRegion){
Draw();
return true;
}
void mainloop(){
static bool init = false;
if(!init){
SF->getRender()->registerD3DCallback(D3DMETHOD_PRESENT, Present);
init = true;
}
}
Давно не работал с рендером. Почудилось, что с ним можно работать примерно как с потоком: получать хэндл и по необходимости разрушать. А так да, смысла создавать более одной функции present нет, соответственно и свои аргументы туда совать бесполезно.
Но в таком случае вопрос не отпадает, а только усложняется. Приведённый Вами вариант конечно добавляет немножко удобства, но не решает основную задачу. Нужна функция вида
showText(std::string text, int showTime)
, которую можно было бы вызывать из любой области программы.
Попробую сделать эту функцию конструктором класса ShowText, который будет вызывать собственный метод Present, который, в свою очередь будет рисовать текст до тех пор, пока поле showTime не станет равно нулю. Осталось только научиться потом этот колбэк удалять.