Swift 非常快速的屏幕像素绘制
我的一个朋友不得不用c语言的opengl绘制一个曼德尔布罗特。我决定用斯威夫特 我尝试的第一种方法是使用ARGB数据创建一个数组,并将其转换为CGImage,然后在UIImageView中查看该数组。然而,这还不够快 现在我想知道,在屏幕上绘制单个像素的最快方法是什么。我看了看金属,但那似乎主要是关于三角形和3d的东西。然后我来到scenekit着色器(.fsh)并认为这可能是一个好的解决方案。然而,我也希望能够放大mandelbrot分形,我找不到在mandelbrot中输入变量的方法(我的参考:)Swift 非常快速的屏幕像素绘制,swift,shader,mandelbrot,Swift,Shader,Mandelbrot,我的一个朋友不得不用c语言的opengl绘制一个曼德尔布罗特。我决定用斯威夫特 我尝试的第一种方法是使用ARGB数据创建一个数组,并将其转换为CGImage,然后在UIImageView中查看该数组。然而,这还不够快 现在我想知道,在屏幕上绘制单个像素的最快方法是什么。我看了看金属,但那似乎主要是关于三角形和3d的东西。然后我来到scenekit着色器(.fsh)并认为这可能是一个好的解决方案。然而,我也希望能够放大mandelbrot分形,我找不到在mandelbrot中输入变量的方法(我的参
你们能告诉我/举个例子(请用Swift)用最快的方法画单个像素,或者至少用一种方法把原始像素画到屏幕上,而不必使用像合成CGImage这样的中间工具吗?如果你想在GPU上计算分形,那么这更像是一个OpenGL(或金属)问题比快速的问题更重要。您需要采取更小的步骤:
您链接的页面完全跳过步骤1-5,因为Xcode场景查看器会为您处理这些步骤。如果你想编写一个独立的应用程序,你需要学习如何执行这些步骤。与其使用顶点和片段着色器,不如看看如何使用内核函数(或计算着色器)。这将是一个单独的着色器,它进行数学运算并在纹理的每个像素处设置颜色值。然后可以使用CametLayer将纹理渲染到屏幕
请看这篇博客文章,其中我使用传递到内核函数的粒子坐标来编写纹理:为什么您认为绘制CGImage很慢?你用你的代码运行仪器了吗?你到底发现了什么?你想在GPU上计算分形样本(使用OpenGL着色器)吗?或者您想在CPU上计算它们(使用Swift)并快速绘制它们?您是每次计算像素时都创建一个新的
CGImage
,还是在计算所有像素后创建一个CGImage
,还是介于两者之间?@matt这是一个解决办法,因为我找不到更直接的方法在屏幕上绘图,我还必须在内存中创建一堆像素,所以我认为它确实比较慢。@robmayoff我认为使用GPU要快得多,所以我宁愿在GPU上完成,我也认为这样的任务应该在GPU上完成。我在最坏的情况下为每一帧创建了一个图像“假设”?你知道那值多少钱。我建议计算速度慢,但像素的绘制速度慢。好吧,那么最终我会得到一个屏幕,屏幕上有两个三角形,它们一起填充整个屏幕,并且有相同的着色器,总的来说渲染mandelbrot?如果这是我应该做的,我会尝试按照你的指导步骤做。谢谢,这看起来像是一个令人惊奇的更多知识的来源:)我会在有时间的时候深入研究的!