使用しているSDLのバージョンはどれですか?私はそれがSDL-1.2.14だったと仮定し、そのバージョンで、次の試してみました:
#include "SDL.h"
int main(int argc, char *argv[])
{
SDL_Init(SDL_INIT_VIDEO);
SDL_Surface *screen;
#if 1
screen = SDL_SetVideoMode(640, 480, 32, SDL_OPENGL);
SDL_Delay(2000);
screen = SDL_SetVideoMode(640, 480, 32, SDL_OPENGL | SDL_FULLSCREEN);
SDL_Delay(5000);
screen = SDL_SetVideoMode(640, 480, 32, SDL_OPENGL);
SDL_Delay(5000);
#else
screen = SDL_SetVideoMode(640, 480, 32, SDL_OPENGL | SDL_FULLSCREEN);
SDL_Delay(2000);
screen = SDL_SetVideoMode(640, 480, 32, SDL_OPENGL);
SDL_Delay(5000);
screen = SDL_SetVideoMode(640, 480, 32, SDL_OPENGL | SDL_FULLSCREEN);
SDL_Delay(5000);
#endif
SDL_Quit();
return 0;
}
コードが戻ってフルスクリーンとするwindowdから行くか、反対の方法は、周りのプリプロセッサフラグが設定に応じて。
全画面モードでウィンドウフレームを取得しないで、SDL_FULLSCREEN
を省略した場合はウィンドウフレームを取得しません。変数に戻り値SDL_SetVideoMode
を代入すると、変数が変更される可能性があります。フルスクリーンのウィンドウに切り替えると、ウィンドウモードになっている間に表示される画面の内容が表示されることがあります。全画面モードでは、画面の左上にあるSDL_appウィンドウが表示されました。自分のものだけが表示されていることを確認するには、画面をクリアする必要があります。
SDL_WM_ToggleFullscreen
機能もあります。 Windowsでは動作しませんが、ドキュメンテーションへのリンクには、ウィンドウの切り替え/フルスクリーンの切り替え方法の例が含まれています。 SDLのドキュメントからのコード例は次のようになります。
/* Anyone may copy and alter this fragment of pseudo-code and use it however they wish */
#include "SDL.h" /* The only library needed to do this */
Uint32 flags = SDL_SWSURFACE; /* Start with whatever flags you prefer */
SDL_Surface *screen = SDL_SetVideoMode(640, 480, 32, flags); /* Start with whatever settings you prefer */
/* -- Portable Fullscreen Toggling --
As of SDL 1.2.10, if width and height are both 0, SDL_SetVideoMode will use the
width and height of the current video mode (or the desktop mode, if no mode has been set).
Use 0 for Height, Width, and Color Depth to keep the current values. */
flags = screen->flags; /* Save the current flags in case toggling fails */
screen = SDL_SetVideoMode(0, 0, 0, screen->flags^SDL_FULLSCREEN); /*Toggles FullScreen Mode */
if(screen == NULL) screen = SDL_SetVideoMode(0, 0, 0, flags); /* If toggle FullScreen failed, then switch back */
if(screen == NULL) exit(1); /* If you can't switch back for some reason, then epic fail */
例をウィンドウモードを切り替えながらSDL_OPENGL
フラグが使用されているときに何が起こるかは言及しません。 OpenGLのコンテキストが破壊され再作成される恐れがあるので、ウィンドウモードを切り替えるときにOpenGLを再初期化してすべてのテクスチャとジオメトリを再ロードする必要があります。
編集:
が
GLuint list = glGenLists(1);
glNewList(list, GL_COMPILE);
glBegin(GL_LINES);
glVertex2f(0.0f, 0.0f);
glVertex2f(1.0f, 1.0f);
glEnd();
glEndList();
表示リストを作成し、
でそれを呼び出す:
私はOpenGLのコンテキストが表示モードを切り替える後に破棄されることを、確認することができました
glClear(GL_COLOR_BUFFER_BIT);
glCallList(list);
は働いた。SDL_SetVideoMode
の後に同じリストを呼び出すと、何も描画されませんでした。
こんにちはトレンキー、返信いただきありがとうございます。私は実際にSDL 1.2.14を使用しています。サイズ変更後にOpenGLコンテキストを再初期化し、すべてのテクスチャ/ジオメトリを再ロードしています。私はglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)もクリアしています。すべてのフレーム、右だけで私のものだけ表示する必要があります! – aCuria
これは少し不思議ですが、最初の3つのパラメータがnullであるようにsetvideomodeへの呼び出しを変更すると、動作するようです! – aCuria