Articles of opengl es 2.0

GLES2.0:通过glEGLImageTargetTexture2DOES使用GL_TEXTURE_EXTERNAL_OES

我想用Java渲染图像缓冲区(在这种情况下NDK不是选项)并通过GL_TEXTURE_EXTERNAL_OES将其传递给着色器。 如规范中所述, glTexImage2D不起作用。 但函数glEGLImageTargetTexture2DOES只能通过GLES11Ext类使用,这似乎有点不对。 无论如何,我试过,它给了我GL_INVALID_OPERATION ,如果出现这种情况,应该会发生: 如果GL不能使用提供的eglImageOES指定纹理对象(例如,如果指的是多重采样的eglImageOES),则生成错误INVALID_OPERATION。 遗憾的是,我不能从这个描述中做出eglImageOES ,特别是因为Android Java API似乎不能让我访问eglImageOES函数。 我也没有find使用此函数的Java示例。 附上一个小例子: // Bind the texture unit 0 GLES20.glActiveTexture( GLES20.GL_TEXTURE0 ); throwOnError( “glActiveTexture” ); GLES20.glBindTexture( GL_TEXTURE_EXTERNAL_OES, _samplerLocation ); throwOnError( “glBindTexture” ); // _output is ByteBuffer.allocateDirect(pixels * Integer.SIZE / Byte.SIZE).order(ByteOrder.nativeOrder()).asIntBuffer() _output.rewind(); _output.limit( pixels ); GLES11Ext.glEGLImageTargetTexture2DOES( GL_TEXTURE_EXTERNAL_OES, _output ); throwOnError( “glEGLImageTargetTexture2DOES” ); // <– throws GLES20.glDrawArrays( […]

Google Cast OpenGL ES应用

Google Chromecast是否能够流式传输OpenGL ES应用程序?如果是,那么应该采取哪些正确的步骤。 我在Android上使用GLSurfaceView,截至目前,我在网上找不到任何教程或示例。

使用PixelBuffer或FBO进行离屏渲染,使用OpenGL ES 2.0将所有图形保存到所需大小(> 4096)的位图(然后是bmp / jpg)

我需要能够将我的所有图形(我使用GLSurfaceView类中的基本代码渲染)保存到图片文件(JPG / BMP)。 我选择的方法包含以下步骤: 将渲染从Window Surface切换到具有所需宽度/高度的Pixel Buffer表面 – 在我的情况下,这个w / h应该等于photo(我的应用程序就像照片编辑器) 使用当前曲面的glReadPixels读取像素 将这些像素保存到位图,然后保存到JPG / BMP 但是我对这种方法有一个问题,因为创建PixelBuffer有一个限制,即这个缓冲区的大小不能大于EGL常量:EGL_MAX_PBUFFER_HEIGHT和EGL_MAX_PBUFFER_WIDTH。 我发现有很多设备,这些常数等于4096,同时这些设备中的照相机允许拍摄宽度或高度大于4096的照片。不幸的是,这使得我的方法无法使用。 你可以建议 – 如何将所有OpenGL图形(在我的情况下通过某些照片完成)保存到具有所需宽度/高度的JPG / BMP(在我的情况下,它是原始照片的宽度/高度),它可以大于EGL_MAX_PBUFFER_HEIGHT / EGL_MAX_PBUFFER_WIDTH? 编辑: 在调查期间,我发现PBuffer方法肯定是坏的,因为它不适用于所有设备,它有nvidia tegra的问题,而且它的速度很慢 似乎即使是FBO方法(我不确定,我现在正在调查它)也有类似的限制 – 据我所知,在FBO方法的情况下我需要创建renderbuffer,但它的大小也不能大于GL_MAX_RENDERBUFFER_SIZE,在经测试的Android设备上为4096。 好吧,似乎我需要使用几个缓冲区,也许我可以尝试使用MappedByteBuffer合并它们并压缩到jpg避免OOM

如何在没有设备的情况下在Nexus 4上调试OPENGL ES 2.0错误?

我有一个带有一堆照片filter的Android应用程序。 filter是使用OpenGL ES 2.0实现的,所以当我想保存最终图像时,我会调用glReadPixels。 它可以在我测试过的每台设备上运行,但它似乎无法在Nexus 4上运行。用户报告说他们可以应用filter,但是当他们保存最终图像时,他们无法在设备上find它。 我想知道我是否有办法模仿nexus 4并在模拟器上测试我的应用程序? 我已经在模拟器上进行了测试,它也运行良好,如果有人与Nexus 4有类似的问题,那将会很好。 我的glReadPixels电话。 GLES20.glReadPixels(0, 0, saveWidth, saveHeight, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, mPixels);

Android Opengl FBO屏幕外

我正在开发Android应用程序types的手指画。 我正在使用OpenGL ES 2.0。 基本上我有一个图像,其中每个触摸屏应对应一个圆形alpha应用,其中显示位于下方的另一个图像。 我尝试了不同的技术,但速度相当慢,因为它的function就像使用有机glTexSubImage2D一样,减慢了渲染阶段。 我试图了解FBO的使用,因为它们允许屏幕外渲染。 有人可以更好地解释它在屏幕外呈现的意义以及加速我的方法可以获得哪些优势? 我认为屏幕外意味着你可以改变我创建的帧缓冲区,而不是onDrawFrame? 在另一个线程?

使用OpenGL ES 2.0可以延迟渲染/着色吗?

有没有人在OpenGL ES 2.0下实现延迟渲染/着色? 它不支持MRT,因此只有一个颜色缓冲区,它不能以“通常”的方式实现。 具体来说,我正在iPad,iPhone4(maaaybe iPhone 3gs)和Android上进行探索。 在iPad / iPhone4 / iPhone3gs上的GLESView应用程序中,GL_OES_RGB8_RGBA8扩展程序存在,我还没有看得太深,但是对于8位/通道,这个想法很有趣: http : //www.gamedev.net/topic/ 562138的OpenGL-ES-20-和延遮光/ 还有其他想法吗? 性能方面是否值得做?

Nexus S上的OpenGL ES黑色纹理

在Nexus One上运行的OpenGL代码在Nexus S上无法正常工作。纹理似乎不会渲染,而我只剩下纹理所在的黑色。 有人有任何想法吗?

Android OpenGL ES 2.0文本渲染

对于如何在OpenGL ES 2.0中显示文本,网络上似乎明显缺乏支持。 JVitela的回答是: 在OpenGL ES中绘制文本说要使用Canvas,并在其上绘制文本以生成位图,然后使用GLUtils渲染文本位图,但答案只显示直接关于绘制文本的部分,而不是还有什么可以解决的。 我也一直在努力学习http://www.learnopengles.com上的课程,在这种情况下,课程4涉及基本的纹理。 JVitela的方法如何传递给顶点或片段着色器? 关于背景的部分是否必要,或者是否将背景留在GL表面其余部分的文本中? 他使用的texturesvariables究竟是什么? 我认为这是一个纹理数据句柄(比较他的bind()和学习的那个)但为什么是一个数组呢? 它与其他纹理共享? 我有一个程序,其中已经有一堆东西显示在OpenGL ES 2.0上,并且需要一些基本文本(有些是静态的,有些是每1到5赫兹更新一次)打印在它上面。 我的理解是纹理映射位图字形非常昂贵。 有什么好的教程可以做我需要的吗? 任何人的建议?

为什么我的用于点的openGL着色器程序有绑带工件?

对于我的OpenGL着色器程序所采用的每个点,它创建一个红色环,在不透明和完全透明之间平滑过渡。 我的着色器程序有效,但有绑定工件。 片段着色器如下。 #version 110 precision mediump float; void main() { float dist = distance(gl_PointCoord.xy, vec2(0.5, 0.5)); // Edge value is 0.5, it should be 1. // Inner most value is 0 it should stay 0. float inner_circle = 2.0 * dist; float circle = 1.0 – inner_circle; vec4 pixel = vec4(1.0, 0.0, 0.0, inner_circle […]

如何提高OpenGL ES中乒乓渲染(模糊)的性能

我正试图在我的Android设备上使用OpenGL ES进行高斯模糊。 我用的是上面提到的方法 Efficient Gaussian blur with linear sampling 我的应用程序中有两个帧缓冲区(A和B)。 通过绘制A到B来模糊一维,并通过将B绘制到A来模糊另一个。当只有一个图像被模糊时它可以正常,它可以赶上50fps。 但如果更多的图像模糊,甚至非常小,FPS下降到4~5。 使用这种方法很糟糕。 我的问题是: 在一帧中多次切换两个FBO会导致性能问题吗? 有没有更好的方法在Android设备上进行乒乓渲染。