草庐IT

c++ - 防止SDL程序消耗额外资源

我正在设计应该在图像上展示开放式CV的程序。我注意到基本SDL应用程序的概念非常糟糕——它由循环和延迟组成。while(true){while(event_is_in_buffer(event)){process_event(event);}do_some_other_stuff();do_some_delay(100);//Programisstuckhere,unabletorespondtouserinput}这使得程序即使在后台也可以执行和渲染(或者如果一开始就不需要重新渲染)。如果我使用更长的延迟,我消耗的资源就会更少,但我必须等待更长的时间才能处理鼠标点击等事件。我想要的是

c++ - 在运行 OS X 10.7 Lion 的 Mac 上从源代码编译 SDL

我已经从libsdl网站下载了SDL源SDL-1.2.14.zip并进入了制作步骤。当我./configure时,我没有遇到任何问题。然而,当我make时,它似乎在编译过程中经历了很长的一段路要走,并死于此输出:/bin/sh./libtool--mode=compilegcc-g-O2-I./include-D_GNU_SOURCE=1-DTARGET_API_MAC_CARBON-DTARGET_API_MAC_OSX-fvisibility=hidden-I/usr/X11R6/include-DXTHREADS-D_THREAD_SAFE-force_cpusubtype_AL

使用控制台窗口进行 C++/SDL 调试

我正在玩弄一些OpenGL,使用SDL来处理窗口/输入等。目前我正在向HUD显示我想看到的任何信息。好吧,这太麻烦了,我想知道是否有一种简单的方法可以打开一个单独的控制台窗口来向我报告此信息。我对C++还是个新手,所以如果这是一个明显的问题,请放轻松。 最佳答案 以下代码适用于Windows。我总是发现保留按需创建控制台窗口的功能很方便:inthConHandle;intptr_tlStdHandle;CONSOLE_SCREEN_BUFFER_INFOconinfo;FILE*fp;//allocateaconsoleforthi

c++ - 通过采用 void * 的 C 接口(interface)传递 shared_ptr

我有一个使用SDL的C++项目,特别是SDL事件。我想将事件系统用于传入的网络消息,就像它用于UI事件一样。我可以定义一个新的事件类型并附加一些任意数据(参见thisexample)。如果我使用普通指针,这就是我会做的:Uint32message_event_type=SDL_RegisterEvents(1);/*Inthemaineventloop*/while(SDL_Poll(&evt)){if(evt.type==message_event_type){Message*msg=evt.user.data1;handle_message(msg);}}/*Networkingc

c++ - SDL + SDL_ttf : Transparent blended text?

我想在具有给定alphachannel的SDL_Surface上呈现抗锯齿字符串。我发现可以渲染:具有字符串呈现方法的Blended变体的抗锯齿字符串(即:TTR_RenderText_Blended)。但是我不能让它透明。使用Shaded方法的抗锯齿字符串。但是有一个坚实的背景。可以将背景和绘制的字符串设为透明,但纯色背景仍然存在。也不可能将透明背景色传递给它。一个非抗锯齿字符串,我可以使用Solid变体使其透明化。但它没有消除锯齿。谢谢 最佳答案 我知道我在这方面有点晚了:/根据关于SDL_SetAlpha的SDL文档:Note

c++ - 如何在 OSX 下的 SDL/OpenGL 应用程序中加载 JPG/PNG 纹理

我正在编写一个在OSX下运行的SDL/OpenGL应用程序。我必须使用使用DevIL库加载JPG和PNG纹理的现有代码。不幸的是,这在OSX下效果很差,所以我决定根本不使用DevIL,而是使用另一个库重写应用程序的各个部分。我想保持它的灵active(DevIL可以处理很multimap像格式)并且易于使用。是否有可以推荐的DevIL的良好替代品?该应用程序完全用C++编写。 最佳答案 看看SDL_image图书馆。它提供像IMG_LoadPNG这样的功能,可以将您的图片“作为”SDL_Surface加载。由于您已经在使用SDL,因

c++ - 如何使用 SDL2 获取屏幕分辨率?

我正在使用像素完美的源图像和SDL2制作程序。当设置为全屏时,我希望它使用native分辨率(SDL_WINDOW_FULLSCREEN_DESKTOP标志)但仅在某个最小分辨率和合理的最大分辨率之间,之后它将从最大的合法分辨率延伸。问题是我只能在SDL2文档中找到对程序自身窗口或程序大小的引用。SDL中是否有任何函数可以从中至少几乎直接检索屏幕宽度和高度?或者我应该使用SDL_WINDOW_FULLCREEN_DESKTOP然后使用SDL_GetWindowSize()并再次调整窗口大小?这甚至会按预期工作吗?我想找到一个比这更优雅的解决方案。感觉很脏。

c++ - 在 C/C++ 中生成线程的跨平台方式?

在C和C++中是否有产生线程的跨平台方式?像sched_yield()或Sleep(0)这样的东西?在某些实现中,SDL_Delay(0)是否总是屈服或会立即返回? 最佳答案 鉴于C和C++(直至C++98)都没有“线程”,因此没有完全跨平台的方式让线程产生。在C++0x中,有一个函数std::this_thread::yield()可以被调用来yield。一旦人们开始使用C++0x线程库,这将是线程产生的可移植方式。 关于c++-在C/C++中生成线程的跨平台方式?,我们在StackO

c++ - "Connecting"SDL_Surface 到 shared_ptr

我想知道如何将SDL_Surface*与shared_ptr连接起来?在删除SDL_Surface之前,我需要调用SDL_FreeSurface(SDL_Surface*)。如何在shared_ptr中“修改删除过程”? 最佳答案 只需将SDL_FreeSurface传递给构造函数:std::shared_ptrshared_surf(SDL_LoadBMP("foo.bmp"),SDL_FreeSurface);请确保您不使用SDL_SetVideoMode或SDL_GetVideoSurface返回的指针执行此操作。

c++ - 如何将 OpenCV IplImage 转换为 SDL_Surface?

我正在尝试编写一个程序,该程序采用SDL_Surface,将其转换为IplImage,使用cvBlobsLib查找Blob,将Blob绘制为Blob图像,然后将输出IplImage转换回SDL_Surface。我快完成了:仅将IplImage转换回SDL_Surface尚未完成。这个IplImage有3个图像channel,每像素8位。我想我可以使用两个调用:SDL_Surface*SDL_CreateRGBSurface(Uint32flags,intwidth,intheight,intdepth,Uint32Rmask,Uint32Gmask,Uint32Bmask,Uint32