问题标签 [opengl-es-3.0]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
6484 浏览

android - Android OpenGL ES 3.0 PBO 而不是 glReadPixels()

我想glReadPixels()使用 PBO(对于 GLES 3 设备)提高性能,但在这段代码中遇到了问题:

目前它失败的glReadPixels()方法。我找到了 this & this,但我无法发送零,因为它需要一个 IntBuffer 参数。我将非常感谢有关该问题的任何建议

更新:似乎不可能只为该任务使用 Java API。所以我使用 ndk 添加了一个glReadPixels()使用正确的最后一个参数(int offset)调用的函数现在我的 GL 调用都不会产生错误。

那是我的 jni c 代码:

现在的问题是glReadPixels()调用比没有 PBO 需要更多的时间,所以还没有性能提升。我将探索为什么会发生这种情况并在我发现某些内容时进行更新。

更新 2 我之前忘了更新它,但实际上问题是我使用的是 pbuffer 表面,这就是我没有性能提升的原因。我比较了这个选项和不使用 pbuffer 表面的选项,性能提升是巨大的。

因此,如果在屏幕外渲染并使用 glReadPixels ,则值得使用 pbuffer 表面

0 投票
1 回答
383 浏览

android - OpenGL ES 3:glGenerateMipmap 几何约束

我正在为 android 开发一个移动 OpenGL 应用程序,使用 OpenGL ES3.x 作为图形。

我想使用该glGenerateMipmap功能,但我感到不自在,因为我记得,至少在以前版本的 OpenGL 中,纹理大小有一些几何限制(如果我没记错的话,正方形,n-pot 纹理) .

OpenGL ES3的参考页面glGenerateMipmap不再报告类似的内容,并且在几个设备上进行的粗略测试似乎证实了这些信息。

尽管如此,考虑到 OpenGL ES3 的最新情况(并考虑到某些移动 OpenGL 实现的质量......),如果有第一手经验的人确认在现实世界中使用它也可以,我会感到更放心。

问题归结为:

  1. 在 OpenGL ES 3 上确实glGenerateMipmap没有限制纹理的几何形状吗?
  2. 如果是这样,在野外在非方形、非 n-pot 纹理上使用它是否安全?

谢谢!

0 投票
0 回答
75 浏览

android - QHD 上的 Adreno420 在 FHD 上的表现不如 Adreno330 和 Adreno320?

我使用 OpenGL ES 3.0 制作了一个图像处理应用程序。图像尺寸为 830X640。所以我使用 glViewport 仅在 830X640 区域执行 GPU 处理。休闲是我的代码的一部分。

我在 Galaxy S5 (Adreno 420, QHD )、Nexus 7 (Adreno 320, FHD) 和 Nexus 5 (Adreno 330, FHD) 上测量了我的应用程序的 FPS。

结果是 Adreno 330 (59 Hz) > Adreno 320 (45Hz) > Adreno 420 (35 HZ)。正如我预期的那样,Adreno 330 的性能优于 Adreno 320。但 Adreno 420 的性能低于 Adreno 330 和 andreno 420。

所以我怀疑显示器的分辨率会影响FPS。另一方面,我已经使用 glViewport 来避免这种情况发生。

使用 glViewport 部分渲染我错了吗?或者还有其他我从未注意到的问题?

感谢您的阅读。

0 投票
1 回答
354 浏览

android - GLSL 300 es 中的多片段输出

在为简单的 NDK Opengl ES 3.0 演示编写单元测试时,我遇到了使用多个渲染目标的问题。考虑这个简单的片段着色器,它有两个输出,在 C++11 字符串文字中声明。

我已经正确设置了一个带有两个颜色附件的 FBO(通过 glFramebufferTexture2D),并且 glCheckFramebufferStatus 以 GL_FRAMEBUFFER_COMPLETE 的形式返回。我也调用 glDrawBuffers(2, &attachments[0]),其中 attachments 是 GL_COLOR_ATTACHMENTi 枚举的向量。之后,我编译和链接着色器,没有任何链接或编译错误(只是使用了与本文无关的简单顶点传递)。

有什么理由可以使用以下 opengles 函数获取 out_color1 的片段位置而不是 out_color2 的片段位置?

自动定位 = glGetFragDataLocation(m_programId, name.c_str());

为 0 的 out_color1 返回正确的位置,但是当向 glGetFragDataLocation 提供“out_color2”时,该函数返回 -1。

我正在物理设备 Galaxy S4、Android 4.4.4 Adreno 320、Opengl ES 3.0 上对此进行测试。

0 投票
1 回答
2459 浏览

java - 在 Android/Java 上安全使用 glMapBufferRange()

glMapBufferRange()在 Android 上使用来自 OpenGL-ES 3.0 的工作代码,如下所示:

我的问题是关于在第三行降低glMapBufferRange()to的结果。声明返回一个:ByteBufferglMapBufferRange()Buffer

public static Buffer glMapBufferRange (int target, int offset, int length, int access)

在我的测试平台上,该函数返回一个子类,ByteBuffer因此转换工作,但对所有支持 OpenGL-ES 3+ 的平台或 Android 版本做出这个假设似乎并不安全。虽然这看起来很合理,但我还没有找到任何保证它的文档,如果它得到保证,似乎函数应该被声明为返回ByteBuffer

Buffer使用返回的正确方法(最好由文档支持)是glMapBufferRange()什么?

0 投票
1 回答
764 浏览

ios - iOS 中的 Sampler3D

我刚刚在我的 iOS 应用程序中包含了 OpenGL ES 3.0,它运行良好。

我在下面有一个工作着色器:

现在,我想使用 asampler3D所以我有:

它不编译。另外,我在顶点着色器中将其更改vec2 texCoord为。vec3 texCoord

实际上,sampler3D无法识别,但据我所知,它存在于 OpenGL ES 3.0 中。

有任何想法吗?

0 投票
1 回答
1362 浏览

android - 绘制到 framebuffer 对象,然后 blit 到主显示 (GLES 3.0)

我正在尝试创建一个帧缓冲区对象,然后将其传送到主显示器。这样做的目的是缓存一个屏幕截图,我可以在需要时随时将其显示到显示器上,而无需重新渲染对象。我正在使用带有 android NDK 的 Open GLES 3.0。

我以正常方式创建了一个帧缓冲区。

这工作没有错误。然后我可以成功地编辑帧缓冲区。

但是,尝试将其传输到主绘图缓冲区失败。

0 投票
1 回答
462 浏览

opengl-es-2.0 - How can i read data by glReadPixels?

I'm working on openGL es on Android. Now i meet a problem. I defined a float array, which is used to pass to fragment shader.

1. initTexture:

2.FBO:

3.onDrawFrame:

fragment shader:

So, how can i get the float data(0.123f, which i defined before) whith glReadPixels? Now what i get is ff000000(ABGR), so i suspect shader doesn't get the data through this way. Can someone tell me why and how can i deal with it? i am a newbie on it and really appreciate it.

0 投票
1 回答
744 浏览

ios - OpenGL ES 3.0 上下文未在 iPad 上创建(在模拟器中工作)

我正在为 PC(Windows、Linux、Mac)和 iOS 开发跨平台渲染器。iOS 部分目前是围绕 OpenGL ES 2.0 构建的,我想升级到 ES 3.0。所以我替换了以下行(有效)

用这条线:

...我包括了 OpenGLES/ES3/gl.h 和 OpenGLES/ES3/glext.h。

在模拟器中这工作得非常好,但在实际的 iPad 上运行它不再工作并且上下文为零。

我真的不知道我在这里缺少什么,因为 iPad 运行的是最新版本的 iOS(iOS 8.3),并且 ES 3.0 应该没有问题。我没有收到任何错误,也无法真正调试它(“步入”在这里似乎不起作用)。

0 投票
1 回答
4239 浏览

android - Android 设备上的 OpenGLES 3.0 着色器编译错误,用于输入和输出存储限定符

所以我正在更新我的应用程序以使用 OpenGLES 3.0 来利用变换反馈,但着色器没有编译。

错误:

这是顶点着色器代码:

下面是编译代码:

...

有人看到这有什么问题吗?如果我分别更改inoutattribute varying它不会引发错误,但 glUseProgram 会引发 gl 错误 1282“无效操作”。

这就是我为 es 版本 3.0 设置 GL 的方式: