标签: opengl-es

Tiler Utilization统计数据在iPhone OpenGL ES仪器中意味着什么?

我一直试图执行一些OpenGL ES性能优化,试图增加我能够在我的iPhone应用程序中呈现的每秒三角形数量,但我已经碰到了一堵砖墙.我已经尝试将我的OpenGL ES数据类型从固定点转换为浮点(根据Apple的推荐),交错我的顶点缓冲区对象,并最大限度地减少绘图状态的变化,但这些变化都没有对渲染速度产生影响.无论如何,我似乎无法在运行3.0操作系统的iPhone 3G上将我的应用程序推到320,000三角形以上.根据这个基准测试,我应该能够使用我正在使用的平滑阴影在这个硬件上达到687,000个三角形/秒.

在我的测试中,当我在Instruments中运行OpenGL ES性能工具对运行的设备时,我看到统计"Tiler利用率"在渲染我的基准测试时达到接近100%,但"渲染器利用率"仅达到约30 %.这可能提供了关于显示过程中瓶颈是什么的线索,但我不知道这些值是什么意思,我没有找到任何关于它们的文档.有人对iPhone OpenGL ES仪器中的这个和其他统计数据有什么好的描述吗?我知道iPhone 3G中的PowerVR MBX Lite是基于图块的延迟渲染器,但我不确定渲染器和Tiler在该架构中的区别.

如果它有任何帮助,如果您想自己下载和测试,可以使用此应用程序的(BSD许可的)源代码.在当前配置中,每次加载新的分子结构并将三角形输出到控制台时,它会启动一个小基准.

iphone opengl-es instruments

25
推荐指数
2
解决办法
7727
查看次数

iOS 11 beta 4 presentRenderbuffer崩溃

当调用[EAGLContext presentRenderbuffer:]方法时,我的应用程序在iOS 11 beta 4(15A5327g)上崩溃.它只在我在Xcode中调试时才会发生.当我手动启动应用程序时,它不会崩溃.在低于iOS 11 beta 4的版本上,它也不会崩溃.我该如何防止这个问题?您可以在屏幕截图中查看崩溃详情

在此输入图像描述

xcode opengl-es ios gpuimage ios11

25
推荐指数
2
解决办法
4568
查看次数

是否有适合iPhone SDK的OpenGL文本绘图库?

我试图弄清楚在OpenGL中绘制一些文本的简单方法.我的研究表明它是一项相当复杂的任务.它涉及创建(或在运行时生成)字体图集纹理,然后为每个字母创建一个四边形,只有正确的位置和纹理坐标.

我听说过一些关于freetype的好东西,但是对于如何让它在iPhone上运行却发现很少,而且看起来相当复杂.

那么是否有任何Objective-C包装的OpenGL文本库可以与人们一直使用的iPhone SDK一起使用?或者我只是在思考这个问题而且我有一个更容易的方法,我错过了?

cocoa-touch opengl-es freetype

24
推荐指数
3
解决办法
2万
查看次数

我可以用Android制作一个相当原生的C++应用程序吗?

我对以下功能感兴趣:

  1. 为Android Market编写一个完全用C++编写的应用程序(实际上是现有产品的一个端口).
  2. 使用快速屏幕缓冲像素推送(或者更确切地说使用OpenGL ES).
  3. 获取用户输入并将其指向C++代码.

为Market编写这样的应用程序是否合法?市场政策对某些事情是否严格要求?

c++ android opengl-es pixels

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

CADisplayLink OpenGL渲染会破坏UIScrollView行为

SO上有一些类似的问题(最后的链接),但是没有一个能让我解决我的问题,所以这里有:

我正在使用OpenGL渲染来制作图像平铺和缓存库以供在游戏项目中使用,我想劫持UIScrollView的物理特性以允许用户在图像周围导航(因为它有很好的反弹行为,可能是好好利用它).所以我有一个UIScrollView,我用它来获取纹理的渲染视图,但是有一个问题 - 在滚动视图上移动会阻止CADisplayLink触发,直到用户完成滚动(这看起来很糟糕).一个临时修复是使用NSRunLoopCommonModes而不是默认的运行模式,但不幸的是,这打破了我正在测试的某些手机上的滚动视图行为的某些方面(3GS和模拟器似乎工作正常,而iPhone4和3G没有"T).

有谁知道如何解决CADisplayLink和UIScrollView之间的这种冲突,或者知道如何修复在其他运行模式下工作的UIScrollView?提前致谢 :)

承诺链接到类似的问题: UIScrollView损坏并停止使用OpenGL渲染滚动(相关的CADisplayLink,NSRunLoop)

在iPhone上拖动UIScrollView时,OpenGL ES视图中的动画会冻结

iphone opengl-es

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

什么是glVertexAttrib(与glVertexAttribPointer相比)?

据我所知,glVertexAttribPointer它将根据指向数组设置顶点属性的值.什么是glVertexAttrib对,但?看起来它只是为顶点属性设置了一个(可能是矢量)值,那么当你有多个顶点时会发生什么?所有顶点最终都会看到属性的相同值吗?

opengl-es opengl-es-2.0

24
推荐指数
1
解决办法
5923
查看次数

我可以在OpenGL ES 2.0中使用哪些版本的GLSL?

尽管有几个小时的谷歌搜索,我似乎无法找到一个明确的答案.有人可以告诉我发生了什么事吗?我收到的错误是"不支持版本140".这是我的设备(Kindle Fire)还是GL ES 2.0?我需要添加库还是其他什么?

java android opengl-es glsl opengl-es-2.0

24
推荐指数
3
解决办法
2万
查看次数

如何将OpenGL绘图与UIKit更新同步

在我们的应用程序中,我们在CAEAGLLayer上面有UIScrollView.UIScrollView包含一些UIViews(红色矩形).在CAEAGLLayer中,我们绘制白色矩形.白色矩形的中心与红色矩形的中心相同.当UIScrollView滚动时,我们更新CAEAGLLayer中白色矩形的位置并渲染它们.

我们得到了预期的结果:白色矩形的中心总是与红色矩形的中心相同.

但是我们无法将CAEAGLLayer的更新与UIScrollView中的视图移动同步.我们有一些错误 - 红色矩形落后于白色矩形.

粗略地说,我们真的想让CAEAGLLayer与UIScollView一起延迟.

我们准备了示例代码.在设备上运行并滚动,您将看到白色矩形(由OpenGL绘制)比红色矩形(常规UIViews)移动得更快.在scrollViewDidScroll:委托调用中正在更新OpenGL.

https://www.dropbox.com/s/kzybsyu10825ikw/ios-opengl-scrollview-test.zip

它在iOS模拟器中的行为相同,只需看一下视频:http://www.youtube.com/watch?v = 1T9hsAVrEXw

红色= UIKit,白色= OpenGL

代码是:

- (void)scrollViewDidScroll:(UIScrollView *)aScrollView {
    // reuses red squares that are gone outside thw bounds
    [overlayView updateVisibleRect:CGRectMake(...)];
    // draws white squares using OpenGL under the red squares
    [openGlView updateVisibleRect:CGRectMake(...)];
}
Run Code Online (Sandbox Code Playgroud)

编辑:

在简化的样本中可以很容易地证明同样的问题.工作的xcodeproj可以在以下位置找到:

https://www.dropbox.com/s/vznzccibhlf8bon/simple_sample.zip

示例项目基本上在OpenGL中绘制和动画一组WHITE方块,并为RED组的UIViews做同样的操作.红色和白色方块之间很容易看到滞后.

core-animation opengl-es uikit

24
推荐指数
3
解决办法
3779
查看次数

iOS CVImageBuffer使用AVCaptureSessionPresetPhoto从AVCaptureSessionDataOutput失真

在高层次上,我创建了一个应用程序,让用户可以指向他或她的iPhone相机并查看已经过视觉效果处理过的视频帧.此外,用户可以点击按钮将当前预览的定格作为保存在其iPhone库中的高分辨率照片.

为此,该应用程序遵循以下过程:

1)创建AVCaptureSession

captureSession = [[AVCaptureSession alloc] init];
[captureSession setSessionPreset:AVCaptureSessionPreset640x480];
Run Code Online (Sandbox Code Playgroud)

2)使用后置摄像头连接AVCaptureDeviceInput.

videoInput = [[[AVCaptureDeviceInput alloc] initWithDevice:backFacingCamera error:&error] autorelease];
[captureSession addInput:videoInput];
Run Code Online (Sandbox Code Playgroud)

3)将AVCaptureStillImageOutput连接到会话,以便能够以Photo分辨率捕获静止帧.

stillOutput = [[AVCaptureStillImageOutput alloc] init];
[stillOutput setOutputSettings:[NSDictionary
    dictionaryWithObject:[NSNumber numberWithInt:kCVPixelFormatType_32BGRA]
    forKey:(id)kCVPixelBufferPixelFormatTypeKey]];
[captureSession addOutput:stillOutput];
Run Code Online (Sandbox Code Playgroud)

4)将AVCaptureVideoDataOutput连接到会话,以便能够以较低分辨率捕获单个视频帧(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];
Run Code Online (Sandbox Code Playgroud)

5)在捕获视频帧时,将每个新帧作为CVImageBuffer调用委托的方法:

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
{
    CVImageBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
    [self.delegate processNewCameraFrame:pixelBuffer];
}
Run Code Online (Sandbox Code Playgroud)

6)然后委托处理/绘制它们:

- (void)processNewCameraFrame:(CVImageBufferRef)cameraFrame {
    CVPixelBufferLockBaseAddress(cameraFrame, 0);
    int bufferHeight = CVPixelBufferGetHeight(cameraFrame);
    int bufferWidth = CVPixelBufferGetWidth(cameraFrame);

    glClear(GL_COLOR_BUFFER_BIT);

    glGenTextures(1, …
Run Code Online (Sandbox Code Playgroud)

iphone opengl-es image-processing ios opengl-es-2.0

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

CropView的裁剪相机预览

我有一个固定宽度和高度的TextureView,我想在其中显示相机预览.我需要裁剪相机预览,以便它看起来不会在我的TextureView中拉伸.怎么做种植?如果我需要使用OpenGL,如何将Surface Texture绑定到OpenGL以及如何使用OpenGL进行裁剪?

public class MyActivity extends Activity implements TextureView.SurfaceTextureListener 
{

   private Camera mCamera;
   private TextureView mTextureView;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_options);

    mTextureView = (TextureView) findViewById(R.id.camera_preview);
    mTextureView.setSurfaceTextureListener(this);
}

@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
    mCamera = Camera.open();

    try 
    {
        mCamera.setPreviewTexture(surface);
        mCamera.startPreview();
    } catch (IOException ioe) {
        // Something bad happened
    }
}

@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
    mCamera.stopPreview();
    mCamera.release();
    return true;
}

@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
} …
Run Code Online (Sandbox Code Playgroud)

android opengl-es android-camera textureview

23
推荐指数
3
解决办法
3万
查看次数