SDL_Window 被意外调整大小
SDL_Window Being Resized Unwantedly
我正在为学校开发一个小程序。它包括一个 3D 犯罪现场(我使用 OpenGL 来显示它)、一些说明和一个主菜单。但是,我面临着一个非常不受欢迎的问题。
我遇到的问题如下:当我 运行 程序时,它具有所需的 window 大小(屏幕宽度 * 0.85);但是,当程序进入主循环时,它会收缩。
奇怪的是,长宽比似乎没有变化,只是 window 大小。
这是我的主循环:
while (!quit) {
if (mainMenu) {
SDL_UpdateWindowSurface(mainWindow);
SDL::keyTesting();
menuImage->drawImage(mainSurface);
instructionButton->drawButton(mainSurface);
crimeButton->drawButton(mainSurface);
SDL_Delay(10);
}
else if (instructions) {
SDL_UpdateWindowSurface(mainWindow);
SDL::keyTesting();
instructionsImage->drawImage(mainSurface);
backButton->drawButton(mainSurface);
SDL_Delay(10);
}
else if(modelView) {
for (int i = 0; i < 100; i++)
SDL::keyTesting();
GLfloat currentFrame = glfwGetTime();
deltaTime = currentFrame - lastFrame;
lastFrame = currentFrame;
glClearColor(0.2f, 0.2f, 0.2f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glUseProgram(modelProgram);
glUniform3f(viewPosLoc, camera.Position.x, camera.Position.y, camera.Position.z);
glm::mat4 projection = glm::perspective(camera.Zoom, (float)windowWidth/(float)windowHeight, 0.1f, 250.0f);
glm::mat4 view = camera.GetViewMatrix();
glUniformMatrix4fv(projLoc, 1, GL_FALSE, glm::value_ptr(projection));
glUniformMatrix4fv(viewLoc, 1, GL_FALSE, glm::value_ptr(view));
glm::mat4 modelMat;
modelMat = glm::translate(modelMat, glm::vec3(0.0f, -1.75f, 0.0f));
modelMat = glm::scale(modelMat, glm::vec3(1.5f, 1.5f, 1.5f));
glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(modelMat));
model->Draw(modelProgram);
SDL_GL_SwapWindow(mainWindow);
}
}
尝试使用 SDL_WINDOW_SHOWN 标志。
我正在为学校开发一个小程序。它包括一个 3D 犯罪现场(我使用 OpenGL 来显示它)、一些说明和一个主菜单。但是,我面临着一个非常不受欢迎的问题。
我遇到的问题如下:当我 运行 程序时,它具有所需的 window 大小(屏幕宽度 * 0.85);但是,当程序进入主循环时,它会收缩。
奇怪的是,长宽比似乎没有变化,只是 window 大小。
这是我的主循环:
while (!quit) {
if (mainMenu) {
SDL_UpdateWindowSurface(mainWindow);
SDL::keyTesting();
menuImage->drawImage(mainSurface);
instructionButton->drawButton(mainSurface);
crimeButton->drawButton(mainSurface);
SDL_Delay(10);
}
else if (instructions) {
SDL_UpdateWindowSurface(mainWindow);
SDL::keyTesting();
instructionsImage->drawImage(mainSurface);
backButton->drawButton(mainSurface);
SDL_Delay(10);
}
else if(modelView) {
for (int i = 0; i < 100; i++)
SDL::keyTesting();
GLfloat currentFrame = glfwGetTime();
deltaTime = currentFrame - lastFrame;
lastFrame = currentFrame;
glClearColor(0.2f, 0.2f, 0.2f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glUseProgram(modelProgram);
glUniform3f(viewPosLoc, camera.Position.x, camera.Position.y, camera.Position.z);
glm::mat4 projection = glm::perspective(camera.Zoom, (float)windowWidth/(float)windowHeight, 0.1f, 250.0f);
glm::mat4 view = camera.GetViewMatrix();
glUniformMatrix4fv(projLoc, 1, GL_FALSE, glm::value_ptr(projection));
glUniformMatrix4fv(viewLoc, 1, GL_FALSE, glm::value_ptr(view));
glm::mat4 modelMat;
modelMat = glm::translate(modelMat, glm::vec3(0.0f, -1.75f, 0.0f));
modelMat = glm::scale(modelMat, glm::vec3(1.5f, 1.5f, 1.5f));
glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(modelMat));
model->Draw(modelProgram);
SDL_GL_SwapWindow(mainWindow);
}
}
尝试使用 SDL_WINDOW_SHOWN 标志。