【发布时间】:2013-11-17 21:38:40
【问题描述】:
我有 *.png 文件,我想从纹理中获取不同的 8x8 像素部分并将它们放置在位图上(我猜是 SDL_Surface,但可能不是),就像这样:
现在我在没有位图的情况下渲染它,即我调用每个纹理并在每一帧直接在屏幕上绘制部分,它太慢了。我想我需要加载每个 *.png 来分隔位图并使用它们传递视频内存,然后只调用一个大位图,但也许我错了。我需要最快的方法,我需要这样的代码(SDL 2,而不是 SDL 1.3)。 另外,也许我需要在这里使用清晰的 OpenGL?
更新:
或者我可能需要以某种方式将 *.png 加载到 int 数组中,并像通常的数字一样使用它们并将它们放置到一个大的 int 数组中,然后将其转换为 SDL_Surface/SDL_Texture?这似乎是最好的方法,但是如何写呢?
更新 2:
每个块中像素的颜色与图片中呈现的颜色不同,也可以是透明的。图片只是一个例子。
【问题讨论】:
-
8x8 像素的部分都是纯色的吗?如果是,你有固定数量的颜色吗?我认为您可能需要某种地图来表示您从 .png 部分构建的纹理中的所有单元格。你可以使用二维数组。
-
注意。在 SDL2 中将 SDL_Textures 渲染到屏幕实际上应该非常快(与渲染 SDL_Surfaces SDL 1.2 相比)。我认为单个 8x8px 部分的渲染可能不是让事情变慢的原因——它可能是你正在做的检查数量导致了瓶颈。渲染到单个自定义纹理然后渲染 that 不太可能显着加快速度。你能做任何时间测试来找出是什么让它变慢了吗?
-
你是什么意思“坚实”?颜色可以是透明的,RGBA。现在我使用this。我制作数组并将其发送到地面,这部分速度为 100 FPS,足够快。但是
SDL_UpdateTexture函数很慢(顺便说在文档中),所以我想在这个地方清除OpenGL... -
@Necronomicon,请看下面我的回答。
标签: c++ bitmap sdl pixel sdl-2