我正在尝试使用SDL加载PNG文件,但该程序不起作用,并且此错误出现在控制台中
"libpng警告:iCCP:已知错误的sRGB配置文件"
为什么出现此警告?我该怎么做才能解决这个问题?
我从SDL2开始,在尝试理解SDL_Renderer是什么时遇到了一些麻烦.
它是什么?它有什么作用?SDL_Renderer,SDL_Window,SDL_Surface和SDL_Texture之间有什么区别?它们是如何相关的?
在尝试理解这个介绍性代码时,我遇到了这个问题:
#include <iostream>
#include <SDL2/SDL.h>
int main()
{
/* Starting SDL */
if (SDL_Init(SDL_INIT_EVERYTHING) != 0) {
std::cout << "SDL_Init Error: " << SDL_GetError() << std::endl;
return 1;
}
/* Create a Window */
SDL_Window *window = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN);
if (window == nullptr) {
std::cout << "SDL_CreateWindow Error: " << SDL_GetError() << std::endl;
return 1;
}
/* Create a Render */
SDL_Renderer *render = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
if (render == nullptr) …Run Code Online (Sandbox Code Playgroud) 任何人都可以用简单的词语向我解释纹理和表面之间的区别是什么?我看到它用在SDL2为SDL_Surface和SDL_Texture.SDL_Texture创建SDL_Surface,然后从图像/位图创建.两者都是像素集合.但是我没看到它们之间的主要区别(必须用GPU做些什么?)
我试图谷歌它,但我发现的所有解释都太复杂,无法深入了解计算机图形的东西.
我正在使用LazyFoo的SDL2.0教程,使用Code :: Blocks 13.12.我已经毫无困难地将SDL2链接并在VS2010中运行但是已经更改了IDE并遇到了这个错误:
winapifamily.h:没有这样的文件或目录
我认为一切都是正确的.我已将程序指向我的SDL2 include和lib目录.
Buildlog :(文件中出现错误:..\include\SDL2\SDL_platform.h)
=== Build:在SDL2_Setup中调试(编译器:GNU GCC编译器)===
致命错误:winapifamily.h:没有这样的文件或目录
===构建失败:1个错误,0个警告(0分钟,0秒(秒))===
这是我第一次在这里问一个问题.我在Google上找到答案并在此处搜索现有的问题/答案,但无法解决问题.这是我的代码.
我的代码:
// Using SDL and standard IO
#include <SDL.h>
#include <stdio.h>
// Screen dimension constants
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
int main( int argc, char* args[] )
{
// The window we'll be rendering to
SDL_Window* window = NULL;
// The surface contained by the window
SDL_Surface* screenSurface = NULL;
// Initialize SDL
if( SDL_Init( SDL_INIT_VIDEO) < 0 ) …Run Code Online (Sandbox Code Playgroud) 我正在搞乱SDL,发现你不能用SDL旋转图像.问题到处都是,人们说使用OpenGL进行轮换.我一直认为SDL与OpenGL是完全分开的,我在思考这个问题时错了吗?我甚至找到了在SDL中使用OpenGL的教程,这让我更加困惑.SDL和OpenGL之间究竟有什么关系?为什么不使用OpenGL,如果它更强大,并允许你做更多(这是从我读过)?
我基本上想要创建一个全屏窗口并在其上绘制不同颜色和大小的文本(并且还更新屏幕).我在python中使用了pygame,我正在寻找一个类似的库(应该相当容易使用).
+1,如果它也处理输入...
在设置SDL时遇到一些问题后,我发现SDL定义了一个替换main的宏:
#define main SDL_main
// And then
extern C_LINKAGE int SDL_main(int argc, char *argv[]);
Run Code Online (Sandbox Code Playgroud)
如果main函数没有定义argc和argv参数,这也会产生编译错误.
当我看到它时,这个宏让我很头疼...为什么SDL需要重新定义主要?经过一番搜索,我找到了一些人#undef main,并以正常的方式使用它.
所以这就是问题: 为什么SDL需要重新定义main,它做什么?取消定义是否有任何副作用?
我注意到的一件事是SDL将标准输出和错误重定向到文件(我不想要这种行为),如果我取消定义主要行为,这种行为就会停止.
我尝试按照这两个教程(或由于版本差异而适用的部分)来安装SDL 2.0.2以使用Xcode 5.1:
运行链接了SDL 2框架的任何程序会导致Xcode崩溃并出现以下问题详细信息:
Process: Xcode [1787]
Path: /Applications/Xcode.app/Contents/MacOS/Xcode
Identifier: com.apple.dt.Xcode
Version: 5.1 (5084)
Build Info: IDEFrameworks-5084000000000000~21
App Item ID: 497799835
App External ID: 444172641
Code Type: X86-64 (Native)
Parent Process: launchd [257]
Responsible: Xcode [1787]
User ID: 501
PlugIn Path: /Library/Frameworks/SDL2.framework/Versions/A/SDL2
PlugIn Identifier: org.libsdl.SDL2
PlugIn Version: 2.0.2 (2.0.2)
Date/Time: 2014-03-13 04:24:59.771 +0200
OS Version: Mac OS X 10.9.2 (13C64)
Report Version: 11
Anonymous UUID: EFECF2A0-A489-055E-0904-D3CD9E756EB0
Crashed Thread: 21 <lldb.process.internal-state(pid=1804)>
Exception Type: EXC_BAD_ACCESS (Code Signature Invalid)
Exception …Run Code Online (Sandbox Code Playgroud) 我正在使用Pygame/SDL的操纵杆模块从游戏手柄获取输入.每当我调用它的get_hat()方法时,它就会打印到控制台.这是有问题的,因为我使用控制台来帮助我调试,现在它SDL_JoystickGetHat value:0:每秒被淹没60次.有没有办法可以禁用它?通过Pygame/SDL中的选项或在函数调用时抑制控制台输出?我在Pygame文档中没有提到这一点.
编辑:原来是由于在编译SDL库时打开了调试.
我正在Windows中构建物理模拟引擎和编辑器.我想使用Qt构建编辑器部分,我想使用SDL和OpenGL来运行引擎.
我的第一个想法是仅使用Qt构建编辑器,并与引擎(资源管理器,渲染器,数学)共享尽可能多的代码.但是,我还希望能够在编辑器中运行模拟.这意味着我还必须共享使用SDL线程的模拟代码.
所以,我的问题是:有没有办法通过使用SDL将OpenGL渲染到Qt窗口?
我在网上看到,可以为SDL提供一个窗口句柄来呈现.有人有经验吗?
此外,模拟器的线程部分可能会出现问题,因为它使用SDL线程.