Tag: opengl es

在iOS中的两个纹理的力量

在我的iOS应用程序(针对iPad),我想使用两个(NPT)纹理的非功率。 我的GL_VERSION查询返回“OpenGL ES 2.0 APPLE”。 根据规范,它应该支持NPT纹理,但一个简单的testing表明,我需要调整纹理2 ^ N之前,它显示出来。 苹果是否不支持完整的ES 2.0规范? 我在哪里可以find不支持的文档? 我正在使用Xcode 4.3.2和iOS 5.1。 编辑: 仔细看一下ES 2.0.25规范(3.8.2节),可以发现NPOT有一些条件需要满足。 本质上,如果我使用下面的设置,我可以加载NPOT纹理: // use linear filetring glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); // clamp to edge glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 我应该closures这个还是回答我自己的问题?

从AVCaptureSessionDataOutput与AVCaptureSessionPresetPhoto iOS iOS CVImageBuffer扭曲

在很高的层面上,我创build了一个应用程序,让用户指向他或她的iPhone摄像头,并看到视觉效果处理过的video帧。 此外,用户可以点击一个button,将当前预览的冻结帧作为保存在其iPhone库中的高分辨率照片。 要做到这一点,应用程序遵循这个过程: 1)创build一个AVCaptureSession captureSession = [[AVCaptureSession alloc] init]; [captureSession setSessionPreset:AVCaptureSessionPreset640x480]; 2)使用背面照相机连接AVCaptureDeviceInput。 videoInput = [[[AVCaptureDeviceInput alloc] initWithDevice:backFacingCamera error:&error] autorelease]; [captureSession addInput:videoInput]; 3)将AVCaptureStillImageOutput连接到会话,以便能够以照片分辨率捕捉静帧。 stillOutput = [[AVCaptureStillImageOutput alloc] init]; [stillOutput setOutputSettings:[NSDictionary dictionaryWithObject:[NSNumber numberWithInt:kCVPixelFormatType_32BGRA] forKey:(id)kCVPixelBufferPixelFormatTypeKey]]; [captureSession addOutput:stillOutput]; 4)将AVCaptureVideoDataOutput连接到会话,以便能够以较低的分辨率捕获单独的video帧(CVImageBuffers) videoOutput = [[AVCaptureVideoDataOutput alloc] init]; [videoOutput setVideoSettings:[NSDictionary dictionaryWithObject:[NSNumber numberWithInt:kCVPixelFormatType_32BGRA] forKey:(id)kCVPixelBufferPixelFormatTypeKey]]; [videoOutput setSampleBufferDelegate:self queue:dispatch_get_main_queue()]; [captureSession addOutput:videoOutput]; 5)当video帧被捕获时,委托的方法被称为每个新的帧作为CVImageBuffer: – (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer […]

在iOS中响应RAM的可用性

我有一个纹理很重的OpenGL游戏,我想根据这个设备有多lessRAM来调整。 我在iPhone 4或iPad2上的最高分辨率纹理工作正常,但较早的设备在加载纹理的过程中崩溃。 我有这些纹理的低分辨率的版本,但我需要知道什么时候使用它们。 我目前的策略是检测特定的旧设备(3GS有一个低分辨率的屏幕,iPad没有相机),然后只加载高分辨率的纹理IPad2及以上和iPhone 4及以上 – 我想我需要为iPod touch做一些事情。 但我更愿意使用特征检测而不是硬编码设备模型,因为模型检测对于将来对API和硬件的更改是脆弱的。 我正在考虑的另一种可能性是首先加载高分辨率的纹理,然后下降,并取代低分辨率的时候,我得到一个低内存警告。 不过,我不确定我会有机会回应。 我注意到,在debugging控制台上出现任何通知之前,应用程序经常死亡。 如何检测我正在运行的设备是否没有足够的RAM来加载我的纹理的高分辨率版本? 退一步来说,是否还有其他一些适用于OpenGL纹理内存的自适应技术? 笔记: 我已经search了关于可用RAM检测的答案,但他们都基本上build议分析内存使用情况,并消除浪费(最大限度地减less临时对象和所有这一切)。 我已经做了尽可能多的事情,而且我也不可能将高分辨率的纹理压缩到较旧的设备上。 PVRTC不是一个选项。 纹理包含片段着色器要使用的数据,并且必须以无损格式存储。

我如何优化OpenGL ES 1.1中大型模型的渲染?

我刚刚在我的3D应用程序中完成了VBO的实现,看到渲染速度提高了5-10倍。 以前每秒1-2帧的渲染速度现在是每秒10-11帧。 我的问题是,我可以进一步提高渲染速度吗? 三angular形带会有很大的不同吗? 当前顶点不在面之间共享,每个面都是唯一的,但是重叠。 我的设备利用率为100%,Tiler利用率为100%,Renderer利用率为11%,资源字节为114819072.这是在CAD模型上渲染912,120个面。 有什么build议么?

如何使用OpenGL ES将变形应用于UIImage?

有什么办法像在iPhone应用程序PhotoTwist中一样使用OpenGL ES在UIImage上创build像凹痕,捏,扭曲,压扁等效果 ? 有没有这样的参考或指导方针? 我不想要代码,只是参考如何做到这一点。

试图读取Xcode Instruments .trace文件。 什么是.trace文件的文件格式?

我正在编写一个自动化的分析系统,在我的应用程序中分析不同的GPU密集屏幕。 我一直在尝试使用'XCode Instruments',用'OpenGL ES Driver'来捕获gpu的使用数据。 我的自动化系统从运行App的命令行运行Xcode Instruments,configuration文件并捕获数据,并将数据写入“.trace”文件。 我现在希望能够打开跟踪文件,并使用我的自动分析系统读取跟踪数据,以便我可以通知应用程序开发人员应用程序的各个部分如何执行。 我不能find任何方式来阅读跟踪文件。 它似乎是包含各种目录的包,并埋在那里有一个.zip文件,似乎包含一些二进制数据。 这个文件中的数据是如何分析的? 仪器系统似乎相当复杂,我很惊讶,它是多么难以访问它产生的跟踪数据。 有谁知道如何parsing跟踪文件? 我目前正在使用XCode 4.6.1

为什么glReadPixels()在iOS 6.0的代码中失败?

以下是用于从OpenGL ES场景读取图像的代码: -(UIImage *)getImage{ GLint width; GLint height; glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &width); glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &height); NSLog(@"%d %d",width,height); NSInteger myDataLength = width * height * 4; // allocate array and read pixels into it. GLubyte *buffer = (GLubyte *) malloc(myDataLength); glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, buffer); // gl renders "upside down" so swap top to bottom […]