草庐IT

glReadPixels

全部标签

c++ - glReadPixels() 真的很慢,从鼠标位置获取 OpenGL 坐标的更好解决方案?

这是我用来在3d场景中获取鼠标位置的代码:voidGetOGLPos(intx,inty,GLdouble&pX,GLdouble&pY,GLdouble&pZ){GLintviewport[4];GLdoublemodelview[16];GLdoubleprojection[16];GLfloatwinX,winY,winZ;glGetDoublev(GL_MODELVIEW_MATRIX,modelview);glGetDoublev(GL_PROJECTION_MATRIX,projection);glGetIntegerv(GL_VIEWPORT,viewport);winX

ios - glReadPixels 只保存 1/4 屏幕大小的快照

我正在为客户开发增强现实应用。OpenGL和EAGL部分已在Unity3D中完成,并在我的应用程序中实现到View中。我现在需要的是一个按钮,可以捕捉OpenGL内容的屏幕截图,这是最后面的View。我尝试自己编写它,但是当我单击带有分配的IBAction的按钮时,它只保存了屏幕的1/4(左下角)——尽管它确实将它保存到相机胶卷中。那么基本上,我怎样才能让它保存整个屏幕大小,而不是只保存四分之一?这是我的方法代码:-(IBAction)tagBillede:(id)sender{UIImage*outputImage=nil;CGRects=CGRectMake(0,0,320,480

ios - 将 RGBA 转换为 ARGB(glReadPixels -> AVAssetWriter)

我想借助AVAssetWriter将使用OpenGL渲染的图像记录到电影文件中。问题出现了,从OpenGL帧缓冲区访问像素的唯一方法是使用glReadPixels,它仅支持iOS上的RGBA像素格式。但是AVAssetWriter不支持这种格式。在这里我可以使用ARGB或BGRA。由于可以忽略alpha值,因此我得出结论,将RGBA转换为ARGB的最快方法是为glReadPixels提供移动一个字节的缓冲区:UInt8*buffer=malloc(width*height*4+1);glReadPixels(0,0,width,height,GL_RGBA,GL_UNSIGNED_BY

android - OpenGL ES2.0 glReadPixels() 非常慢

我正在使用glReadPixels将像素从FBO读取到内存。代码如下:UINT8*data;glBindFramebuffer(GL_FRAMEBUFFER,FBOID);glReadPixels(0,0,w,h,GL_RGB,GL_UNSIGNED_BYTE,data);我发现这个操作非常非常慢...在openGLES2.0(Android)中有没有其他选择? 最佳答案 是的,它很慢。OpenGLES2.0在Android上没有提供更快的方法。您可以在OpenGLES3.0上使用PBO,但这可能不适合您,因为目前支持它的设备很少,

Android OpenGL ES 3.0 PBO 而不是 glReadPixels()

我想使用PBO(对于GLES3设备)提高glReadPixels()的性能,但我在这段代码中遇到了问题:finalByteBufferpboByteBuffer=ByteBuffer.allocateDirect(4*mWidth*mHeight);pboByteBuffer.order(ByteOrder.nativeOrder());//setframebuffertoreadfromGLES30.glReadBuffer(GLES30.GL_BACK);//bindpboGLES30.glBindBuffer(GLES30.GL_PIXEL_PACK_BUFFER,mPboHan

c++ - glReadPixels() 设置 GL_INVALID_OPERATION 错误

我正在尝试使用FBO实现颜色选择。我有用于渲染场景的多重采样FBO(fbo[0]),还有用于颜色拾取的非多重采样FBO(fbo[1])。问题是:当我尝试从fbo[1]读取像素数据时,一切顺利,直到glReadPixels调用设置了GL_INVALID_OPERATION标志。我查了手册,找不到原因。创建FBO的代码:glBindRenderbuffer(GL_RENDERBUFFER,rbo[0]);glRenderbufferStorageMultisample(GL_RENDERBUFFER,numSamples,GL_RGBA8,resolution[0],resolution[

ios - 使用 glReadPixel() 和多重采样读取数据

目前我正在尝试从帧缓冲区中读取像素数据,以便在IOS中捕获屏幕。当使用以下代码设置帧缓冲区时,GlreadPixels命令工作正常:-//buffers//Createadepthbufferthathasthesamesizeasthecolorbuffer.glGenRenderbuffersOES(1,&m_depthRenderbuffer);glBindRenderbufferOES(GL_RENDERBUFFER_OES,m_depthRenderbuffer);glRenderbufferStorageOES(GL_RENDERBUFFER_OES,GL_DEPTH_CO

ios - 使用 OpenGL ES 纹理缓存而不是 glReadPixels 来获取纹理数据

在iOS5中,引入了OpenGLES纹理缓存,以提供从相机视频数据到OpenGL的直接方式,无需复制缓冲区。session414-AdvancesinOpenGLESforiOS5ofWWDC2011中有对纹理缓存的简要介绍。.我发现了一个有趣的article它最终进一步滥用了这个概念,并通过简单地锁定纹理然后直接访问缓冲区来绕过对glReadPixels的调用。glReadPixels由于iPad2中使用的基于图block的渲染器(即使您仅使用1x1纹理),速度确实很慢。但是,所描述的方法似乎比glReadPixels处理得更快。文章中提出的方法是否有效,是否可以用于增强依赖glRe

ios - 使用 glReadPixels 读取纹理字节?

我想将原始纹理数据转储到磁盘(稍后读回),但我不确定glReadPixel是否会从当前绑定(bind)的纹理中读取。如何从我的纹理中读取缓冲区? 最佳答案 glReadPixels函数从帧缓冲区而不是纹理中读取。要读取纹理对象,您必须使用glGetTexImage但它在OpenGLES中不可用:(如果你想从你的纹理中读取缓冲区,那么你可以将它绑定(bind)到一个FBO(FrameBuffer对象)并使用glReadPixels://GenerateanewFBO.Itwillcontainyourtexture.glGenFram

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

以下是我用于从OpenGLES场景读取图像的代码:-(UIImage*)getImage{GLintwidth;GLintheight;glGetRenderbufferParameteriv(GL_RENDERBUFFER,GL_RENDERBUFFER_WIDTH,&width);glGetRenderbufferParameteriv(GL_RENDERBUFFER,GL_RENDERBUFFER_HEIGHT,&height);NSLog(@"%d%d",width,height);NSIntegermyDataLength=width*height*4;//allocatea