标签: sdl

我如何一起使用Qt和SDL?

我正在Windows中构建物理模拟引擎和编辑器.我想使用Qt构建编辑器部分,我想使用SDL和OpenGL来运行引擎.

我的第一个想法是仅使用Qt构建编辑器,并与引擎(资源管理器,渲染器,数学)共享尽可能多的代码.但是,我还希望能够在编辑器中运行模拟.这意味着我还必须共享使用SDL线程的模拟代码.

所以,我的问题是:有没有办法通过使用SDL将OpenGL渲染到Qt窗口?

我在网上看到,可以为SDL提供一个窗口句柄来呈现.有人有经验吗?

此外,模拟器的线程部分可能会出现问题,因为它使用SDL线程.

c++ winapi qt sdl

27
推荐指数
2
解决办法
3万
查看次数

我应该以什么顺序将我的顶点发送到OpenGL以进行剔除

我正在学习一个3D opengl的地方,而且相当不错,我现在有一个漂亮的相机和一些简单的立方体物体.目前正在使用顶点数组,但我在这里很快就交换到了VBO.我只是想尝试剔除,但是我不确定我应该指定我的顶点的顺序,现在这就是我正在做的事情:

void cube::update_verts(){
GLushort cur=0;

///back face
verts[cur++]=x; verts[cur++]=y; verts[cur++]=z;
verts[cur++]=x+sx; verts[cur++]=y; verts[cur++]=z;
verts[cur++]=x+sx; verts[cur++]=y+sy; verts[cur++]=z;
verts[cur++]=x; verts[cur++]=y+sy; verts[cur++]=z;

///right face
verts[cur++]=x+sx; verts[cur++]=y+sy; verts[cur++]=z;
verts[cur++]=x+sx; verts[cur++]=y; verts[cur++]=z;
verts[cur++]=x+sx; verts[cur++]=y; verts[cur++]=z+sz;
verts[cur++]=x+sx; verts[cur++]=y+sy; verts[cur++]=z+sz;

///top face
verts[cur++]=x+sx; verts[cur++]=y+sy; verts[cur++]=z;
verts[cur++]=x; verts[cur++]=y+sy; verts[cur++]=z;
verts[cur++]=x; verts[cur++]=y+sy; verts[cur++]=z+sz;
verts[cur++]=x+sx; verts[cur++]=y+sy; verts[cur++]=z+sz;

///front face
verts[cur++]=x; verts[cur++]=y; verts[cur++]=z+sz;
verts[cur++]=x+sx; verts[cur++]=y; verts[cur++]=z+sz;
verts[cur++]=x+sx; verts[cur++]=y+sy; verts[cur++]=z+sz;
verts[cur++]=x; verts[cur++]=y+sy; verts[cur++]=z+sz;

///bottom face
verts[cur++]=x+sx; verts[cur++]=y; verts[cur++]=z;
verts[cur++]=x; verts[cur++]=y; verts[cur++]=z;
verts[cur++]=x; verts[cur++]=y; verts[cur++]=z+sz;
verts[cur++]=x+sx; verts[cur++]=y; verts[cur++]=z+sz;

///left face
verts[cur++]=x; verts[cur++]=y+sy; …
Run Code Online (Sandbox Code Playgroud)

c++ opengl sdl

27
推荐指数
2
解决办法
2万
查看次数

SDL2纹理有什么意义?

我有点坚持SDL2纹理背后的逻辑.对我来说,它们毫无意义,因为你无法吸引他们.

在我的计划,我有几个面(或什么表面之前,我切换到SDL2),我只是图混合在一起,形成层.现在,似乎我需要创建几个渲染器和纹理来创建相同的效果,因为SDL_RenderCopy它采用纹理指针.

不仅如此,所有渲染器都必须来自一个窗口,我明白这一点,但仍然会让我更加严重.

这一切看起来都非常庞大和缓慢.我错过了什么吗?有没有办法直接绘制纹理?纹理有什么意义,我可以安全地使用多个(如果不是数百个)渲染器来代替表面吗?

c++ textures sdl renderer sdl-2

27
推荐指数
3
解决办法
2万
查看次数

OpenGL在辅助线程中渲染

我正在编写一个3D模型查看器应用程序作为业余爱好项目,也作为一个测试平台来尝试不同的渲染技术.我正在使用SDL来处理窗口管理和事件,以及用于3D渲染的OpenGL.我的程序的第一次迭代是单线程的,运行得很好.但是,我注意到单线程程序导致系统变得非常缓慢/滞后.我的解决方案是将所有呈现代码移动到不同的线程中,从而释放主线程来处理事件并防止应用程序无响应.

该解决方案间歇性地工作,程序经常因为主要来自X窗口系统的变化(并且在我看来奇怪)一组错误而崩溃.这让我质疑我最初的假设,即只要我的所有OpenGL调用都发生在创建上下文的线程中,一切都应该仍然有效.在花了一天的大部分时间在互联网上寻找答案后,我彻底难过了.

更简洁:是否可以在主线程以外的线程中使用OpenGL执行3D渲染?我是否仍可以使用此配置的跨平台窗口库(如SDL或GLFW)?有没有更好的方法来做我想做的事情?

到目前为止,我一直在使用C++在Linux(Ubuntu 11.04)上进行开发,尽管如果有一种在这些语言中效果更好的解决方案,我也对Java和Python感到满意.

更新:根据要求,一些澄清:

  • 当我说"系统变得迟钝"时,我的意思是与桌面交互(拖动窗口,与面板交互等)变得比正常情况慢得多.移动我的应用程序的窗口需要几秒钟的时间,而其他交互只是慢到足以令人讨厌.
  • 至于干扰合成窗口管理器...我正在使用Ubuntu 11.04附带的GNOME shell(现在远离Unity ...)我找不到任何禁用桌面效果的选项,例如以前的发行版.我认为这意味着我没有使用合成窗口管理器......虽然我可能是非常错误的.
  • 我认为"X错误"是由于我在终端上收到的错误消息导致的服务器错误.更多细节如下.

我的应用程序的多线程版本出现的错误:

XIO:X服务器上的致命IO错误11(资源暂时不可用)在73个请求(73个已知处理)之后":0.0",剩余0个事件.

X请求失败的错误:BadColor(无效的Colormap参数)失败请求的主要操作码:79(X_FreeColormap)失败请求中的资源ID:0x4600001失败请求的序列号:72输出流中的当前序列号:73

游戏:../../ src/xcb_io.c:140:dequeue_pending_request:断言`req == dpy-> xcb-> pending_requests'失败.中止

我总是得到上面三个错误中的一个,我得到的一个变化,显然是随机的,这(我的眼睛)似乎证实我的问题确实源于我使用线程.请记住,我正在学习,因此我很有可能在我的无知中,我有一些相当愚蠢的东西.

解决方案:对于遇到类似问题的任何人,我通过将调用移至SDL_Init(SDL_INIT_VIDEO)渲染线程并使用互斥锁锁定上下文初始化来解决我的问题.这可以确保在将要使用它的线程中创建上下文,并且它可以防止主循环在初始化任务完成之前启动.启动过程的简化概述:

1)主线程初始化struct将在两个线程之间共享,并包含互斥锁.
2)主线程生成渲染线程并暂停一段时间(1-5ms),使渲染线程有时间锁定互斥锁.暂停后,主线程在尝试锁定互斥锁时阻塞.
3)渲染线程锁互斥,初始化SDL的视频子系统并创建OpenGL上下文.
4)渲染线程解锁互斥锁并进入其"渲染循环".
5)主线程不再被阻塞,因此在完成初始化步骤之前锁定和解锁互斥锁.

请务必阅读答案和评论,那里有很多有用的信息.

opengl multithreading sdl

26
推荐指数
1
解决办法
2万
查看次数

如何使用SDL2为Android,iOS和Windows开发设置Visual Studio 2015?

Visual Studio 2015集成了Android Emulator支持.他们甚至有一个预先制作的模板来设置Windows Phone,Android和iOS目标.看起来应该有一些方法可以在同一个解决方案中设置SDL 2.0,以便在Android和Windows之间轻松切换.我真的希望有一个包含SDL 2.0的现有模板,或者关于这个主题的教程.

我现在在哪里?我有一个工作代码库,我一直在基于SDL 2.0的visual studio 2015中维护,很久以前我手动将它移植到我的Mac上的Xcode,我能够在模拟器中运行.我还没有在Android上运行.xcode中的端口可能已经过时了,因为我已经更新了多个库并且它是在三年前.

我对这个问题的理想答案将导致Visual Studio 2015项目的SDL 2.0配置适用于iOS,Android和Windows.我正在寻找的是一系列创建模板项目的步骤,可以用作在Windows或Android模拟器上通过SDL初始化OpenGL上下文的起点.

这可能要求很多,但我希望有人已经完成了这项工作,并且可以在这里与世界分享.

c++ android sdl ios visual-studio-2015

26
推荐指数
0
解决办法
2123
查看次数

R中的Performant 2D OpenGL图形,使用qtpaint(qt)或rdyncall(SDL/OpenGL)软件包快速显示光栅图像?

对于我在R&Rcpp + OpenMP&Shiny中制作的实时交互式Mandelbrot查看器我正在寻找一种高性能的方式来显示1920x1080矩阵作为光栅图像,以期能够实现ca. 5-10 fps(计算Mandelbrot图像本身现在在中等变焦时达到约20-30 fps,当然滚动应该快速).使用image()with选项useRaster=TRUE,plot.raster或者甚至grid.raster()还没有完全削减它,所以我正在寻找更高性能的选项,理想情况下使用OpenGL加速.

我注意到有qt 包装器qtutilsqtpaint http://finzi.psych.upenn.edu/R/library/qtutils/html/sceneDevice.html 你可以在其中设置参数opengl=TRUEhttp://finzi.psych.upenn.edu/ R/library/qtpaint/html/qplotView.html 再次使用参数opengl=TRUEhttp://finzi.psych.upenn.edu/R/library/qtpaint/html/painting.html.

我还注意到应该能够使用rdyncall软件包调用SDL和GL/OpenGL函数(从https://cran.r-project.org/src/contrib/Archive/rdyncall/安装,从https://安装SDL)www.libsdl.org/download-1.2.php)`,演示可在http://hg.dyncall.org/pub/dyncall/bindings/file/87fd9f34eaa0/R/rdyncall/demo/00Index获得,例如http:// hg.dyncall.org/pub/dyncall/bindings/file/87fd9f34eaa0/R/rdyncall/demo/randomfield.R).

我是否正确使用这些软件包,应该能够使用opengl加速显示2D图像栅格?如果是这样,有没有人想过如何做到这一点(我问,因为我不是qtSDL/OpenGL的专家)?

非OpenGL选项的某些时间对我的应用来说太慢了:

# some example data & desired colour mapping of [0-1] ranged data matrix
library(RColorBrewer)
ncol=1080
cols=colorRampPalette(RColorBrewer::brewer.pal(11, "RdYlBu"))(ncol)
colfun=colorRamp(RColorBrewer::brewer.pal(11, "RdYlBu"))
col = rgb(colfun(seq(0,1, length.out …
Run Code Online (Sandbox Code Playgroud)

opengl graphics qt sdl r

26
推荐指数
1
解决办法
806
查看次数

如何在cmake中使用SDL2和SDL_image

我在寻找编译使用C++程序最简单的方法SDL2SDL_image与cmake的.

经过几个小时的搜索后,这是我最好的尝试:

的CMakeLists.txt

project(shooter-cmake2)

cmake_minimum_required(VERSION 2.8)

set(SOURCES
shooter.cpp
classes.cpp
utils.cpp
)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")

add_executable(${PROJECT_NAME} ${SOURCES})

INCLUDE(FindPkgConfig)
PKG_SEARCH_MODULE(SDL2 REQUIRED sdl2)
PKG_SEARCH_MODULE(SDL2_image REQUIRED sdl2_image)
INCLUDE_DIRECTORIES(${SDL2_INCLUDE_DIRS} ${SDL2IMAGE_INCLUDE_DIR})
TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${SDL2_LIBRARIES} ${SDL2IMAGE_LIBRARY})
Run Code Online (Sandbox Code Playgroud)

我收到这些错误:

In function `loadTexture(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, SDL_Renderer*)':
undefined reference to `IMG_LoadTexture'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

这是函数调用:

#include "SDL.h"
#include "SDL_image.h"

SDL_Texture* loadTexture(const std::string &file, SDL_Renderer *ren){
    SDL_Texture *texture = IMG_LoadTexture(ren, file.c_str());
    texture != nullptr or die("LoadTexture");
    return texture;
}
Run Code Online (Sandbox Code Playgroud)

我很绝望.请帮我!谢谢!:)

c++ sdl sdl-image cmake sdl-2

24
推荐指数
4
解决办法
5万
查看次数

SDL for iPhone有多成熟?

有一段时间我一直在考虑尝试将我最喜欢的经典PC游戏之一,The Ur-Quan Masters(又名Star Control 2)移植到iPhone上.UQM将SDL用于其所有图形,声音,输入和其他游戏内容,似乎有一个SDL到iPhone的端口,但它在这一点上看起来并不十分成熟.

有没有人把iPhone SDL端口放进去?它的效果如何?我可以期待这个项目有哪些问题,这个问题已经是iPhone的跨平台代码?

如果SDL不是一个选项,那么任何人都可以推荐一个替代框架,以便弥合SDL与OpenGL ES和Core Audio等本机库之间的差距吗?或者编码那些框架是最好的选择?

编辑添加:这是在UQM论坛上关于执行iPhone端口的论坛帖子的链接.

iphone sdl cross-platform

22
推荐指数
1
解决办法
2万
查看次数

为什么valgrind说基本的SDL程序正在泄漏内存?

这是SDL计划:

#include <SDL/SDL.h>

int main(int argc, char** argv){


  SDL_Init(SDL_INIT_VIDEO);
  SDL_Surface* screen = SDL_SetVideoMode(640, 480, 16, SDL_HWSURFACE);
  SDL_Quit();
  return 0;

}
Run Code Online (Sandbox Code Playgroud)

用命令编译:

g++ -o test test.cpp -lSDL
Run Code Online (Sandbox Code Playgroud)

这是valgrind的输出:

christian@christian-laptop:~/cpp/tetris$ valgrind --leak-check=full ./test
==3271== Memcheck, a memory error detector
==3271== Copyright (C) 2002-2009, and GNU GPL'd, by Julian Seward et al.
==3271== Using Valgrind-3.5.0-Debian and LibVEX; rerun with -h for copyright info
==3271== Command: ./test
==3271== 
==3271== 
==3271== HEAP SUMMARY:
==3271==     in use at exit: 91,097 bytes in 1,258 blocks
==3271==   total …
Run Code Online (Sandbox Code Playgroud)

c++ valgrind sdl

22
推荐指数
2
解决办法
9882
查看次数

SDL/SDL_image.h:没有这样的文件或目录

我正在尝试关注Lazy Foo的教程.但是当我尝试运行他的一个例子时,我得到了这个编译错误:

错误:SDL/SDL_image.h:没有这样的文件或目录

编译器/链接器设置正确,我在Windows XP上使用Code :: Blocks.

但问题是,没有SDL_image.h.我已经检查了它应该是的文件夹.我试图再次下载SDL库并再次检查,仍然没有SDL_image.h文件.SDL_image.h文件在哪里?

我下载的库是Win32的'Development Libraries'下的'SDL-devel-1.2.14-mingw32.tar.gz',来自以下链接:http://www.libsdl.org/download-1.2.php

c++ sdl codeblocks

22
推荐指数
2
解决办法
5万
查看次数