У меня есть контейнер окон sfml, и он работает, однако glViewPorts - это неправильный размер, который я предполагаю, потому что пропускается неправильное sf :: Window.Функция обратного вызова смущает аргумент?
Вот функция, которая добавляет в окно: требуется некоторая информация о окне sfml.
int WindowContainer::PushBack(WindowData& data)
{
if(data.WindowSettingsOK() && data.VideoModeOK()){
mWindowVector.resize(mWindowVector.size() + 1);
mDisplayFuncVector.resize(mWindowVector.size());
mInputFuncVector.resize(mWindowVector.size());
mWindowVector.at(mWindowVector.size() - 1) = new sf::Window();
mWindowVector.at(mWindowVector.size() - 1)->Create(data.VideoMode(), data.Title(), data.Style(), data.Settings());
mWindowVector.at(mWindowVector.size() - 1)->SetPosition(data.PositionX(), data.PositionY());
mDisplayFuncVector.at(mWindowVector.size() - 1) = nullptr;
mInputFuncVector.at(mWindowVector.size() - 1) = nullptr;
return 0;
}
else{
PrintError(ErrorMessageType::BadSettings);
return 1;
}
}
Кроме того, эта функция может быть вызвана для установки на дисплее и функции ввода обратных вызовов:
int WindowContainer::PushBack(WindowData& data, function_p displayFunc, function_p inputFunc)
{
int return_val = PushBack(data);
mDisplayFuncVector.at(mWindowVector.size() - 1) = displayFunc;
mInputFuncVector.at(mWindowVector.size() - 1) = inputFunc;
return return_val;
}
Затем, когда окно необходимо .Display()
«ING, эта функция называется:
void WindowContainer::ProcessDisplay()
{
for(unsigned int i = 0; i < mWindowVector.size(); i ++){
if(mDisplayFuncVector.at(i) != nullptr){
mDisplayFuncVector.at(i)(*mWindowVector.at(i), mClock, (const void*&)mExternalDrawingDataPointer);
}
mWindowVector.at(i)->Display();
}
}
... Все это хорошо, пока результат на экране не изменит размер одного окна на окно просмотра обоих окон. Это говорит о том, что вызов функции обратного вызова: mDisplayFuncVector.at(i)(*mWindowVector.at(i), mClock, (const void*&)mExternalDrawingDataPointer);
дает аргумент *mWindowVector.at(0)
каждый раз, а не каждое окно отдельно. (Как в *mWindowVector.at(i)
)
Может ли кто-нибудь помочь в решении этой проблемы?
Основной цикл содержит этот код:
while(container.Access(0)->IsOpened()){
container.ProcessInput();
container.ProcessDisplay();
}
Container.Access(int)
эта функция:
const sf::Window*& WindowContainer::Access(unsigned int index)
{
if(index > mWindowVector.size()){
PrintError(ErrorMessageType::IndexOutOfRange);
}
else{
return (const sf::Window*&)mWindowVector.at(index);
}
return (const sf::Window*&)mWindowVector.at(0);
}
Еще раз спасибо, я уверен, что я сделал ошибку где-то, но не может обнаружить его.
Какой прототип функции дисплея? – molbdnilo
Внутри main.cpp У меня есть эта функция: 'недействительным дисплей (С.Ф. :: Window и окно, Const научная фантастика :: Часы и часы, сопзЬ пустота * & данных);' это то, что вы спрашивали? – user3728501