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();
}
}
... 1つのウィンドウのサイズ変更が両方のウィンドウのビューポートに影響するという結果が画面に表示されるまで、これはすべて問題ありません。これは、コールバック関数を呼び出すことは、各ウィンドウを個別にではなく、毎回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);
}
もう一度ありがとう、私はどこかで間違いを犯したと確信していますが、それを見つけることができません。