本文整理汇总了C++中SDL_GL_SetAttribute函数的典型用法代码示例。如果您正苦于以下问题:C++ SDL_GL_SetAttribute函数的具体用法?C++ SDL_GL_SetAttribute怎么用?C++ SDL_GL_SetAttribute使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了SDL_GL_SetAttribute函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: InitOpenGL
/*** Función inicializadora de SDL y OpenGL ***/
GLboolean InitOpenGL(int width, int height, // Dimensiones de la ventana
int bpp, // Profundidad
int depth, // Z-buffer
GLboolean fullscreen) // Fullscreen?
{
/* Inicialización de SDL */
if( SDL_Init( SDL_INIT_VIDEO ) != 0 )
{
Error_SDL( "Error initializing SDL" );
return GL_FALSE;
}
/* Pongo el fondo en 32 bits */
if( bpp == 32 )
{
SDL_GL_SetAttribute( SDL_GL_RED_SIZE , 8 );
SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 8 );
SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE , 8 );
SDL_GL_SetAttribute( SDL_GL_ALPHA_SIZE, 8 );
}
else if( bpp == 16 ) // 16 bits
{
SDL_GL_SetAttribute( SDL_GL_RED_SIZE , 4 );
SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 4 );
SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE , 4 );
SDL_GL_SetAttribute( SDL_GL_ALPHA_SIZE, 4 );
}
/* Framebuffer */
SDL_GL_SetAttribute( SDL_GL_BUFFER_SIZE, bpp );
/* Z-buffer */
SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, depth );
/* Stencil buffer */
SDL_GL_SetAttribute( SDL_GL_STENCIL_SIZE, 8 );
/* Habilito el doble-buffering de OpengGL */
SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
/* Creo la ventana con soporte OpenGL */
if( SDL_SetVideoMode( width, height, bpp,
SDL_OPENGL | (fullscreen ? SDL_FULLSCREEN : 0) )
== NULL )
{
Error_SDL( "Could not init OpenGL" );
return GL_FALSE;
}
/* Título de la ventana */
SDL_WM_SetCaption( "OpenGL", "OpenGL" );
/* Mensajes de Input directo a la aplicación */
SDL_WM_GrabInput( SDL_GRAB_ON );
/* Deshabilito la repetición del teclado */
SDL_EnableKeyRepeat( 0, SDL_DEFAULT_REPEAT_INTERVAL );
/* Inicializo los número aleatorios */
srand( time(NULL) );
return GL_TRUE;
}
示例2: main
int main(int argc, char *argv[]) {
std::string app_name;
std::string app_name_nice;
float zoom = 1.0f;
bool tablet = false;
bool aspect43 = false;
const char *zoomenv = getenv("ZOOM");
const char *tabletenv = getenv("TABLET");
const char *ipad = getenv("IPAD");
if (zoomenv) {
zoom = atof(zoomenv);
}
if (tabletenv) {
tablet = atoi(tabletenv) ? true : false;
}
if (ipad) aspect43 = true;
bool landscape;
NativeGetAppInfo(&app_name, &app_name_nice, &landscape);
// Change these to temporarily test other resolutions.
aspect43 = false;
tablet = false;
float density = 1.0f;
//zoom = 1.5f;
if (landscape) {
if (tablet) {
pixel_xres = 1280 * zoom;
pixel_yres = 800 * zoom;
} else if (aspect43) {
pixel_xres = 1024 * zoom;
pixel_yres = 768 * zoom;
} else {
pixel_xres = 800 * zoom;
pixel_yres = 480 * zoom;
}
} else {
// PC development hack for more space
//pixel_xres = 1580 * zoom;
//pixel_yres = 1000 * zoom;
if (tablet) {
pixel_xres = 800 * zoom;
pixel_yres = 1280 * zoom;
} else if (aspect43) {
pixel_xres = 768 * zoom;
pixel_yres = 1024 * zoom;
} else {
pixel_xres = 480 * zoom;
pixel_yres = 800 * zoom;
}
}
net::Init();
#ifdef __APPLE__
// Make sure to request a somewhat modern GL context at least - the
// latest supported by MacOSX (really, really sad...)
// Requires SDL 2.0 (which is even more sad, as that hasn't been released yet)
//SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
//SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2);
#endif
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
fprintf(stderr, "Unable to initialize SDL: %s\n", SDL_GetError());
return 1;
}
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, 1);
if (SDL_SetVideoMode(pixel_xres, pixel_yres, 0, SDL_OPENGL) == NULL) {
fprintf(stderr, "SDL SetVideoMode failed: Unable to create OpenGL screen: %s\n", SDL_GetError());
SDL_Quit();
return(2);
}
SDL_WM_SetCaption(app_name_nice.c_str(), NULL);
if (GLEW_OK != glewInit()) {
printf("Failed to initialize glew!\n");
return 1;
}
if (GLEW_VERSION_2_0) {
printf("OpenGL 2.0 or higher.\n");
} else {
printf("Sorry, this program requires OpenGL 2.0.\n");
return 1;
}
#ifdef _MSC_VER
// VFSRegister("temp/", new DirectoryAssetReader("E:\\Temp\\"));
//.........这里部分代码省略.........
示例3: WinMain
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR cmdLine, int cmdShow) {
#else
int main(int argc, char** argv) {
#endif
// Start by opening a debug log.
Debug::openLog(true);
Debug::logger->message("\n ----- Engine Loading -----");
if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0) {
Debug::logger->message("Error: Could not load SDL");
Destroy();
return 1;
} else {
Debug::logger->message("SDL loaded..");
}
// Setup OpenGL.
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
flags = SDL_OPENGL | SDL_HWSURFACE | SDL_RESIZABLE;
screen = SDL_SetVideoMode(windowWidth, windowHeight, 32, flags);
Debug::logger->message("Video mode set..");
if(Mix_OpenAudio(44100, AUDIO_S16, 2, 4096)) {
Debug::logger->message("Audio opened..");
}
if(TTF_Init()) {
Debug::logger->message("SDL_ttf initialized.\n");
}
info = SDL_GetVideoInfo();
if(!info) {
// This should never accur.
Debug::logger->message("Video query failed!");
Destroy();
return 1;
}
SDL_WM_SetCaption("LibD", NULL);
srand((unsigned int)time(NULL));
Debug::logger->message("\n ----- Engine Initialization Complete -----");
Debug::logger->message("\n ----- Logic -----");
Game game;
game.Init();
CreateInput();
Uint32 timeStart = SDL_GetTicks();
float dt = 1.0f / 60.0f;
// We need to give OnResize()'s width and height params an initial value
// Otherwise it is just garbage, and the orthorgraphic view
// screws up for me. -- Allanis.
game.OnResize(windowWidth, windowHeight);
while(game.IsRunning()) {
while(SDL_PollEvent(&event)) {
if((event.type == SDL_QUIT) || KeyStillDown(SDLK_ESCAPE)) {
game.SetRunning(false);
break;
}
if(event.type == SDL_VIDEORESIZE) {
// Resize the window.
ResizeWindow(game, event.resize.w, event.resize.h);
break;
}
}
UpdateInput();
game.Prepare(dt);
game.ProcessEvents(dt);
game.Render();
SDL_GL_SwapBuffers();
Uint32 timeEnd = SDL_GetTicks();
dt = (float)(timeEnd - timeStart) / 1000.0f;
timeStart = timeEnd;
}
game.Shutdown();
Destroy();
Debug::closeLog();
return 0;
}
示例4: PlatformInitOpenGL
static void PlatformInitOpenGL(void*& ContextPtr, void*& PrevContextPtr, int InMajorVersion, int InMinorVersion)
{
static bool bInitialized = (SDL_GL_GetCurrentWindow() != NULL) && (SDL_GL_GetCurrentContext() != NULL);
if (!bInitialized)
{
check(InMajorVersion > 3 || (InMajorVersion == 3 && InMinorVersion >= 2));
if (SDL_WasInit(0) == 0)
{
SDL_Init(SDL_INIT_VIDEO);
}
else
{
Uint32 InitializedSubsystemsMask = SDL_WasInit(SDL_INIT_EVERYTHING);
if ((InitializedSubsystemsMask & SDL_INIT_VIDEO) == 0)
{
SDL_InitSubSystem(SDL_INIT_VIDEO);
}
}
if (SDL_GL_LoadLibrary(NULL))
{
UE_LOG(LogOpenGLShaderCompiler, Fatal, TEXT("Unable to dynamically load libGL: %s"), ANSI_TO_TCHAR(SDL_GetError()));
}
if (SDL_GL_SetAttribute( SDL_GL_CONTEXT_MAJOR_VERSION, InMajorVersion))
{
UE_LOG(LogOpenGLShaderCompiler, Fatal, TEXT("Failed to set GL major version: %s"), ANSI_TO_TCHAR(SDL_GetError()));
}
if (SDL_GL_SetAttribute( SDL_GL_CONTEXT_MINOR_VERSION, InMinorVersion))
{
UE_LOG(LogOpenGLShaderCompiler, Fatal, TEXT("Failed to set GL minor version: %s"), ANSI_TO_TCHAR(SDL_GetError()));
}
if (SDL_GL_SetAttribute( SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG))
{
UE_LOG(LogOpenGLShaderCompiler, Fatal, TEXT("Failed to set GL flags: %s"), ANSI_TO_TCHAR(SDL_GetError()));
}
if (SDL_GL_SetAttribute( SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE))
{
UE_LOG(LogOpenGLShaderCompiler, Fatal, TEXT("Failed to set GL mask/profile: %s"), ANSI_TO_TCHAR(SDL_GetError()));
}
// Create a dummy context to verify opengl support.
FPlatformOpenGLContext DummyContext;
_PlatformCreateDummyGLWindow(&DummyContext);
_PlatformCreateOpenGLContextCore(&DummyContext);
if (DummyContext.hGLContext)
{
_ContextMakeCurrent(DummyContext.hWnd, DummyContext.hGLContext);
}
else
{
UE_LOG(LogOpenGLShaderCompiler, Fatal, TEXT("OpenGL %d.%d not supported by driver"), InMajorVersion, InMinorVersion);
return;
}
PrevContextPtr = NULL;
ContextPtr = DummyContext.hGLContext;
bInitialized = true;
}
PrevContextPtr = reinterpret_cast<void*>(SDL_GL_GetCurrentContext());
SDL_HGLContext NewContext = SDL_GL_CreateContext(SDL_GL_GetCurrentWindow());
SDL_GL_MakeCurrent(SDL_GL_GetCurrentWindow(), NewContext);
ContextPtr = reinterpret_cast<void*>(NewContext);
}
示例5: main
int main( int argc, char* argv[] ) {
bool fullscreen = false;
char* world = "world";
for (int i=0; i<argc; i++) {
if (strcmp(argv[i], "-win") == 0) fullscreen = false;
if (strcmp(argv[i], "-f") == 0) fullscreen = true;
if (strcmp(argv[i], "-w") == 0)
world = argv[i+1];
if (strcmp(argv[i], "-d") == 0) debug = true;
}
SetupWorld(world);
you_x = getWorldX();
you_z = getWorldZ();
you_angle = getWorldAngle();
const SDL_VideoInfo* info = NULL;
int width = 0;
int height = 0;
int bpp = 0;
int flags = 0;
if( SDL_Init( SDL_INIT_VIDEO ) < 0 ) {
fprintf( stderr, "Video initialization failed: %s\n",
SDL_GetError( ) );
quit_app( 1 );
}
info = SDL_GetVideoInfo( );
if( !info ) {
fprintf( stderr, "Video query failed: %s\n",
SDL_GetError( ) );
quit_app( 1 );
}
width = 640;
height = 480;
bpp = info->vfmt->BitsPerPixel;
SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 5 );
SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 5 );
SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 5 );
SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 16 );
SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
flags = SDL_OPENGL;
if (fullscreen)
flags |= SDL_FULLSCREEN;
if( SDL_SetVideoMode( width, height, bpp, flags ) == 0 ) {
fprintf( stderr, "Video mode set failed: %s\n",
SDL_GetError( ) );
quit_app( 1 );
}
setup_opengl( width, height );
bool init = true;
while( 1 ) {
process_events( );
draw_screen( );
if (init) { glEnable( GL_LIGHTING ); init=false; }
}
return 0;
}
示例6: gl_initialize
bool gl_initialize(int screen_wid,int screen_high,int fsaa_mode,char *err_str)
{
int sdl_flags;
GLint ntxtsize;
#if defined(D3_OS_LINUX) || defined(D3_OS_WINDOWS)
GLenum glew_error;
#endif
#ifdef D3_OS_IPHONE
const GLenum discards[]={GL_DEPTH_ATTACHMENT,GL_STENCIL_ATTACHMENT};
#endif
// reset sizes to the desktop
// if they are at default
if ((screen_wid==-1) || (screen_high==-1)) {
screen_wid=render_info.desktop.wid;
screen_high=render_info.desktop.high;
}
// setup rendering sizes
#ifndef D3_ROTATE_VIEW
view.screen.x_sz=screen_wid;
view.screen.y_sz=screen_high;
#else
view.screen.x_sz=screen_high;
view.screen.y_sz=screen_wid;
#endif
view.screen.wide=gl_is_size_widescreen(view.screen.x_sz,view.screen.y_sz);
// normal attributes
SDL_GL_SetAttribute(SDL_GL_RED_SIZE,8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE,8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE,8);
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE,8);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE,24);
SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE,8);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER,1);
#ifdef D3_OPENGL_ES
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION,2);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION,0);
#endif
#ifdef D3_OS_IPHONE
SDL_GL_SetAttribute(SDL_GL_RETAINED_BACKING,1);
#endif
// full screen anti-aliasing attributes
switch (fsaa_mode) {
case fsaa_mode_2x:
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS,1);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES,2);
break;
case fsaa_mode_4x:
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS,1);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES,4);
break;
case fsaa_mode_8x:
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS,1);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES,8);
break;
}
// start window or full screen
sdl_flags=SDL_WINDOW_OPENGL|SDL_WINDOW_SHOWN;
if (!gl_in_window_mode()) sdl_flags|=(SDL_WINDOW_FULLSCREEN|SDL_WINDOW_BORDERLESS);
sdl_wind=SDL_CreateWindow("dim3",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,screen_wid,screen_high,sdl_flags);
if (sdl_wind==NULL) {
sprintf(err_str,"SDL: Could not create window (Error: %s)",SDL_GetError());
return(FALSE);
}
sdl_gl_ctx=SDL_GL_CreateContext(sdl_wind);
// use glew on linux and windows
#if defined(D3_OS_LINUX) || defined(D3_OS_WINDOWS)
glew_error=glewInit();
if (glew_error!=GL_NO_ERROR) {
strcpy(err_str,glewGetErrorString(glew_error));
return(FALSE);
}
#endif
// grab openGL attributes
strncpy(render_info.name,(char*)glGetString(GL_RENDERER),64);
render_info.name[63]=0x0;
strncpy(render_info.ext_string,(char*)glGetString(GL_EXTENSIONS),8192);
render_info.ext_string[8191]=0x0;
glGetIntegerv(GL_MAX_TEXTURE_SIZE,&ntxtsize);
render_info.texture_max_size=(int)ntxtsize;
//.........这里部分代码省略.........
示例7: SDL_GL_SetAttribute
void SDLWindow::create(const String& name, unsigned int width, unsigned int height,
bool fullScreen, const NameValuePairList *miscParams)
{
int colourDepth = 32;
String title = name;
if(miscParams)
{
// Parse miscellenous parameters
NameValuePairList::const_iterator opt;
// Bit depth
opt = miscParams->find("colourDepth");
if(opt != miscParams->end()) //check for FSAA parameter, if not ignore it...
colourDepth = StringConverter::parseUnsignedInt(opt->second);
// Full screen antialiasing
opt = miscParams->find("FSAA");
if(opt != miscParams->end()) //check for FSAA parameter, if not ignore it...
{
size_t fsaa_x_samples = StringConverter::parseUnsignedInt(opt->second);
if(fsaa_x_samples>1) {
// If FSAA is enabled in the parameters, enable the MULTISAMPLEBUFFERS
// and set the number of samples before the render window is created.
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS,1);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES,fsaa_x_samples);
}
}
// Window title
opt = miscParams->find("title");
if(opt != miscParams->end()) //check for FSAA parameter, if not ignore it...
title = opt->second;
}
LogManager::getSingleton().logMessage("SDLWindow::create", LML_TRIVIAL);
SDL_Surface* screen;
int flags = SDL_OPENGL | SDL_HWPALETTE | SDL_RESIZABLE;
SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
// request good stencil size if 32-bit colour
if (colourDepth == 32)
{
SDL_GL_SetAttribute( SDL_GL_STENCIL_SIZE, 8);
}
if (fullScreen)
flags |= SDL_FULLSCREEN;
LogManager::getSingleton().logMessage("Create window", LML_TRIVIAL);
screen = SDL_SetVideoMode(width, height, colourDepth, flags);
if (!screen)
{
LogManager::getSingleton().logMessage(LML_CRITICAL,
String("Could not make screen: ") + SDL_GetError());
exit(1);
}
LogManager::getSingleton().logMessage("screen is valid", LML_TRIVIAL);
mScreen = screen;
mName = name;
mWidth = width;
mHeight = height;
mActive = true;
if (!fullScreen)
SDL_WM_SetCaption(title.c_str(), 0);
glXGetVideoSyncSGI = (int (*)(unsigned int *))SDL_GL_GetProcAddress("glXGetVideoSyncSGI");
glXWaitVideoSyncSGI = (int (*)(int, int, unsigned int *))SDL_GL_GetProcAddress("glXWaitVideoSyncSGI");
}
示例8: check_gl_mode
void check_gl_mode()
{
char str[400];
flags = SDL_OPENGL;
if(full_screen) {
flags |= SDL_FULLSCREEN;
}
SDL_GL_SetAttribute( SDL_GL_STENCIL_SIZE, 8);
#ifdef FSAA
if (fsaa > 1)
{
if (!SDL_VideoModeOK(window_width, window_height, bpp, flags))
{
safe_snprintf(str, sizeof(str), "Can't use fsaa mode x%d, disabling it.", fsaa);
LOG_TO_CONSOLE(c_yellow1, str);
LOG_WARNING("%s\n", str);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 0);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 0);
fsaa = 0;
}
}
#endif /* FSAA */
//now, test if the video mode is OK...
if(!SDL_VideoModeOK(window_width, window_height, bpp, flags))
{
char vid_mode_str[25];
safe_snprintf (vid_mode_str, sizeof (vid_mode_str), "%ix%ix%i", window_width, window_height, bpp);
safe_snprintf(str,sizeof(str),no_stencil_str,vid_mode_str);
LOG_TO_CONSOLE(c_red1,str);
LOG_ERROR("%s\n",str);
SDL_GL_SetAttribute( SDL_GL_STENCIL_SIZE, 0);
have_stencil=0;
//now, test if the video mode is OK...
if(!SDL_VideoModeOK(window_width, window_height, bpp, flags))
{
int old_width;
int old_height;
int old_bpp;
old_width=window_width;
old_height=window_height;
old_bpp=bpp;
window_width=640;
window_height=480;
bpp=32;
safe_snprintf (vid_mode_str, sizeof (vid_mode_str), "%ix%ix%i", old_width, old_height, old_bpp);
safe_snprintf(str,sizeof(str),safemode_str,vid_mode_str);
LOG_TO_CONSOLE(c_red1,str);
LOG_ERROR("%s\n",str);
full_screen=1;
video_mode=2;
}
}
else have_stencil=1;
}
示例9: init_video
void init_video()
{
char str[400];
int rgb_size[3];
setup_video_mode(full_screen, video_mode);
/* Detect the display depth */
if(!bpp)
{
if ( SDL_GetVideoInfo()->vfmt->BitsPerPixel <= 8 )
{
bpp = 8;
}
else
if ( SDL_GetVideoInfo()->vfmt->BitsPerPixel <= 16 )
{
bpp = 16; /* More doesn't seem to work */
}
else bpp=32;
}
//adjust the video mode accordingly
if (video_mode == 0)
{
//do nothing
} else if(bpp==16) {
if(!(video_mode%2))
video_mode-=1;
} else {
if(video_mode%2)
video_mode+=1;
}
/* Initialize the display */
switch (bpp) {
case 8:
rgb_size[0] = 2;
rgb_size[1] = 3;
rgb_size[2] = 3;
break;
case 15:
case 16:
rgb_size[0] = 5;
rgb_size[1] = 5;
rgb_size[2] = 5;
break;
default:
rgb_size[0] = 8;
rgb_size[1] = 8;
rgb_size[2] = 8;
break;
}
// Mac OS X will always use 8-8-8-8 ARGB for 32-bit screens and 5-5-5 RGB for 16-bit screens
#ifndef OSX
SDL_GL_SetAttribute( SDL_GL_RED_SIZE, rgb_size[0] );
SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, rgb_size[1] );
SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, rgb_size[2] );
#endif
#ifdef OSX
// enable V-SYNC
SDL_GL_SetAttribute( SDL_GL_SWAP_CONTROL, 1 );
#endif
SDL_GL_SetAttribute( SDL_GL_ALPHA_SIZE, 0 );
SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 24 );
SDL_GL_SetAttribute( SDL_GL_STENCIL_SIZE, 8 );
SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
#ifdef FSAA
if (fsaa > 1)
{
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, fsaa);
glDisable(GL_MULTISAMPLE);
}
#endif /* FSAA */
check_gl_mode();
#ifdef OTHER_LIFE
SDL_WM_SetIcon(SDL_LoadBMP("ol_icon.bmp"), NULL);
#else
SDL_WM_SetIcon(SDL_LoadBMP("icon.bmp"), NULL);
#endif
/* Set the window manager title bar */
#ifdef FSAA
if (fsaa > 1)
{
if (!SDL_SetVideoMode(window_width, window_height, bpp, flags))
{
safe_snprintf(str, sizeof(str), "Can't use fsaa mode x%d, disabling it.", fsaa);
LOG_TO_CONSOLE(c_yellow1, str);
LOG_WARNING("%s\n", str);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 0);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 0);
fsaa = 0;
}
}
#endif /* FSAA */
//try to find a stencil buffer (it doesn't always work on Linux)
if(!SDL_SetVideoMode(window_width, window_height, bpp, flags))
//.........这里部分代码省略.........
示例10: WinMain
int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
#else
int main(int argc, char** argv) {
#endif
SDL_Surface *screen_sfc;
F1SpiritApp *game;
KEYBOARDSTATE *k;
int time, act_time;
SDL_Event event;
bool quit = false;
bool need_to_redraw = true;
#ifdef F1SPIRIT_DEBUG_MESSAGES
output_debug_message("Application started\n");
#endif
#ifdef HAVE_GLES
fullscreen = true;
#endif
screen_sfc = initialization((fullscreen ? SDL_FULLSCREEN : 0));
if (screen_sfc == 0)
return 0;
k = new KEYBOARDSTATE();
game = new F1SpiritApp();
#if 0//ndef HAVE_GLES
// why recreating the context ???
if (fullscreen) {
#ifdef HAVE_GLES
EGL_Close();
screen_sfc = SDL_SetVideoMode((fullscreen)?desktopW:SCREEN_X, (fullscreen)?desktopH:SCREEN_Y, COLOUR_DEPTH, (fullscreen ? SDL_FULLSCREEN : 0));
EGL_Open((fullscreen)?desktopW:SCREEN_X, (fullscreen)?desktopH:SCREEN_Y);
#else
screen_sfc = SDL_SetVideoMode((fullscreen)?desktopW:SCREEN_X, (fullscreen)?desktopH:SCREEN_Y, COLOUR_DEPTH, SDL_OPENGL | (fullscreen ? SDL_FULLSCREEN : 0));
#endif
SDL_WM_SetCaption(application_name, 0);
SDL_ShowCursor(SDL_DISABLE);
reload_textures++;
#ifndef HAVE_GLES
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
#endif
}
#endif
time = init_time = SDL_GetTicks();
IMG_Init(IMG_INIT_JPG|IMG_INIT_PNG);
while (!quit) {
while ( SDL_PollEvent( &event ) ) {
switch ( event.type ) {
/* Keyboard event */
case SDL_KEYDOWN:
#ifdef __APPLE__
if (event.key.keysym.sym == SDLK_q) {
SDLMod modifiers;
modifiers = SDL_GetModState();
if ((modifiers &KMOD_META) != 0) {
quit = true;
}
}
#else
if (event.key.keysym.sym == SDLK_F12) {
quit = true;
}
#endif
if (event.key.keysym.sym == SDLK_F10) {
game->save_configuration("f1spirit.cfg");
game->load_configuration("f1spirit.cfg");
}
#ifdef _WIN32
if (event.key.keysym.sym == SDLK_F4) {
SDLMod modifiers;
modifiers = SDL_GetModState();
if ((modifiers&KMOD_ALT) != 0)
quit = true;
}
#endif
#ifdef __APPLE__
if (event.key.keysym.sym == SDLK_f) {
//.........这里部分代码省略.........
示例11: TRanrotBGenerator
SDL_Surface *initialization(int flags)
{
const SDL_VideoInfo* info = 0;
int bpp = 0;
SDL_Surface *screen;
rg = new TRanrotBGenerator(0);
#ifdef F1SPIRIT_DEBUG_MESSAGES
output_debug_message("Initializing SDL\n");
#endif
if (SDL_Init(SDL_INIT_VIDEO | (sound ? SDL_INIT_AUDIO : 0) | SDL_INIT_JOYSTICK | SDL_INIT_EVENTTHREAD) < 0) {
#ifdef F1SPIRIT_DEBUG_MESSAGES
output_debug_message("Video initialization failed: %s\n", SDL_GetError());
#endif
return 0;
}
#ifdef F1SPIRIT_DEBUG_MESSAGES
output_debug_message("SDL initialized\n");
#endif
info = SDL_GetVideoInfo();
if (!info) {
#ifdef F1SPIRIT_DEBUG_MESSAGES
output_debug_message("Video query failed: %s\n", SDL_GetError());
#endif
return 0;
}
if (fullscreen) {
bpp = COLOUR_DEPTH;
} else {
bpp = info->vfmt->BitsPerPixel;
}
desktopW = info->current_w;
desktopH = info->current_h;
#ifdef F1SPIRIT_DEBUG_MESSAGES
output_debug_message("Setting OpenGL attributes\n");
#endif
#ifndef HAVE_GLES
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
#endif
#ifdef F1SPIRIT_DEBUG_MESSAGES
output_debug_message("OpenGL attributes set\n");
#endif
#ifdef F1SPIRIT_DEBUG_MESSAGES
output_debug_message("Initializing video mode\n");
#endif
#ifdef HAVE_GLES
fullscreen = true;
flags = SDL_FULLSCREEN;
#else
flags = SDL_OPENGL | flags;
#endif
screen = SDL_SetVideoMode((fullscreen)?desktopW:SCREEN_X, (fullscreen)?desktopH:SCREEN_Y, bpp, flags);
if (screen == 0) {
#ifdef F1SPIRIT_DEBUG_MESSAGES
output_debug_message("Video mode set failed: %s\n", SDL_GetError());
#endif
return 0;
}
#ifdef HAVE_GLES
EGL_Open((fullscreen)?desktopW:SCREEN_X, (fullscreen)?desktopH:SCREEN_Y);
#endif
#ifdef F1SPIRIT_DEBUG_MESSAGES
output_debug_message("Video mode initialized\n");
#endif
calcMinMax((fullscreen)?desktopW:SCREEN_X, (fullscreen)?desktopH:SCREEN_Y);
SDL_WM_SetCaption(application_name, 0);
SDL_WM_SetIcon(SDL_LoadBMP("graphics/f1sicon.bmp"), NULL);
SDL_ShowCursor(SDL_DISABLE);
if (sound) {
//.........这里部分代码省略.........
示例12: CreateDisplay
void CreateDisplay( void ) {
Uint32 windowFlags = SDL_WINDOW_OPENGL | SDL_WINDOW_ALLOW_HIGHDPI;
if ( SDL_Init( SDL_INIT_VIDEO ) != 0 ) {
return;
}
if ( vid_noBorder->GetBool() ) {
windowFlags |= SDL_WINDOW_BORDERLESS;
}
// targeting OpenGL 3.1 core
SDL_GL_SetAttribute( SDL_GL_CONTEXT_MAJOR_VERSION, 3 );
SDL_GL_SetAttribute( SDL_GL_CONTEXT_MINOR_VERSION, 1 );
SDL_GL_SetAttribute( SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE );
uint32_t contextFlags = SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG;
if ( Common::com_developer->GetBool() ) {
contextFlags |= SDL_GL_CONTEXT_DEBUG_FLAG;
}
#ifdef _DEBUG
contextFlags |= SDL_GL_CONTEXT_DEBUG_FLAG;
#endif
SDL_GL_SetAttribute( SDL_GL_CONTEXT_FLAGS, contextFlags );
int multisample = r_multisample->GetInt32();
if ( multisample > 0 ) {
SDL_GL_SetAttribute( SDL_GL_MULTISAMPLEBUFFERS, 1 );
//TODO: find the highest significant bit to ensure samples^2
SDL_GL_SetAttribute( SDL_GL_MULTISAMPLESAMPLES, multisample );
}
else {
SDL_GL_SetAttribute( SDL_GL_MULTISAMPLEBUFFERS, 0 );
}
int32_t width = vid_width->GetInt32();
int32_t height = vid_height->GetInt32();
window = SDL_CreateWindow(
WINDOW_TITLE,
SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
width, height,
windowFlags
);
SDL_assert( window && "Failed to create window" );
// when creating a fullscreen window, the actual width/height may not be what was requested
// certain drawing code relies on knowing the width/height of the display, so we'll update it with the
// proper values
SDL_GetWindowSize( window, &width, &height );
vid_width->Set( width );
vid_height->Set( height );
context = SDL_GL_CreateContext( window );
SDL_assert( context && "Failed to create OpenGL context on window" );
SDL_GL_MakeCurrent( window, context );
rdState.window.valid = true;
rdState.window.width = static_cast<uint32_t>( width );
rdState.window.height = static_cast<uint32_t>( height );
rdState.window.aspectRatio = vid_width->GetReal64() / vid_height->GetReal64();
SDL_GL_SetSwapInterval( r_swapInterval->GetInt32() );
#if defined(XS_OS_MAC)
//TODO: force vsync flag in CGL, seems to only have an Obj-C API?
/*
CGLContextObj cglContext = CGLGetCurrentContext();
if ( cglContext ) {
// ...
}
*/
#endif
rdState.driver.vendor = reinterpret_cast<const char *>( glGetString( GL_VENDOR ) );
rdState.driver.renderer = reinterpret_cast<const char *>( glGetString( GL_RENDERER ) );
rdState.driver.coreVersion = reinterpret_cast<const char *>( glGetString( GL_VERSION ) );
rdState.driver.shaderVersion = reinterpret_cast<const char *>( glGetString( GL_SHADING_LANGUAGE_VERSION ) );
console.Print( PrintLevel::Normal, "OpenGL device: %s %s\n",
rdState.driver.vendor,
rdState.driver.renderer
);
console.Print( PrintLevel::Normal, "OpenGL version: %s with GLSL %s\n",
rdState.driver.coreVersion,
rdState.driver.shaderVersion
);
}
示例13: resolver
void conn::conecta(std::string server,std::string port){
bot::team_id id = 1000;
boost::asio::io_service io_service;
tcp::resolver resolver(io_service);
auto endpoint_iterator = resolver.resolve({ server, port });
std::shared_ptr<tcp::socket> socket(new tcp::socket(io_service));
boost::asio::connect(*socket, endpoint_iterator);
bot::field_size field_width;
bot::field_size field_height;
int win_width = 500;
int win_height = 500;
bots Mundo;
boost::mutex state_mutex;
SDL_Init(SDL_INIT_VIDEO);
atexit(SDL_Quit);
SDL_WM_SetCaption("Superbots", "Superbots");
SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 5 );
SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 5 );
SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 5 );
SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 16 );
SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
MYscreen.set_screen(win_width, win_height);
SDL_Event event;
bool gameover = false;
bool connected = false;
boost::thread t = boost::thread([this,socket, &state_mutex, &gameover, &connected, &Mundo, &id, &field_width, &field_height, &win_width, &win_height] () { game_thread(socket, gameover, Mundo, id, state_mutex, field_width, field_height, win_width, win_height, connected); } );
while (!gameover) {
if(connected) {
if (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_QUIT:
gameover = true;
break;
case SDL_KEYDOWN:
switch (event.key.keysym.sym) {
case SDLK_ESCAPE:
case SDLK_q:
gameover = true;
break;
default:
break;
}
break;
case SDL_VIDEORESIZE:
win_width = event.resize.w;
win_height = event.resize.h;
MYscreen.set_screen(win_width, win_height, field_width, field_height);
break;
}
}
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
{
boost::mutex::scoped_lock lock(state_mutex);
Mundo.for_each_bot([&Mundo] (const bot & the_bot) {
auto t = the_bot.get_team() + 1;
glColor3f(t * 0.2, 1 - t * 0.3, t * 0.1);
const bot::position & pos = the_bot.get_position();
glLoadIdentity();
glTranslatef(pos.first, pos.second, 0);
glBegin(GL_QUADS);
glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(1.0f, 0.0f, 0.0f);
glVertex3f(1.0f, 1.0f, 0.0f);
glVertex3f(0.0f, 1.0f, 0.0f);
glEnd();
});
}
SDL_GL_SwapBuffers();
}
}
if(Mundo.bot_count().size() != 1) {
std::cout << "Shit!" << std::endl;
}
else {
for(auto inmortal : Mundo.bot_count()) {
std::cout << inmortal.first << " se ha pulido a todos!" << std::endl;
}
//.........这里部分代码省略.........
示例14: SDL_GL_SetAttribute
void RenderManagerGL2D::init(int xResolution, int yResolution, bool fullscreen)
{
mCurrentFlags.insert(GL_DEPTH_TEST);
mCurrentFlags.insert(GL_MULTISAMPLE);
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
Uint32 screenFlags = SDL_OPENGL;
if (fullscreen)
screenFlags |= SDL_FULLSCREEN;
SDL_WM_SetCaption(AppTitle, "");
SDL_WM_SetIcon(SDL_LoadBMP("data/Icon.bmp"), NULL);
SDL_SetVideoMode(xResolution, yResolution, 0, screenFlags);
SDL_ShowCursor(0);
glDisable(GL_MULTISAMPLE);
mLeftBlobColor = Color(255, 0, 0);
mRightBlobColor = Color(0, 255, 0);
SDL_Surface* bgSurface = loadSurface("backgrounds/strand2.bmp");
BufferedImage* bgBufImage = new BufferedImage;
bgBufImage->w = getNextPOT(bgSurface->w);
bgBufImage->h = getNextPOT(bgSurface->h);
bgBufImage->glHandle = loadTexture(bgSurface, false);
mBackground = bgBufImage->glHandle;
mImageMap["background"] = bgBufImage;
mBallShadow = loadTexture(loadSurface("gfx/schball.bmp"), false);
mScroll = loadTexture(loadSurface("gfx/scrollbar.bmp"), false);
for (int i = 1; i <= 16; ++i)
{
char filename[64];
sprintf(filename, "gfx/ball%02d.bmp", i);
GLuint ballImage = loadTexture(loadSurface(filename), false);
mBall.push_back(ballImage);
}
for (int i = 1; i <= 5; ++i)
{
char filename[64];
sprintf(filename, "gfx/blobbym%d.bmp", i);
GLuint blobImage = loadTexture(loadSurface(filename), false);
mBlob.push_back(blobImage);
sprintf(filename, "gfx/blobbym%d.bmp", i);
GLuint blobSpecular = loadTexture(loadSurface(filename), true);
mBlobSpecular.push_back(blobSpecular);
sprintf(filename, "gfx/sch1%d.bmp", i);
GLuint blobShadow = loadTexture(loadSurface(filename), false);
mBlobShadow.push_back(blobShadow);
}
// create text base textures
SDL_Surface* textbase = createEmptySurface(2048, 32);
SDL_Surface* hltextbase = createEmptySurface(2048, 32);
SDL_Surface* smalltextbase = createEmptySurface(1024, 16);
SDL_Surface* hlsmalltextbase = createEmptySurface(1024, 16);
int x = 0;
int sx = 0;
for (int i = 0; i <= 53; ++i)
{
char filename[64], filename2[64];
sprintf(filename, "gfx/font%02d.bmp", i);
sprintf(filename2, "gfx/font_small/font%02d.bmp", i);
SDL_Surface* fontSurface = loadSurface(filename);
SDL_Surface* fontSurface2 = loadSurface(filename2);
GLuint newFont = loadTexture(loadSurface(filename), false);
GLuint newFont2 = loadTexture(loadSurface(filename2), false);
SDL_Surface* highlight = highlightSurface(fontSurface, 60);
SDL_Surface* highlight2 = highlightSurface(fontSurface2, 60);
SDL_FreeSurface(fontSurface);
SDL_FreeSurface(fontSurface2);
fontSurface = loadSurface(filename);
fontSurface2 = loadSurface(filename2);
SDL_Rect r = {x, 0, fontSurface->w, fontSurface->h};
SDL_BlitSurface(fontSurface, 0, textbase, &r);
SDL_BlitSurface(highlight, 0, hltextbase, &r);
r = {sx, 0, fontSurface2->w, fontSurface2->h};
SDL_BlitSurface(fontSurface2, 0, smalltextbase, &r);
SDL_BlitSurface(highlight2, 0, hlsmalltextbase, &r);
//GLuint ballImage = loadTexture(sf, false);
//mBall.push_back(ballImage);
Texture s = Texture(0, x, 0, fontSurface->w, fontSurface->h, 2048, 32);
mFont.push_back(s);
mHighlightFont.push_back(s);
s = Texture(0, sx, 0, fontSurface2->w, fontSurface2->h, 1024, 16);
//mFont.push_back(newFont);
//mHighlightFont.push_back(loadTexture(highlight, false));
mSmallFont.push_back( s );
mHighlightSmallFont.push_back( s );
//.........这里部分代码省略.........
示例15: GL_SetupAttributes
/*
==================
GL_SetupAttributes
==================
*/
void GL_SetupAttributes()
{
int samples;
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, gl_stencilbits->integer );
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES);
#ifdef XASH_NANOGL
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 1);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);
#endif
#if defined XASH_WES || defined XASH_REGAL
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
#endif
switch( gl_msaa->integer )
{
case 2:
case 4:
case 8:
case 16:
samples = gl_msaa->integer;
break;
default:
samples = 0; // don't use, because invalid parameter is passed
}
if( samples )
{
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, samples);
}
else
{
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 0);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 0);
}
}