问题标签 [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.
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 表面
android - OpenGL ES 3:glGenerateMipmap 几何约束
我正在为 android 开发一个移动 OpenGL 应用程序,使用 OpenGL ES3.x 作为图形。
我想使用该glGenerateMipmap
功能,但我感到不自在,因为我记得,至少在以前版本的 OpenGL 中,纹理大小有一些几何限制(如果我没记错的话,正方形,n-pot 纹理) .
OpenGL ES3的参考页面glGenerateMipmap不再报告类似的内容,并且在几个设备上进行的粗略测试似乎证实了这些信息。
尽管如此,考虑到 OpenGL ES3 的最新情况(并考虑到某些移动 OpenGL 实现的质量......),如果有第一手经验的人确认在现实世界中使用它也可以,我会感到更放心。
问题归结为:
- 在 OpenGL ES 3 上确实
glGenerateMipmap
没有限制纹理的几何形状吗? - 如果是这样,在野外在非方形、非 n-pot 纹理上使用它是否安全?
谢谢!
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 部分渲染我错了吗?或者还有其他我从未注意到的问题?
感谢您的阅读。
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 上对此进行测试。
java - 在 Android/Java 上安全使用 glMapBufferRange()
我glMapBufferRange()
在 Android 上使用来自 OpenGL-ES 3.0 的工作代码,如下所示:
我的问题是关于在第三行降低glMapBufferRange()
to的结果。声明返回一个:ByteBuffer
glMapBufferRange()
Buffer
public static Buffer glMapBufferRange (int target, int offset, int length, int access)
在我的测试平台上,该函数返回一个子类,ByteBuffer
因此转换工作,但对所有支持 OpenGL-ES 3+ 的平台或 Android 版本做出这个假设似乎并不安全。虽然这看起来很合理,但我还没有找到任何保证它的文档,如果它得到保证,似乎函数应该被声明为返回ByteBuffer
。
Buffer
使用返回的正确方法(最好由文档支持)是glMapBufferRange()
什么?
ios - iOS 中的 Sampler3D
我刚刚在我的 iOS 应用程序中包含了 OpenGL ES 3.0,它运行良好。
我在下面有一个工作着色器:
现在,我想使用 asampler3D
所以我有:
它不编译。另外,我在顶点着色器中将其更改vec2 texCoord
为。vec3 texCoord
实际上,sampler3D
无法识别,但据我所知,它存在于 OpenGL ES 3.0 中。
有任何想法吗?
android - 绘制到 framebuffer 对象,然后 blit 到主显示 (GLES 3.0)
我正在尝试创建一个帧缓冲区对象,然后将其传送到主显示器。这样做的目的是缓存一个屏幕截图,我可以在需要时随时将其显示到显示器上,而无需重新渲染对象。我正在使用带有 android NDK 的 Open GLES 3.0。
我以正常方式创建了一个帧缓冲区。
这工作没有错误。然后我可以成功地编辑帧缓冲区。
但是,尝试将其传输到主绘图缓冲区失败。
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.
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 应该没有问题。我没有收到任何错误,也无法真正调试它(“步入”在这里似乎不起作用)。
android - Android 设备上的 OpenGLES 3.0 着色器编译错误,用于输入和输出存储限定符
所以我正在更新我的应用程序以使用 OpenGLES 3.0 来利用变换反馈,但着色器没有编译。
错误:
这是顶点着色器代码:
下面是编译代码:
...
有人看到这有什么问题吗?如果我分别更改in
和out
,attribute
varying
它不会引发错误,但 glUseProgram 会引发 gl 错误 1282“无效操作”。
这就是我为 es 版本 3.0 设置 GL 的方式: