Tag: opengl es

如何发现如果OpenGL ES帧速率是口吃 – 没有仪器?

一位朋友问我这个有趣的问题,我没有回答这个问题。 他正在制作一个游戏,有时候他在帧率方面落后了。 就好像有10个或更多的帧被丢弃。 运行循环function由CADisplayLink调用。 有没有一种方法来告诉编程如果帧速率滞后? 我只是测量运行循环函数中的时间,然后检查它是否大于应该的值。 如果是的话,请记住有一个滞后。 在旅途中的各种设备上testing可能会有用。 你如何去跟踪这个没有连接到Xcode?

应用程序崩溃,因为glGetString

我正在运行cocos2d-iphone 1.0.0,并按照本教程的说明使用cocos2d。 不幸的是,每当我尝试向CCLayer添加TMX Tiled Map时,我都会遇到“SIGABRT”崩溃错误。 我把这个问题追溯到-(BOOL)checkForGLExtension:(NSString *)searchName ,甚至进一步在这个函数内NSString *extensionsString = [NSString stringWithCString:glExtensions encoding: NSASCIIStringEncoding]; 这是checkForGLExtension函数: – (BOOL) checkForGLExtension:(NSString *)searchName { // For best results, extensionsNames should be stored in your renderer so that it does not // need to be recreated on each invocation. NSLog(@"%@", glExtensions); NSString *extensionsString = [NSString stringWithCString:glExtensions encoding: NSASCIIStringEncoding]; NSLog(@"%@", extensionsString); […]

GPUImage的GPUImageOpacityFilter行为不如预期,不会更改Alpha通道

我正在尝试使用库存图像的不透明度低于100%的照相机输出的输出来执行库存图像的Overlay Blend 。 我想我可以放置一个GPUImageOpacityFilter在filter堆栈,一切都会好的: GPUImageVideoCamera – > MY_GPUImageOverlayBlendFilter GPUImagePicture – > GPUImageOpacityFilter(Opacity 0.1f) – > MY_GPUImageOverlayBlendFilter MY_GPUImageOverlayBlendFilter – > GPUImageView 但是,结果并不是GPUImagePicture的0.1f alpha版本混合到GPUImageVideoCamera中,它导致了软化GPUImagePicture的颜色/对比度和混合。 所以我做了一些search,并尝试使用imageFromCurrentlyProcessedOutput从GPUImageOpacity筛选器中获取UIImage并将其发送到BlendFilter: GPUImagePicture – > MY_GPUImageOpacityFilter(Opacity 0.1f) [MY_GPUImageOpacityFilter imageFromCurrentlyProcessedOutput] – > MY_alphaedImage GPUImagePicture(MY_alphaedImage) – > MY_GPUImageOverlayBlendFilter GPUImageVideoCamera – > MY_GPUImageOverlayBlendFilter MY_GPUImageOverlayBlendFilter – > GPUImageView 这和我所期望的完全一样。 那么,为什么我必须要imageFromCurrentlyProcessedOutput ,不应该只是发生在线? 这里是上面两个场景的代码片段: 第一: //Create the GPUPicture UIImage *image […]

iOS OpenGL ES – 模拟器和设备上的不同纹理行为

我使用OpenGL ES加载纹理,下面是我的代码。 graphics由2个相同大小的纹理,停止button和背后的蓝色光晕组成。 下面的第一张图片是使用xCode中的iPad模拟器拍摄的,第二张图片是实际设备上的第二张图片。 第一个graphics是我从Illustrator中导出graphics的正确输出。 但是,当我在iPad上加载程序时,它给了我第二个graphics。 看起来不知何故停止button后面的蓝光纹理变得更小了。 这是为什么? 我可以通过使蓝光纹理更大来进行补偿,但是它并不是正确的,因为它在Illustrator中的样子是第一个graphics。 这是我的代码。 // // OpenGLES_Ch3_4ViewController.m // OpenGLES_Ch3_4 // #import "OpenGLES_Ch3_4ViewController.h" #import "AGLKVertexAttribArrayBuffer.h" #import "AGLKContext.h" #define Y_POS 1.0 #define ASPECT_RATIO 0.75f #define SIZE 0.8 @implementation OpenGLES_Ch3_4ViewController @synthesize baseEffect; @synthesize vertexBuffer; @synthesize textureInfo0; @synthesize textureInfo1; ///////////////////////////////////////////////////////////////// // This data type is used to store information for each vertex typedef […]

glReadPixels返回多个采样的零点

我正在写iOS的OpenGL应用程序,我需要在应用程序中呈现场景的屏幕截图。 当我不使用多重采样时,所有工作正常。 但是,当我开启多重采样时, glReadPixels不会返回正确的数据(场景绘制正确 – graphics质量比多重采样好得多)。 我已经在SO和其他一些地方检查了一些类似的问题,但是他们没有一个能够解决我的问题,因为我已经按照所提出的方式来做这件事了: 缓冲区解决后,但呈现呈现缓冲区之前,我正在采取截图。 glReadPixels不会返回错误。 我甚至尝试将kEAGLDrawablePropertyRetainedBacking设置为YES并在缓冲区呈现后采取屏幕截图 – 也不起作用。 我支持OpenGLES 1.x渲染API(使用kEAGLRenderingAPIOpenGLES1初始化上下文) 基本上我不知道什么是错的。 在SO上发布问题是我的最后一招。 这是相关的源代码: 创build帧缓冲区 – (BOOL)createFramebuffer { glGenFramebuffersOES(1, &viewFramebuffer); glGenRenderbuffersOES(1, &viewRenderbuffer); glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer); glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer); [context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(CAEAGLLayer*)self.layer]; glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, viewRenderbuffer); glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth); glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight); // Multisample support glGenFramebuffersOES(1, &sampleFramebuffer); glBindFramebufferOES(GL_FRAMEBUFFER_OES, sampleFramebuffer); glGenRenderbuffersOES(1, &sampleColorRenderbuffer); glBindRenderbufferOES(GL_RENDERBUFFER_OES, sampleColorRenderbuffer); glRenderbufferStorageMultisampleAPPLE(GL_RENDERBUFFER_OES, 4, […]

退化的顶点和GL_LINE_STRIP

我在iOS 5.1上 我试图在同一个顶点数组中显示几批线,我想使用退化的顶点将它们分开。 但似乎没有工作。 我在每一批顶点之间画线。 谷歌search问题给了我的结果,退化的顶点与GL_LINE_STRIP不兼容,但我不确定。 有人可以证实吗? 还有什么替代方法?

使用openGL和cocos2D绘制大量线条的最好方法是什么?

我有一系列的2d顶点表示用于绘制网格的线条。 有大约900个线段绘制(网格使用弹簧物理来扭曲,这就是为什么我不只是为每行和每列绘制一条线)。 cocos2D内置了一个ccDrawLine函数,可以很好地绘制,但是我认为这可能是低效的,因为它为每个线段调用glDrawArrays。 你如何有效地绘制大量的线段? 作为奖励,请使用openGL推荐良好的2D绘图实践。

Spritekit:第一个纹理绘制缓慢(预加载)

我有关于Apple Spritekit Framework的性能问题 。 我使用SKTextureAtlas的方法preloadTextureAtlases:withCompletionHandler:确保我的所有纹理都在游戏真正开始之前加载。 然而,当这个地图集的第一个纹理(不pipe它是什么)作为一个孩子添加到场景中时,我得到了一个小滞后,就像纹理没有加载一样。 它只发生在第一次 。 我真的很难debugging这个,find原因,但我找不到它。 看着仪器和时间分析器我得到了这个 这似乎很奇怪,因为我的纹理地图集包含所有分配的纹理(并且仍然分配)。 为什么它调用一个加载方法? 也许这和OpenGL的纹理绑定有关。 我相信这与我的对象被分配的框架相对应(见右边的秒杀)。 这里没有别的东西被分配或运动。 我真的坚持这一点,任何帮助将深表谢意。 谢谢你的时间。

将一个自定义SKShader应用到SKScene中,使用Swift将iOS 8 SpriteKit中的整个渲染场景进行像素化

我正在尝试在SKScene上创build一个全屏的像素化效果。 我了解到,应该有两个select来做到这一点: 使用使用GLES 2.0的自定义SKShader 。 使用核心图像filter。 我试图添加一个自定义的SKShader应该修改整个屏幕像素化。 我不确定如果可能,但SKScene ( SKScene的子类)的SKEffectNode表明: SKEffectNode对象将其子级渲染为缓冲区,并可select将Core Image滤镜应用于此渲染输出。 像GameScene : SKScene一样,可以将SKShader分配给SKScene GameScene : SKScene : override func didMoveToView(view: SKView) { let shader = SKShader(fileNamed: "pixelation.fsh") self.shader = shader self.shouldEnableEffects = true } …但似乎呈现的缓冲区不作为u_texture传递给GLES: void main() { vec2 coord = v_tex_coord; coord.x = floor(coord.x * 10.0) / 10.0; coord.y = floor(coord.y * […]

在Retina iPad上显示全屏幕CAEAGLLayer的问题

我遇到了一些问题得到一个大的CAEAGLLayer UIView正确显示。 如果该框架超过一定的尺寸(在contentScaleFactor为2.0的任一维度上显然为768),则会重绘以前版本缓冲区的扭曲图像。 在苹果的GLPaint例子中重现是非常容易的。 PaintingView.m有一个硬编码的contentScaleFactor为1.0,但如果将其更改为2.0: self.contentScaleFactor = 2.0; 并运行在Retina iPad上(不是模拟器),当你绘制时你会得到这样的东西: View post on imgur.com