问题标签 [glsurfaceview]

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 回答
1403 浏览

java - Android OpenGL ES...为什么教程总是正确渲染,而我的版本随机不正确?

我正在关注insanitydesign.com上的教程集,它是关于 OpenGL 的 NeHe 教程的 Android 端口。我在理解为什么教程版本似乎始终正确渲染而我的修改版本随机渲染完全不正确时遇到了很多问题。有时,当程序加载时,问题会立即显现出来,但有时我必须在屏幕出现之前旋转屏幕。您可以下载一个包含 screengrabs 的 zip 文件,其中我从 filedropper将屏幕旋转了 12 次。如您所见,三角形通常会呈现,但有时会完全扭曲和弄脏。 如果您好奇,这里是我的整个 Eclipse 项目的链接。

我怀疑问题出在我的 Shape.draw() 方法中,但我不能确定。

我相信这是相关的代码:

GLRenderer.java

Shape.java 包 com.smashing.test;

编辑:我知道本教程与我的版本有点不同。我试图从中推断并进行实验......我对这些差异感到非常惊讶和震惊,并想知道它们为什么存在,以及如何避免我在渲染中发现的这种不愉快的结果方案。

0 投票
2 回答
789 浏览

java - 在 GLSurfaceView 上设置 AlphaAnimation

有没有办法将 GLSurfaceView 上的动画从完全不透明淡化到 0 alpha 透明度?我有以下代码什么都不做:

我知道 SurfaceView 通常不会像普通的 View 对象那样表现,所以这是解决这个问题的正确方法吗?还有其他更好的方法吗?有可能吗?

0 投票
4 回答
27480 浏览

java - 将 GLSurfaceView 的屏幕捕获到位图

我需要能够及时捕捉GLSurfaceView到某个时刻的图像。我有以下代码:

GLSurfaceView包含在 a中RelativeLayout,但我也尝试直接使用GLSurfaceView来尝试捕获图像。有了这个,我认为屏幕捕获了一个透明的图像,即那里什么都没有。任何帮助将不胜感激。

0 投票
2 回答
5818 浏览

android - 将透明 GLSurfaceview 覆盖到 android 中的现有视图上?

嗨,我一直在尝试将 GLSurfaceview 叠加到现有视图上。下面的代码显示了我是如何叠加的。唯一不起作用的是顶部 glsurfaceview 的透明度。

然后我将渲染器中的背景颜色设置为

有人可以告诉我我遗漏了什么吗?

0 投票
1 回答
1824 浏览

android - 将相机预览和 GLSurfaceView 捕获到文件中

我正在尝试为相机预览和叠加的 GLSurfaceView“拍照”。我通过 camera.takePicture() 和 PictureCallback() 使相机预览元素工作,但现在需要包含 GLSurfaceView 元素,或者单独捕获当前屏幕并将两个位图合并到一个文件中。我尝试使用下面的代码从surfaceView 中获取图像,但这只会导致空位图。

我将不胜感激有关此的任何想法/片段。提前谢谢了。

0 投票
0 回答
866 浏览

android - 是否可以在同一布局中有两个或多个 GLSurfaceView?

在同一个活动(和布局)中是否可以有两个或多个 GLSurfaceView ?

我试过了,我只是其中一个翻了一番......我怎么能做对?

0 投票
4 回答
7129 浏览

android - 与 SurfaceView、Camera 和 OpenGL 战斗

一个多星期以来,我们一直在解决一些与 SurfaceViews 相关的问题,但没有找到合适的解决方案。我们阅读了论坛中有关类似问题的其他问题(甚至是 Mixare 源代码),但找不到答案,因此我们希望您能以某种方式帮助我们。

场景:我们有

  • 相机的 SurfaceView
  • 用于 OpenGL 层的 SurfaceView,位于相机顶部。
  • 另一个视图,它显示了一些关于我们可以在屏幕上看到的信息。这个位于两个 SurfaceView 之上。

问题:

无论我们如何努力,两个 SurfaceView 显然都不能很好地相处。如果我们尝试:

(这似乎合乎逻辑),一切都按预期进行,直到我们锁定/解锁手机。之后,GLSurfaceView 就消失了(不是 InfoView,它仍然显示)。

相反,如果我们尝试:

然后问题是 GLSurfaceView 仅在锁定/解锁后出现,在此之前屏幕显示相机和 InfoView。

我们发现,如果我们在显示视图的 Activity 中执行 onStart() 后让主线程休眠 4.6 秒(或更长时间),则行为符合预期(即使在锁定/解锁之后,也会显示相机、glsurface 和信息视图)。

问题是,我们正在寻找一个更...优雅的解决方案。

在我们看来,问题在于相机花费的时间比预期的要多Camera.open(),因此添加了相机视图,添加了 GLSurfaceView,当相机实际打开时,它在 GLSurfaceView 之上打开。关于这一点,我们bringToFront()在 GLSurfaceView 上使用,并将它放在信息视图的顶部,但是在锁定/解锁后,相机仍然在它上面打开,给我们留下了一个只有相机预览的屏幕。

有任何想法吗?我们怎样才能同时显示 SurfaceView 和它们之上的信息视图?

0 投票
2 回答
5306 浏览

android - 在不同的 GLSurfaceView 之间共享 GLES20 上下文和纹理?

是否可以在不同的 GLSurfaceViews 之间(在一个 Activity 内)共享 GLES20 上下文?或者,如何在不同的 GLSurfaceView 之间共享一组纹理?

在 iOS 上,如果您想在不同的 CAEAGLLayer 支持的 UIViews 中节省内存并重用(大)纹理,您可以在它们之间传递一个 EAGLContext 对象,或者使用共享一个公共 EAGLSharegroup 对象的不同 EAGLContexts。

我想知道如何在 Android 上实现这一点。有没有等效的技术?

编辑1

最初的建议是实现你自己的 EGLContextFactory,它将返回相同的 EGLContext,但它不起作用,因为每个 GLSurfaceViews 都将渲染分派到它自己的私有 gl 渲染线程,并且在不同线程之间共享相同的 EGLContext 是不可能的。

改写我最初的问题:您在一个屏幕(一个活动)中有多个 GLSurfaceViews,您需要在每个表面的单个 EGLContext 中访问一组常见但较大的纹理,但多次加载纹理超出了设备的内存。那么你将如何在 GLSurfaceViews 之间共享你的纹理呢?

0 投票
1 回答
2134 浏览

android - SurfaceView:如何仅绘制屏幕的一小部分而不是整个屏幕

我想在我的应用程序中有一个静态背景图像,然后我想在前景中有一些小动画。目前,我基本上每次都必须重新绘制整个屏幕,即使唯一改变的东西很小并且只占屏幕的一小部分。

有没有办法只更新部分屏幕来加快我的应用程序帧速率?可以用 SurfaceView 完成,还是我必须使用 GLSurfaceView 来代替?

任何解释和教程/文档的链接都将不胜感激。

谢谢,

0 投票
2 回答
15364 浏览

android - 如何在 Android 上正确使用 setZOrderMediaOverlay?

像许多其他人一样,我正在尝试在相机预览(使用 SurfaceView)上绘制 3D 对象(使用 GLSurfaceView),以及放置在顶部的一些按钮。我实际上得到了一个原型工作,但我无法让 onResume 正常工作。恢复后,GLSurfaceView 留在后面,不再可见。我知道它正在工作,因为如果我从布局中删除 SurfaceView,我可以看到很好的绘图。

目标是 Nexus One,运行库存 2.3.3 ROM。

这是布局xml:

所有这些都包含在一个<merge>块中,但由于某种原因,我无法将它包含在上面的<code>清单中。Preview是扩展SurfaceView和实现相机预览逻辑的类。

这在活动启动时工作正常。在我启动另一个活动(例如,通过按下其中一个按钮)并完成该活动后,主要活动恢复,但 3D 对象不再可见。

我发现了这个讨论,其中提到这setZOrderMediaOverlay()将有助于解决这个 z 排序问题。此外,setZOrderMediaOverlay() 的 Android 文档说,应该在“将表面视图的包含窗口附加到窗口管理器之前”调用此函数。我不知道我应该如何解释该语句,所以我将调试语句放在代码中以查看事件顺序。代码如下GLSurfaceView所示:

这是我启动应用程序时的事件顺序:

所以我假设setZOrderMediaOverlay()需要onResume()在构造函数中或构造函数中调用它。但是,我在or类中尝试了setZOrderMediaOverlay()with trueor的各种组合,但都没有解决问题。falseGLSurfaceViewSurfaceView

在 Android 编程方面,我相对较新。我已经走了这么远,但在这一点上我需要一些帮助。如果有人setZOrderMediaOverlay()在这种情况下成功使用并与之合作,onResume()请告诉我这需要如何完成。

提前非常感谢!