问题标签 [egl]
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 EGL覆盖透明度问题,截图和显示的区别
我的应用程序使用 8888 格式的全屏 glSurface 覆盖。对于大多数设备来说,这工作得很好——我可以使用 OpenGL ES 绘制半透明图像,这确实会在我的其他本机视图之上覆盖透明度。
然而,在 Nexus 10 和 Note 2(很可能还有其他一些设备)上,半透明像素在物理显示器上看起来并不正确,即使通过 DDMS 截取的屏幕截图看起来绝对正确!这让我很困惑 - 视觉显示与屏幕截图有何不同?
对于帧缓冲区中 alpha 值不是 1 (0xff) 或 0 (0x00) 的任何像素,似乎都会出现这种奇怪现象。
我附上了来自 Nexus 10 的 DDMS 屏幕截图,显示了一张完全符合其应有的测试卡图像。我还附上了显示器上的一张照片,显示了一个非常不同的图像......如上所述,EGL 覆盖 alpha 值不是 0x00 或 0xff 的像素似乎显示不正确。注 2 相同。
有谁知道如何解决这个问题?这对我们来说是一个主要障碍,因为我们甚至不知道以编程方式确定设备显示屏是否出现问题的方法。
android - 以渲染缓冲区为源兄弟,纹理为目标兄弟的 EGLImages
我正在尝试设置EGLImage
源兄弟为 a 的位置GL_RENDERBUFFER
(EGLClientBuffer
指定为 的参数eglCreateImageKHR
)。在另一种情况下,我创建 aGL_TEXTURE_2D
并将其指定为EGLImage
使用glEGLImageTargetTexture2DOES
. 不幸的是,后一个调用导致GL_INVALID_OPERATION
. 如果源兄弟姐妹和目标兄弟姐妹都是GL_TEXTURE_2D
's,则设置就像一个魅力。
根据我对规范的阅读,这应该是允许的操作。我的简化测试用例也可能有其他一些正交问题。尽管我对此表示怀疑,因为当源兄弟姐妹和目标兄弟姐妹都是GL_TEXTURE_2D
's. 但是,如果这是问题所在(并且 s 的这种用法EGLImage
是允许的),那么可能导致GL_INVALID_OPERATION
. 还是我对规范的解释弄错了?
参考扩展:
http://www.khronos.org/registry/gles/extensions/OES/OES_EGL_image.txt
http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_base.txt
说明:
- 我会检查规范中是否存在所有扩展(
EGL_KHR_image
、EGL_KHR_image_base
、EGL_KHR_gl_texture_2D_image
、EGL_KHR_gl_renderbuffer_image
等)。 - 我也意识到,当我使用 a
GL_RENDERBUFFER
vs aGL_TEXTURE_2D
作为源时,EGLImage 的内部格式可能存在差异。所以我尝试OES_EGL_image_external
先使用扩展,将纹理作为源,然后使用渲染缓冲区。纹理一如既往地工作正常,GL_INVALID_OPERATION
渲染缓冲区也是如此。绑定时使用外部图像对生成的错误没有影响。 - 每次调用后都会检查 GL 和 EGL 错误。
android - 如何在android ndk中使用GraphicBuffer
我在参考如何提高 android 中的 opengl es 显示性能的问题的答案来问这个问题。我试图构建使用带有 ndk-r9d 的 GraphicBuffer 的代码。但它是说 GraphicBuffer 没有在这个范围内声明。eglCreateImageKHR 和 glEGLImageTargetTexture2DOES 的注释相同。
我添加了 EGL/eglext.h 和 GLES2/gl2ext.h 。我试图包含 ui/GraphicBuffer.h 但它没有接受它。是否需要添加另一个头文件?
我添加了下面给出的代码以避免使用 glTexSubImage2D()。
我该怎么做才能让它运行......
提前致谢..
opengl-es-2.0 - eglTerminate 之后的 GL 命令
问题是关于 OpenGL ES 2.0 和 EGL 1.4。
我试图了解调用后eglTerminate
是否对 GL 命令的行为有规范要求。我的意思是如果有任何 GL 错误或者它可能是一个例外。
在这种情况下是否有任何预期行为的定义,或者 GL 命令是否应该完全不受 EGL 命令的影响?
谢谢
android - Android:是否可以在没有 SurfaceView 的情况下创建 SurfaceTexture?
我想在与此答案类似的设置中创建一个具有我可以管理的 OpenGL 纹理的SurfaceTexture。(此处引用:)
- 通过OpenGL创建纹理
- 将此纹理传递给新 SurfaceTexture 的构造函数。
- 将这个新的 SurfaceTexture 赋予相机。
- 确保您使用的是 OES_External(有关详细信息,请参阅文档)。
但是,创建 OpenGL 纹理(如答案的步骤 1 所示)需要EGL 上下文,这需要将 EGLSurface 设为当前,这需要 SurfaceTexture。似乎创建 EGL 上下文的唯一方法是创建一个 SurfaceView(或另一个具有 SurfaceTexture 的视图),并使用它来初始化 EGLSurface,然后使 EGLContext 成为当前的。
我的目标是创建一个 EGLContext 并使其在后台线程中成为当前的,对相机预览图像进行一些屏幕外计算(主要使用 NDK)。我想创建一个库,并使其尽可能独立于 UI。两个相关问题:
在 Java 方面,是否可以在没有预先创建 SurfaceTexture 的情况下创建 EGLContext?
在 NDK 方面,曾经有一个私有 API 调用来创建本机 windows android_createDisplaySurface()
,但它不再起作用了,而且,它是一个私有 API。有什么方法可以用 NDK 创建表面吗?
我对使用 EGL 还是很陌生,我不明白为什么需要 EGLSurface 才能使 EGLContext 成为最新。在 iOS 中,可以先创建 EAGLContexts,然后根据需要创建 framebuffers。使用 EGL,您似乎总是需要一个本机窗口。
linux - 为什么 Qt 不能在我的新硬件上初始化显示
我不希望任何人能够解决我的具体问题,但我希望答案可能会引导我走向正确的方向。
我有一个 Qt5.2 应用程序已编译并在我的 TI AM335x 评估模块上运行。它使用-platform elgfs
标志运行。
我最近收到了新硬件,该硬件仍在使用相同版本的 TI AM335x 处理器 (3352),但它位于完全不同的板上,具有不同的显示。内核是由一些外部第三方从 TI 修改的,根文件系统和我的 Qt5.2 应用程序与 TI AM335x 上的完全相同。
当我在这个新硬件上启动我的应用程序时,它会报告:
打开显示 0x1
无法初始化 egl 显示
EGL 错误
中止
所以我的问题是:
- 是什么导致 Qt 无法初始化 egl 显示?
我的理解是“EGL”代表“嵌入式系统图形库”,我认为这意味着在某个地方需要一些 EGL.lib,但是在内核/驱动程序级别需要什么来显示与 EGL 兼容?
android - 在 Open GL ES 2.0 上默认渲染为景观模式
我正在开发https://github.com/libhybris/libhybris/blob/master/hybris/tests/test_glesv2.c上的测试应用程序
测试一个基本的 GL 应用程序。
此应用程序运行良好。由于我对 Open GL ES 2.0 相当陌生,因此我想知道在提供的源代码中需要进行哪些修改,以便默认情况下以横向模式呈现应用程序。(考虑到 Open GL ES 2.0 没有可用的 glRotate 函数)。
c++ - 我可以在 OSX 中使用 EGL 吗?
我正在尝试在 C++ 应用程序中使用Cairo库,利用它在 Mac 中的 GL 加速。(我对其 Quartz 后端进行了相同的测试,但性能令人失望。)它说它支持 EGL 和 GLX。使用 GLX 需要(外部安装)XQuartz并打开一个 XWindow,所以我倾向于 EGL:
Apple 的编程指南页面告诉使用 NSOpenGL*,该页面和其他人说它使用 CGL。
这个(2012)页面说 Mac 有 EAGL,它只与 EGL 相似(我想它指的是 IOS,而不是 MAC,因为它的 EAGL 参考链接到 IOS 帮助页面)。
Angle说它支持 EGL,但它适用于 Windows 中的 Direct3D,据我所知(?)
据说 GLFW v3 也支持(在未来的版本中?),但通过 GLX,据说是(?)。
Mali说它有一个 Mac 模拟器,但我不知道它是加速的还是仅适用于它的硬件(它还说它只支持不同平台上的 EGL 子集)。
使用 EGL 时,大多数链接都指向移动设备。我正在使用 Mac OS 10.8 和 XCode 4.6。目前情况如何/我如何(如果可以)在 Mac 中使用 EGL(现在)?
android - 在 eglSwapBuffers 之后保留后台缓冲区内容
我正在 Android 和原生 C++ 中使用egl 1.1
. 当前使用android的glSurfaceView
-它允许我绘制到显示在“onDrawFrame”末尾的后缓冲区-当后缓冲区和前缓冲区被交换时。
我的问题是 - 我需要能够显示后台缓冲区并继续写入,就好像我没有交换一样。这种需求背后的原因是场景非常大,不可能每帧都构建它,也不可能等待绘图结束——因为用户将不得不等待太长时间。
换句话说 - 我需要逐步构建场景。在渲染过程中的某个时刻,我决定是时候了,我调用eglSwapBuffers
它来显示来自后台缓冲区的绘制内容,但是当我继续写入时,显然我正在写入不同步的“前前缓冲区”。 .(不包含我到目前为止画的东西)。
据我所知,我唯一的选择是在交换之前复制后台缓冲区。伪:
- 绘制到后台缓冲区
- 将缓冲区复制到临时缓冲区
- 交换
- 将临时缓冲区复制到(新的)后台缓冲区
- 绘制更多的东西到后台缓冲区
- 等等...
我的问题 - 有没有办法执行步骤 2,4?
glCopyPixels
在这种情况下有用吗?例子?- 是
glBlitFramebuffer
吗?
还是我接近这一切都错了?
我已经做过的事情:
- 我尝试设置
EGL_SWAP_BEHAVIOR
为,EGL_BUFFER_PRESERVED
但它似乎只适用于某些设备(如khronos 注释中所述):
某些表面允许应用程序控制是否保留颜色缓冲区内容
- 在每一帧中重新渲染场景 - 不可能。我读过很多次,这是推荐的。
web-services - Websphere Application Server V8.5 Liberty Profile & 访问 iSeries
我正在尝试在 Websphere Application Server Liberty Profile V8.5 上部署我们基于 EGL 的 Web 服务项目。Web 服务正在调用位于另一台服务器上的 EGL 生成的 cobol 程序。此外,我们需要与 iSeries (Power7) 上的数据库建立 JDBC 连接,我在 server.xml 中添加了以下代码:
这是调用语句被执行时抛出的错误:
我假设 jt400.jar 没有被加载。还尝试了默认文件集目录: