Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在SDL2中,在屏幕上绘制像素的最快/最有效的方法是什么?使用带有纹理的SDL_RenderDrawPoint或SDL_RenderCopy?

在SDL2中,在屏幕上绘制像素的最快/最有效的方法是什么?使用带有纹理的SDL_RenderDrawPoint或SDL_RenderCopy?
EN

Game Development用户
提问于 2016-12-31 10:46:12
回答 2查看 6.8K关注 0票数 3

我想添加像素飞溅和粒子效果的游戏。为此,我的选择是有一堆预先制作的动画形式的纹理,或创建一个粒子引擎。

对于粒子引擎方法,据我所知,我的选项是创建像素并使用以下两种方法呈现它们:

  1. SDL_RenderDrawPoint(s) (使用SDL_SetRenderDrawColor)
  2. SDL_RenderCopy (使用纹理与SDL_SetTextureColorMod)

我不知道什么是更好的方法。#2可能更容易一些,因为我有一个基于快速纹理呈现的整个系统(不一定比1更快,但似乎更容易用我的当前系统实现)。#1看起来很理想,因为它在SDL2库中是有原因的,但我真的不确定我应该采用哪种方法。

EN

回答 2

Game Development用户

回答已采纳

发布于 2016-12-31 17:33:09

因此,我运行了两个函数100,000次(运行几次只是为了确保),并使用time.h计时。我在0,0呈现了一个简单的1x1像素,在0,0呈现了一个1x1像素的纹理。下面基本上是我发现的一次试验。

SDL_RenderDrawPoint:所用时间为9毫秒

SDL_RenderCopy:时间为266毫秒

毫不奇怪,RenderDrawPoint比RenderCopy快得多。我的尝试并不完美,因为我可能已经能够使用一个更优化的纹理,并且不得不为SDL_RenderCopy使用一些变量,但是我怀疑它增加了很多时间来使RenderCopy更接近RenderDrawPoint。

编辑(本质上是我使用的代码,renderer是窗口渲染器,texture是使用RLE优化加载的纹理中的1x1位图面):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <time.h>
#include <SDL2/SDL.h>

SDL_Rect clip;
clip.x = 0;
clip.y = 0;
clip.w = 1;
clip.h = 1;

int msec, i;
clock_t start, diff;

i = 100000;
start = clock()
while(i-- > 0)
{
    SDL_RenderDrawPoint(renderer, 0, 0);
}
diff = clock() - start;

msec = diff * 1000 / CLOCKS_PER_SEC;
fprintf(stdout, "Time taken %d seconds %d milliseconds", msec/1000, msec%1000);

i = 100000;
start = clock()
while(i-- > 0)
{
    SDL_RenderCopy(renderer, texture, &clip, &clip);
}
diff = clock() - start;

msec = diff * 1000 / CLOCKS_PER_SEC;
fprintf(stdout, "Time taken %d seconds %d milliseconds", msec/1000, msec%1000);
票数 2
EN

Game Development用户

发布于 2022-04-14 03:35:59

这两种方法都不是:使用SDL_LockSurface直接访问表面数据。然后,改变像素就是改变数组中的值,这是最快的。

票数 1
EN
页面原文内容由Game Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://gamedev.stackexchange.com/questions/135126

复制
相关文章
roughnet绘制带有纹理填充的网络图
R语言数据分析指南
2023/08/18
1560
roughnet绘制带有纹理填充的网络图
(译)SDL编程入门(7)纹理加载和渲染
SDL2 的一个主要新功能是纹理渲染 API。这为您提供了快速、灵活的基于硬件的渲染。在本教程中,我们将使用这种新的渲染技术。
arcticfox
2020/09/27
1.1K0
【FFmpeg】SDL 音视频开发 ② ( SDL 视频显示函数 | 设置渲染器目标纹理 | 设置渲染器颜色 | 清除渲染器 | 渲染器绘制矩形 | 纹理拷贝 | 窗口中显示渲染纹理 )
博客源码下载 : https://download.csdn.net/download/han1202012/89421317
韩曙亮
2024/06/13
1820
【FFmpeg】SDL 音视频开发 ② ( SDL 视频显示函数 | 设置渲染器目标纹理 | 设置渲染器颜色 | 清除渲染器 | 渲染器绘制矩形 | 纹理拷贝 | 窗口中显示渲染纹理 )
使用SDL2显示一张图片,SDL2上手贴
SDL全名Simple DirectMedia Layer,是一个跨平台的底层音频、视频、键盘、鼠标操作库,操作实际通过更底层的OpenGL/Direct3D完成,在保留跨平台的兼容性之外提供了非常高的效率,所以广泛的应用在多种游戏和对速度敏感的应用中,比如鼎鼎大名的steam平台/ffmpeg/qemu/模拟器等,当前的版本是2.0。更详细的资料可以访问官网:https://www.libsdl.org/。 SDL2的编程理念清晰易用,代码简洁高效,这里用显式一副图片的最简代码来作为入门的示例,正式
俺踏月色而来
2018/06/15
1.7K0
(译)SDL编程入门(15)旋转和翻转
SDL2的硬件加速纹理渲染还能给我们提供图像快速翻转和旋转的能力。在本教程中,我们将利用这一点使一个箭头纹理旋转和翻转。
arcticfox
2020/10/19
1.3K0
(译)SDL编程入门(15)旋转和翻转
Flash在DirectX中的绘制
这里使用的是之前我说过的OLE控件在Direct3D中的渲染方法, 自己不进行swf的解析, 这不现实. 前提条件: COM编程, OLE编程, DirectX编程, ActionScript/Flash(可选). 创建一个ShockwaveFlashObjects::IShockwaveFlash的对象 实现一个IOleClientSite来做为IShockwaveFlash的容器 绘制 通过OleDraw来把GDI的像素数据绘制到DC上(IShockwaveFlash是一个IViewObjec
逍遥剑客
2018/05/23
1.8K0
SDL2来源分析7:演出(SDL_RenderPresent())
=====================================================
全栈程序员站长
2022/07/06
8710
SDL2来源分析7:演出(SDL_RenderPresent())
【Android 屏幕适配】屏幕适配基础概念 ② ( 像素 px 与 密度无关像素 dip | 像素 px 与 密度无关像素 dip 在不同屏幕像素密度 dpi 下的换算关系 )
dip 是 Desity Independent Pixels 的缩写 , 表示 密度无关像素 , dip 又可以缩写成 dp ;
韩曙亮
2023/03/30
2K0
使用 Win2D 绘制带图片纹理的圆(或椭圆)
发布于 2018-11-11 21:50 更新于 2018-11-28 08:25
walterlv
2020/02/10
7180
屏幕上那个灰色带有数字的框是什么?看着好难受!
发布于 2018-03-16 05:40 更新于 2018-09-01 00:12
walterlv
2018/09/18
2.3K0
屏幕上那个灰色带有数字的框是什么?看着好难受!
(译)SDL编程入门(8)几何图形渲染
除了新的纹理API,SDL还有新的基元渲染调用作为其渲染API[1]的一部分。因此,如果你需要渲染一些基本的形状,而你又不想为它们创建额外的图形,SDL可以为你省力。
arcticfox
2020/09/27
1.5K0
(译)SDL编程入门(8)几何图形渲染
(译)SDL编程入门(9)视口
有些时候,你只想渲染屏幕的一部分,比如最小地图。使用视口你可以控制你在屏幕上的渲染位置。
arcticfox
2020/09/27
7930
(译)SDL编程入门(9)视口
教你在Tableau中绘制蝌蚪图等带有空心圆的图表(多链接)
本文将通过分享多种方法,包括成功的与失败的尝试,来讲解如何在Tableau中创建蝌蚪图等带有空心圆的图表。
数据派THU
2018/07/30
8.5K0
教你在Tableau中绘制蝌蚪图等带有空心圆的图表(多链接)
设备的屏幕像素比
设备的屏幕像素比 屏幕像素比(Device Pixel Ratio ,DPR),实际上指的是window.devicePixelRatio ,被所有webkit浏览器以及opera所支持, 它是一个比值,既然是一个比值那他是怎么算出来的呢?其实就是用物理设备的像素/css像素。 举例来说:假如一个手机的像素是640x960而css像素为320x480,那么它的屏幕像素比为2。 在浏览器中的Console中可以查看当前网页的屏幕像素比。 在Console中输入window.devicePixelRat
阿年、嗯啊
2021/04/27
1.7K0
设备的屏幕像素比
纹理分析及其在医学成像中的应用
纹理分析是一种量化图像强度变化的图像分析技术。的基本原理,以及它们的优点、缺点和应用。这项研究的重点是收集和分析近50年来有关纹理分析的研究,简要描述了不同的方法,并给出了应用实例。鉴于纹理分析应用广泛,本研究主要集中在生物医学图像分析领域,并整理了一份最新的生物组织和器官相关的疾病产生的纹理变化的列表,可用于查阅疾病的发病和进展。最后,总结了纹理分析方法作为疾病生物标记物的作用。本文发表在IEEE REVIEWS IN BIOMEDICAL ENGINEERING杂志。
用户1279583
2022/02/28
1K0
纹理分析及其在医学成像中的应用
(译)SDL编程入门(10)Color Key
当在屏幕上渲染多个图像时,通常需要让图像具有透明背景。幸运的是,SDL提供了一种使用颜色键控的简单方法来实现这一点。
arcticfox
2020/10/09
1.2K0
使用 Pandas 在 Python 中绘制数据
在有关基于 Python 的绘图库的系列文章中,我们将对使用 Pandas 这个非常流行的 Python 数据操作库进行绘图进行概念性的研究。Pandas 是 Python 中的标准工具,用于对进行数据可扩展的转换,它也已成为从 CSV 和 Excel 格式导入和导出数据的流行方法。
用户1880875
2021/09/15
6.9K0
iOS开发之使用Storyboard预览UI在不同屏幕上的运行效果
  在公司做项目一直使用Storyboard,虽然有时会遇到团队合作的Storyboard冲突问题,但是对于Storyboard开发效率之高还是比较划算的。在之前的博客中也提到过,团队合作使用Storyboard时,避免冲突有效的解决方法是负责UI开发的同事最好每人维护一个Storyboard, 公用的组件使用轻量级的xib或者纯代码来实现。这样不但提高了开发效率,而且可以有效的避免Storyboard的冲突。如果每个人维护一个Storyboard, 遇到冲突了就以你自己的为准就OK了。   言归正传,接下
lizelu
2018/01/11
2.3K0
iOS开发之使用Storyboard预览UI在不同屏幕上的运行效果
基于屏幕像素抖动的PCF
PCF无非就是把周围的像素加吧加吧, 然后取个平均值. 结果的平滑程度, 跟Kernel的大小有直接关系.
逍遥剑客
2019/02/20
9750
Git在Ubuntu上的配置方法
  本文介绍在Linux操作系统的Ubuntu版本中,配置分布式开源版本控制系统Git,随后基于Git克隆GitHub中项目的代码的详细方法。
疯狂学习GIS
2024/07/31
2080
Git在Ubuntu上的配置方法

相似问题

在带有SDL_Surface的窗口中显示SDL2的最简单和最快的方法是什么?

20

在XNA4中绘制大量纹理立方体的有效方法是什么?

20

基于SDL2的快速纹理像素访问

10

在游戏中,制作带有障碍物的像素地图最简单的方法是什么?

10

在屏幕上绘制不同的每像素数据。

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文