Tag: opengl es

iOS的glGenerateMipmap是同步的,还是可能是asynchronous的?

我正在开发一个在OpenGL ES中使用大纹理的iPad应用程序。 当场景第一次加载的时候,我会在天花板上看到一个很大的黑色神器,如下图所示。 就好像更高级别的mipmap尚未填充。在随后的帧中,天花板正确显示。 这个问题才开始显示,当我开始使用mipmapping。 一个可能的解释是,glGenerateMipmap()调用asynchronous执行其工作,产生一些mipmap创build工作(在一个单独的进程,或在GPU中)并返回。 这是可能的,还是我吠叫错了树?

OpenGL EXC_BAD_ACCESS在Swift中调用glDrawElements时,不在Objective-C中调用

我正在通过Ray Wenderlich的OpenGL for iOS教程试图将他的代码从Objective-C转换为Swift。 我对OpenGL和Swift很陌生,相信我的问题与我如何翻译Objective-C有关。 原因如下: 在我的swift文件中设置我的视图,包含OpenGL内容,在最后的逻辑步骤(调用glDrawElements),应用程序将崩溃,EXC_BAD_ACCESS警报。 但是,如果我将这部分代码移到Objective-C文件中 ,则应用程序按预期工作。 这个代码的Swift版本: var positionDataOffset: Int = 0 glVertexAttribPointer(self.positionSlot, 3 as GLint, GL_FLOAT.asUnsigned(), GLboolean.convertFromIntegerLiteral(UInt8(GL_FALSE)), VertexDataSource.sizeOfVertex(), &positionDataOffset) var colorDataOffset = (sizeof(Float) * 3) as AnyObject glVertexAttribPointer(self.positionSlot, 4 as GLint, GL_FLOAT.asUnsigned(), GLboolean.convertFromIntegerLiteral(UInt8(GL_FALSE)), VertexDataSource.sizeOfVertex(), VertexDataSource.vertexBufferOffset()) var vertexOffset: Int = 0 glDrawElements(GL_TRIANGLES.asUnsigned(), VertexDataSource.vertexCount(), GL_UNSIGNED_BYTE.asUnsigned(), &vertexOffset) 这里是Objective-C版本: glVertexAttribPointer(position, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), 0); […]

在YUV420p上有很多GREEN Color – >在iOS上的OpenGL 2.0 Shader中使用RGB

我想使用ffmpeg和OpenGL ES 2.0为iOS制作电影播放器​​,但是我遇到了一些问题。 输出RGB图像有很多绿色。 这是代码和图像 480×320宽度和高度: 512×512纹理宽度和高度 我从ffmpeg AVFrame获得了YUV420p行数据。 for (int i = 0, nDataLen = 0; i < 3; i++) { int nShift = (i == 0) ? 0 : 1; uint8_t *pYUVData = (uint8_t *)_frame->data[i]; for (int j = 0; j < (mHeight >> nShift); j++) { memcpy(&pData->pOutBuffer[nDataLen], pYUVData, (mWidth >> nShift)); pYUVData […]

将图像转换为SceneKit节点

我有一个位图图像: (但是,这应该与任何任意图像工作) 我想把我的形象,并使其成为一个3D SCNNode。 这个代码我已经完成了很多。 这需要图像中的每个像素,并创build一个具有SCNBox几何的SCNNode。 static inline SCNNode* NodeFromSprite(const UIImage* image) { SCNNode *node = [SCNNode node]; CFDataRef pixelData = CGDataProviderCopyData(CGImageGetDataProvider(image.CGImage)); const UInt8* data = CFDataGetBytePtr(pixelData); for (int x = 0; x < image.size.width; x++) { for (int y = 0; y < image.size.height; y++) { int pixelInfo = ((image.size.width * y) + x) […]

ccDrawLine不透明?

我对所有这些OpenGL调用都很陌生,幸好cocos2d很容易让我在屏幕上画线,如下所示: -(void)draw { glColor4f(255, 255, 255,255); ccDrawLine(ccp(150,110), ccp(280,230)); } 我得到一条白线。 但现在,我想使它变得透明一点,所以我把alpha值改为100.但是,线条仍然是亮白的。 然后我认为这个值实际上可以从0.0到1.0。 我把它设置为0.2,但仍然没有改变。 这是为什么?

在屏幕上获取某种颜色占用的区域 – iOS

我试图做一些类似于这个问题的问题 ,但是我并不真正理解这个问题的答案,我不确定这是否是我需要的。 我需要的是简单的,但我不太确定这很容易。 我想计算屏幕上某个颜色的像素数量。 我知道我们看到的每个“像素”实际上是不同颜色的像素的组合,例如绿色。 所以我需要的是实际的颜色 – 用户所看到的颜色。 例如,如果我创build了一个UIView,将背景颜色设置为[UIColor greenColor] ,并将其尺寸设置为屏幕区域的一半(我们可以假定状态栏为简单起见而隐藏,而且我们在iPhone上),我希望这个“神奇的方法”返回240 * 160或38,400-屏幕的一半面积。 我不希望有人写出这个“魔法”,但我想知道 a)如果这是可能的 b)如果是这样,几乎是实时的 c)如果是这样,从哪里开始。 我听说可以用OpenGL完成,但是我没有这方面的经验。 这是我的解决scheme,感谢Radif Sharafullin: int pixelsFromImage(UIImage *inImage) { CGSize s = inImage.size; const int width = s.width; const int height = s.height; unsigned char* pixelData = malloc(width * height); int pixels = 0; CGContextRef context = CGBitmapContextCreate(pixelData, width, height, […]

在iOS上使用OpenGL ES 2.0进行实例化绘图

简而言之: 任何人都可以确认是否有可能使用内置variablesgl_InstanceID (或gl_InstanceIDEXT )在顶点着色器上使用OpenGL ES 2.0在iOS上启用GL_EXT_draw_instanced ? 更长: 我想使用glDrawArraysInstanced和gl_InstanceID绘制一个对象的多个实例,我希望我的应用程序可以在多个平台(包括iOS)上运行。 规范明确指出,这些function需要ES 3.0。 根据iOS设备兼容性参考 ES 3.0仅在less数设备(基于A7 GPU;因此是iPhone 5s,但不在iPhone 5或更早版本)上可用。 所以我的第一个假设是我需要避免在旧的iOS设备上使用实例化的绘图。 但是,在兼容性参考文档中, 更进一步说,所有的SGX系列5处理器(包括iPhone 5和4s)都支持EXT_draw_instanced扩展。 这让我觉得我确实可以在老版本的iOS设备上使用实例化绘图,查找和使用glDrawArraysInstanced的扩展函数(EXT或ARB)。 我目前只是在Windows上运行一些使用SDL和GLEW的testing代码,所以我还没有在iOS上testing任何东西。 但是,在我目前的设置中,我无法在顶点着色器中使用gl_InstanceID内置variables。 我收到以下错误信息: 'gl_InstanceID':variables在当前的GLSL版本中不可用 在GLSL中启用“draw_instanced”扩展名不起作用: #extension GL_ARB_draw_instanced : enable #extension GL_EXT_draw_instanced : enable 当我特别声明我需要ES 3.0(GLSL 300 ES)时,错误消失: #version 300 es 尽pipe在ES 2.0环境下,我的Windows桌面机器似乎能正常工作,但我怀疑这是否适用于iPhone 5。 那么,我是否应该放弃在旧iOS设备上使用实例化绘图的想法?

ios 8 opengl es 1.1终止了?

我们即将在iOS appstore上发布一个标题,最近我们发现它不适用于iOS 8.游戏加载到黑屏,但是其他所有工具都可以正常工作(音乐可以被听到,它反应到触摸屏,只是没有在显示屏上)。 我们的引擎很老,使用OpenGL ES 1.1。 我现在确信这是个问题,因为我尝试了一个渲染黑屏的(老)教程。 我已经在网上寻找任何关于这个的讨论,但似乎无法find任何东西。 有没有人有任何1.1的应用程序,他们可以确认已经停止工作,或做工? 我现在正在考虑将引擎更新到2.0,这是考虑到项目规模的不小的成就,而且我们很快就会推出。 苹果没有任何意见就放弃对1.1的支持是没有意义的,所以我希望我错了。

GLKit中的纹理映射不适用于设备

我用这个链接的代码来映​​射人脸的纹理。 该代码使用GLKIT来渲染图像。 代码在模拟器中工作正常,但是如果我在设备上运行,代码不起作用。 下面是在设备中工作的图像的屏幕截图,而不是在我的ipad中。 我用来加载纹理的代码: – (void)loadTexture:(UIImage *)textureImage { glGenTextures(1, &_texture); glBindTexture(GL_TEXTURE_2D, _texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); CGImageRef cgImage = textureImage.CGImage; float imageWidth = CGImageGetWidth(cgImage); float imageHeight = CGImageGetHeight(cgImage); CFDataRef data = CGDataProviderCopyData(CGImageGetDataProvider(cgImage)); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, imageWidth, imageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, CFDataGetBytePtr(data)); } 模拟器的图像: 设备中的相同代码给出以下输出: 有我失踪的东西吗?

如何在OpenGL ES 2.0中实现glOrthof

我正试图将我的OpenGL ES 1应用程序转换为OpenGL ES 2应用程序,以便能够使用着色器。 现在我使用glOrthof函数来创build一个“真实大小的视口”,这样我就可以将顶点放置在OpenGL视图中的“实际”像素上。 glOrthof(0, _frame.size.width, _frame.size.height, 0, -1, 1); 我很难find如何在OpenGL ES 2实现这一点,有没有人可以告诉我如何做到这一点? 如果没有,有没有人有一个良好的OpenGL ES 1 to OpenGL ES 2教程/解释的链接?