Tag: opengl es

OpenGL ES像素艺术 – 缩放

我无法在iPhone上的OpenGL Es 1.1上显示基于像素的艺术(认为复古瓷砖和艺术)。 使用8个字节(每行1个字节)表示块,每个位表示一个像素是否被设置。 例如,一个数字8: 0 0 0 0 0 0 0 0 -> 0 0 1 1 1 0 0 0 -> xxx 0 1 0 0 0 1 0 0 -> xx 0 1 0 0 0 1 0 0 -> xx 0 0 1 1 1 0 0 0 -> xxx 0 […]

OpenGL ES FBO缩放

这个问题跟随Matic Oblak推荐的原始问题 一旦FBO被设置并渲染,渲染后的图像如何提供回默认渲染缓冲区并以缩放版本显示。 -(void)setupFBO { glGenTextures(1, &tex); glBindTexture(GL_TEXTURE_2D, tex); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 256, 256, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL); glGenFramebuffers(1, &fbo); glBindFramebuffer(GL_FRAMEBUFFER, fbo); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex, 0); } 首先呈现给FBO: -(void)glkView:(GLKView *)view drawInRect:(CGRect)rect{ glBindFramebuffer(GL_FRAMEBUFFER, fbo); glViewport (0, 0, 160, 144); glClearColor (1.0f, 0.0f, 0.0f, […]

从UIImage(照片库)获取RGB数据的快速方法

我想获得一个数据数组,其中包含存储在iOS(ios8 sdk)上的照片库(ALAsset)中的图片的RGB表示。 我已经试过这个方法: 使用[ALAssetRepresentation fullScreenImage]从ALAsset获取CGImage 将CGImage绘制到CGContext。 该方法的工作原理,我得到一个指向rgb数据,但这是非常缓慢 (有2个转换)。 最终目标是在OpenGL纹理中快速加载图像。 我的代码来从照片库中获取图像 ALAsset* currentPhotoAsset = (ALAsset*) [self.photoAssetList objectAtIndex:_currentPhotoAssetIndex]; ALAssetRepresentation *representation = [currentPhotoAsset defaultRepresentation]; //-> REALLY SLOW UIImage *currentPhoto = [UIImage imageWithCGImage:[representation fullScreenImage]]; 我的代码在CGContext上绘制: CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); NSUInteger bytesPerPixel = 4; NSUInteger bytesPerRow = bytesPerPixel * textureWidth; NSUInteger bitsPerComponent = 8; CGContextRef context = CGBitmapContextCreate(textureData, textureWidth, textureHeight, […]

使用未声明的标识符“gl_InstanceID”

大家好,我一直在iOS平台上尝试OpenGLES2.0中的Instanced绘图。 我的渲染代码 glEnableVertexAttribArray(…); glVertexAttribPointer(…) glDrawElementsInstancedEXT(GL_TRIANGLES,IndicesCount, GL_UNSIGNED_SHORT, 0, 5); 和我的顶点着色器 attribute vec4 VertPosition; uniform mat4 mvpMatrix[600]; void main() { gl_Position = (mvpMatrix[gl_InstanceID]) * VertPosition; } 我收到错误:使用未声明的标识符'gl_InstanceID' 我的glsl版本是1.0,如果版本是问题,那我该如何升级? 任何其他方式在GLSL中使用“gl_InstanceID”?

在3D中增加一条线?

参照这个问题 使用SceneKit在两点之间画一条线 我正在3D中绘制一条线,并希望通过使用此代码使其更厚 func renderer(aRenderer: SCNSceneRenderer, willRenderScene scene: SCNScene, atTime time: NSTimeInterval) { //Makes the lines thicker glLineWidth(20) } 但它不工作,iOS 8.2。 有另一种方法吗? 更新 从文档 https://developer.apple.com/library/prerelease/ios/documentation/SceneKit/Reference/SCNSceneRendererDelegate_Protocol/index.html#//apple_ref/occ/intfm/SCNSceneRendererDelegate/renderer:updateAtTime : 我没有添加SCNSceneRendererDelegate和一个有效的线宽,但仍然无法获得线宽增加。

在使用深度缓冲和抗锯齿技术时,通过glreadpixel()读取数据时出现问题

我想用glreadpixel()捕捉我的游戏画面。 它也可以在2g iphone上使用ios版本3.1.1在模拟器上正常工作。 但与iOS 4.2.1版本的iPad没有。 我来了解这个问题。 对于特定设备(ipad)上面的ios版本4.0,我们绑定深度缓冲区并使用抗锯齿技术。 当我们使用opengl的glreadpixel()从帧缓冲区捕获数据返回目标缓冲区中的所有0 … 如果我们不把深度缓冲区绑定到帧缓冲区,并且不使用抗锯齿技术,它就可以正常工作。 我使用的代码是: CGRect screenBounds = [[UIScreen mainScreen] bounds]; int backingWidth = screenBounds.size.width; int backingHeight =screenBounds.size.height; NSLog(@"width : %f Height : %f",screenBounds.size.width,screenBounds.size.height); CGSize esize = CGSizeMake(screenBounds.size.width, screenBounds.size.height); NSInteger myDataLength = esize.width * esize.height * 4; GLuint *buffer = (GLuint *) malloc(myDataLength); glReadPixels(0, 0, esize.width, esize.height, GL_RGBA, GL_UNSIGNED_BYTE, […]

如何在GLSL ES中编写const数组

我想为iPhone上的OpenGL ES应用程序编写一个简单的顶点着色器,但是我的数组构造函数正在给我带来麻烦。 attribute vec4 normal; attribute vec4 position; void main(void){ const vec4 vertices[3] = vec4[](vec4(0.25, -0.25, 0.5, 1.0), vec4(-0.25, -0.25, 0.5, 1.0), vec4(0.25, 0.25, 0.5, 1.0)); gl_Position = vertices[gl_VertexID]; } 当使用这段代码时,着色器无法编译,并给出了错误信息: 错误:0:13:'(':语法错误:数组大小必须出现在variables名称后面

在iOS上的OpenGL ES 2.0中创build一个16位亮度纹理

我有一个文件中的16位数据,我试图加载到iOS上的OpenGL亮度纹理。 如果我手动将16位值重新缩放到8位,我可以按如下方式加载和显示数据: glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, width, height, 0, GL_LUMINANCE,GL_UNSIGNED_BYTE, (void*)data_8bit); 但我可以让glTexImage2D做从16位转换到8位? 查看OpenGL 2.0规范,16位types的允许值是: GL_UNSIGNED_SHORT_5_6_5,GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_5_5_5_1 没有GL_UNSIGNED_SHORT,我不认为我可以使用任何上述。 我正在使用iOS 5.1和Xcode 4.3.2。

ResolveMultisampleFramebufferAPPLE生成INVALID_OPERATION

我想不通,为什么glResolveMultisampleFramebufferAPPLE生成错误1282(0x0502, GL_INVALID_OPERATION )。 设置代码: glGenFramebuffers(1, &framebuffer); glBindFramebuffer(GL_FRAMEBUFFER, framebuffer); glGenRenderbuffers(1, &colorRenderbuffer); glBindRenderbuffer(GL_RENDERBUFFER, colorRenderbuffer); [context renderbufferStorage:GL_RENDERBUFFER fromDrawable:(id<EAGLDrawable>)self.layer]; glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, colorRenderbuffer); glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &backingWidth); glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &backingHeight); GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); if(status != GL_FRAMEBUFFER_COMPLETE) { NSLog(@"failed to make complete framebuffer object %x", status); } glGenFramebuffers(1, &sampleFramebuffer); glBindFramebuffer(GL_FRAMEBUFFER, sampleFramebuffer); glGenRenderbuffers(1, &sampleColorRenderbuffer); glBindRenderbuffer(GL_RENDERBUFFER, sampleColorRenderbuffer); glRenderbufferStorageMultisampleAPPLE(GL_RENDERBUFFER, 4, GL_RGBA8_OES, backingWidth, backingWidth); […]

SpriteKit和UIKit兼容性:迁移到Swift 2时出现OpenGL错误?

我只是不明白自从我迁移到Swift 2以来发生了什么。我有一个选项卡式应用程序,我得到这个错误: <CAEAGLLayer: 0x7fb2e053fb40>: calling -display has no effect. Assertion failed: (length + offset <= _length), function commit_data, file /BuildRoot/Library/Caches/com.apple.xbs/Sources/Jet_Sim/Jet-1.50/Jet/jet_types_OpenGL.h, line 863. 我知道这是非常含糊的,但我不知道从哪里开始寻找错误。 谢谢。 编辑:我刚刚意识到这可能与我试图将一个GameViewControllerembeddedTabbedController的事实有关。 不过,在iOS 9.0之前并没有造成任何错误。 任何线索?