相关疑难解决方法(0)

在iphone上绘制屏幕缓冲区的最快方法

我有一个"软件渲染器",我从PC移植到iPhone.使用iphone上的像素缓冲区手动更新屏幕的最快方法是什么?例如在Windows中,我发现的最快的功能是SetDIBitsToDevice.

我对iphone或库不太了解,似乎有很多层和不同类型的UI元素,所以我可能需要大量的解释......

现在我只是不断更新opengl中的纹理并将其渲染到屏幕上,我非常怀疑这将是最好的方法.

更新:

我试过openGL屏幕大小的纹理方法:

我得到了17fps ......

我使用了512x512纹理(因为它需要是2的幂)

只是呼唤

glTexSubImage2D(GL_TEXTURE_2D,0,0,0,512,512,GL_RGBA,GL_UNSIGNED_BYTE, baseWindowGUI->GetBuffer());
Run Code Online (Sandbox Code Playgroud)

似乎对所有减速都负有责任.

评论它,并留下我所有的软件渲染GUI代码,以及现在非更新纹理的渲染,导致60fps,30%的渲染器使用,并且没有来自cpu的显着尖峰.

请注意,GetBuffer()只是返回一个指向GUI系统软件后台缓冲区的指针,无论如何都没有重新调整缓冲区或调整缓冲区大小,它的大小和格式都适合于纹理,所以我很确定减速有与软件渲染器无关,这是个好消息,看起来如果我能找到一种方法在60点更新屏幕,软件渲染应该暂时起作用.

我尝试使用512,320而不是512,512进行更新纹理调用,这奇怪甚至更慢......以10fps运行,也表示渲染利用率仅为5%,并且在openGLES内调用Untwiddle32bpp时所有时间都被浪费了.

我可以将我的软件渲染更改为原生渲染为任何pixle格式,如果它会导致更直接的blit.

fyi,在2.2.1 ipod touch G2上测试(就像类固醇上的Iphone 3G一样)

更新2:

我刚刚写完了CoreAnimation/Graphics方法,它看起来不错,但是我有点担心它如何更新每一帧的屏幕,基本上抛弃旧的CGImage,创建一个全新的...在'someRandomFunction中查看它'下面:这是更新图像的最快方式吗?任何帮助将不胜感激.

//
//  catestAppDelegate.m
//  catest
//
//  Created by User on 3/14/10.
//  Copyright __MyCompanyName__ 2010. All rights reserved.
//




#import "catestAppDelegate.h"
#import "catestViewController.h"
#import "QuartzCore/QuartzCore.h"

const void* GetBytePointer(void* info)
{
    // this is currently only called once
    return info; // info is a pointer to the buffer
}

void ReleaseBytePointer(void*info, const void* pointer)
{
    // don't …
Run Code Online (Sandbox Code Playgroud)

iphone user-interface rendering

10
推荐指数
1
解决办法
6501
查看次数

硬件加速h.264解码到iOS中的纹理,叠加或类似

是否有可能并且支持使用iOS硬件加速的h.264解码API来解码本地(非流式)视频文件,然后在其上组合其他对象?

我想创建一个涉及在视频前面绘制图形对象的应用程序,并使用回放计时器来同步我在顶部绘制的内容,以及在视频上播放的内容.然后,根据用户的操作,更改我在顶部绘制的内容(但不是视频)

来自Android的DirectX,OpenGL和OpenGL ES,我想象的是将视频渲染为纹理,并使用该纹理绘制全屏四边形,然后使用其他精灵来绘制其余的对象; 或者也许在渲染器之前写一个中间过滤器,这样我就可以操纵各个输出帧并绘制我的东西; 或者可以在视频顶部绘制2D图层.

似乎AV基金会或者Core Media 可以帮助我做我正在做的事情,但在我深入研究细节之前,我想知道是否有可能做我想做的事情,以及我的主要内容是什么?解决问题的途径.

请不要"这对你来说太先进,先试试你好世界"的答案.我知道我的东西,只是想知道我想做什么是可能的(最重要的是,支持,所以应用程序不会最终被拒绝),在我自己研究细节之前.

编辑:

我不熟悉iOS开发,但专业的Android版DirectX,OpenGL和OpenGL ES.我正在考虑制作我目前拥有的Android应用程序的iOS版本,我只是想知道这是否可行.如果是这样,我有足够的时间从头开始iOS开发,直到做我想做的事情.如果不可能,那么我现在不会花时间研究整个平台.

因此,这是一个技术可行性问题.我不是要求代码.我正在寻找类型的答案"是的,你可以做到这一点.只需使用A和B,使用C渲染到D并用E绘制你的东西",或者"不,你不能.硬件加速解码是不适用于第三方应用程序"(这是朋友告诉我的).就这样,我会在路上.

我已经阅读了ios技术概述第32页中的视频技术概述.它几乎说我可以使用Media Player获得最简单的播放功能(不是我想要的),UIKit用于嵌入视频,对嵌入有更多的控制,但不是实际播放(不是我的'正在寻找),AVFoundation可以更好地控制播放(也许我需要的,但我在网上找到的大部分资源都是关于如何使用相机),或者是Core Media对视频进行全面的低级控制(可能就是我需要,但记录极差,甚至比AVFoundation更缺乏回放资源.

我担心我可能会在接下来的六个月里全身心地学习iOS编程,但最终却发现相关的API不适用于第三方开发人员,而我想做的事情是iTunes商店部署是不可接受的.这是我的朋友告诉我的,但我似乎无法在应用程序开发指南中找到任何相关内容.因此,我来​​到这里是为了询问那些在这方面有更多经验的人,不管我想做什么都是可能的.不再.

我认为这是一个有效的高级问题,可以被误解为我不做我的作业-plz-give-me-teh-codez问题.如果我在这里的判断是错误的,请随意删除,或者将这个问题贬低到你心中的蔑视.

iphone opengl-es h.264 ios

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

循环中单个像素的渲染速度

我正在努力将单个像素绘制到a UIView来创建分形图像.我的问题是我的渲染速度.我目前正在运行此循环260,000次,但想渲染更多像素.实际上,在iPad Mini上运行大约需要5秒钟.

UIBezierPath之前使用的是,但这甚至有点慢(大约7秒).我一直在寻找NSBitMap东西,但我不确定这是否会加速它或如何实现它.

我还在考虑尝试将我的循环中的像素存储到一个数组中,然后在循环后将它们全部绘制在一起.尽管如此,我不太确定存储然后从数组中检索像素的最佳过程是什么.

任何加速这个过程的帮助都会很棒.

for (int i = 0; i < 260000; i++) {

    float RN = drand48();

    for (int i = 1; i < numBuckets; i++) {
        if (RN < bucket[i]) {
            col = i;
            CGContextSetFillColor(context, CGColorGetComponents([UIColor colorWithRed:(colorSelector[i][0]) green:(colorSelector[i][1]) blue:(colorSelector[i][2]) alpha:(1)].CGColor));
            break;
        }
    }

    xT = myTextFieldArray[1][1][col]*x1 + myTextFieldArray[1][2][col]*y1 + myTextFieldArray[1][5][col];
    yT = myTextFieldArray[1][3][col]*x1 + myTextFieldArray[1][4][col]*y1 + myTextFieldArray[1][6][col];

    x1 = xT;
    y1 = yT;
    if (i > 10000) {
        CGContextFillRect(context, CGRectMake(xOrigin+(xT-xMin)*sizeScalar,yOrigin-(yT-yMin)*sizeScalar,.5,.5));

    } …
Run Code Online (Sandbox Code Playgroud)

loops objective-c draw ios

3
推荐指数
1
解决办法
433
查看次数

标签 统计

ios ×2

iphone ×2

draw ×1

h.264 ×1

loops ×1

objective-c ×1

opengl-es ×1

rendering ×1

user-interface ×1