Articles of glsurfaceview

TextureView与GLSurfaceView或如何将GLSurfaceView与EGL14一起使用

我对EGL感到困惑。 我的GLSurfaceView创建了一个EGLContext。 现在我创建一个共享上下文。 现在我需要使用EGLExtension。 我必须使用的方法称为(> = API18): EGLExt.eglPresentationTimeANDROID(android.opengl.EGLDisplay display, android.opengl.EGLSurface surface, long time); 问题是,GLSurfaceView只创建了javax.microedition.khronos.egl.EGLContext。 这告诉我,不要使用GLSurfaceView。 所以我尝试了稍微类似的TextureView,区别在于你必须处理自己的EGL内容。 哪个对此有益。 但是:TextureView速度较慢,至少它看起来像那样,所以我用Method Profiler记录了一些图表: 这里的TextureView有自己的EGL处理: 顶部的Thread是一个唤醒Thread中间的时钟,它呈现在TextureView上。 之后将调用主线程,用于重绘TextureView。 …这里的GLSurfaceView有自己的EGL处理这次时钟在中间,它调用顶部的线程将我的图像渲染成帧缓冲区,我直接将其提供给SurfaceView(RENDERMODE_WHEN_DIRTY)并调用requestRender请求视图呈现。 正如您所看到的那样,通过GLSurfaceView,它看起来比使用TextureView更清晰。 在这两个例子中,我在屏幕上没有任何其他东西,并且它们使用相同的着色器呈现完全相同的网格物体。 我的问题:有没有办法将GLSurfaceView与EGL14上下文一起使用? 我做错什么了吗?

对正在播放的video应用效果

我是Open Gl世界的新手,我已经google了很多,但我无法find一种方法来实现对正在播放的video的效果 。 经过一些研究,我终于find了一个可用于在GLSurfaceView上播放video的课程。 我从Google文档中了解到,我们可以对video应用效果。 通过这篇文章,我能够成功地对位图应用效果。 现在我想为我的video做到这一点,所以任何帮助或指针都表示赞赏。 这是我用于渲染正在播放的video的VideoSurfaceView package me.crossle.demo.surfacetexture; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.SurfaceTexture; import android.media.MediaPlayer; import android.opengl.GLES20; import android.opengl.GLSurfaceView; import android.opengl.Matrix; import android.util.Log; import android.view.Surface; @SuppressLint(“ViewConstructor”) class VideoSurfaceView extends GLSurfaceView { VideoRender mRenderer; private MediaPlayer mMediaPlayer = null; public VideoSurfaceView(Context […]

如何在同一布局中使用多个GLSurfaceView组件?

我正在为Android编写信息可视化API,并试图将两个自定义GLSurfaceView单元放入布局中遇到问题。 此时的Custom GLSurfaceView只是GLSurfaceView的扩展,用于消除自定义方法可能导致的故障。 当我在布局中添加了两个组件并启动它运行的应用程序时。 但没有画出来,似乎它进入了一个无限循环。 因为Renderers中的调试消息被打印到LogCat中。 但是,如果我只使用一个自定义的GLSurfaceView组件,它的工作完全正常。 我读到在多个活动中使用GLSurfaceView时出现问题,我想在同时使用其中两个组件时也适用。 我已经尝试过这里发布的解决方法,但似乎无法让它工作。 我将不胜感激任何帮助。 我选择使用openGL以获得更好的性能,但如果我不能同时使用多个组件,我想我将不得不使用Canvas。 清单如下: 从Activity中,代码如下: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mSurfaceView = (VisualizationView) findViewById(R.id.glview); mSurfaceView2 = (VisualizationView) findViewById(R.id.glview2); //Enables debug flags for Errors //mSurfaceView.setDebugFlags(GLSurfaceView.DEBUG_CHECK_GL_ERROR); //mSurfaceView2.setDebugFlags(GLSurfaceView.DEBUG_CHECK_GL_ERROR); mSurfaceView.setRenderer(new CoordinateSystemRenderer()); mSurfaceView2.setRenderer(new CoordinateSystemRenderer()); } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); mSurfaceView.onPause(); mSurfaceView2.onPause(); } […]

GLSurfaceView不断呈现,尽pipe改变渲染模式

我正在尝试创build一个显示游戏区域的地图的GLSurfaceView。 当玩家移动时,游戏活动调用highlightSpot,这反过来会触发渲染请求。 我只想重新画一个视图的时候是玩家移动的时候。 但是,在我目前的实现中,尽pipe在我的GLSurfaceView上调用了setRenderMode(RENDERMODE_WHEN_DIRTY) ,但它的渲染模式似乎仍然是连续的。 为了检查,我在我的onDrawFrame方法中抛出了一个println语句,当我运行我的应用程序时,输出很快就填满了我的logcat而没有播放器移动一次 – 显然这不是我想要的。 还有什么我需要做的,以使视图渲染只有当被问及? (这段代码的大部分源自http://insanitydesign.com/wp/projects/nehe-android-ports/上的教程,为了简洁起见,省略了我的onDrawFrame,OnSurfaceChanged和onSurfaceCreated方法,因为我是不改变渲染模式或者在这些方法的任何地方请求渲染,如果有人认为它可能是相关的,我也可以发布。) public class SurfaceViewClass extends GLSurfaceView implements Renderer { public SurfaceViewClass(Context context) { super(context); … this.setRenderer(this); this.setRenderMode(RENDERMODE_WHEN_DIRTY); } public void highlightSpot(int x, int y) { /* change some variables here */ … this.requestRender(); } }

android视图或surfaceView,我应该使用?

我一直在试图做一个可滚动/可缩放的应用程序,除了绘制位图以外,一切都变好了。 这是一个非常大的图像(由4096年6656),我已经拆分成瓷砖。 有一个矩形arrays,位图被绘制到,它检测左上angular的矩形是什么,所以它可以绘制位图覆盖用户的可视屏幕。 我的问题是这一切都滞后,当应用程序必须加载到内存的位图; 一旦他们加载它不是一个问题。 我以512块512块开始,然后128块128块。虽然有帮助,但还是有一些明显的滞后。 我一直在研究surfaceView,并希望你的意见,如果我应坚持查看,或使用surfaceView解决我的滞后。

如何在Android上正确使用setZOrderMediaOverlay?

像许多其他人一样,我正在试图在相机预览(使用SurfaceView)上绘制3D对象(使用GLSurfaceView)以及放置在顶部的一些button。 我实际上有一个原型工作,但我不能让onResume正常工作。 简历后,GLSurfaceView留在后面,不再可见。 我知道它正在工作,因为如果我从布局中删除SurfaceView,我可以看到图纸很好。 目标是Nexus One,运行库存2.3.3 ROM。 这是布局xml: <com.example.cameratest.GLPreview android:id="@+id/cubes" android:layout_width="fill_parent" android:layout_height="fill_parent"/> <com.example.cameratest.Preview android:id="@+id/camera" android:layout_width="fill_parent" android:layout_height="fill_parent"/> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/buttongroup" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_gravity="right" android:gravity="center"> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:id="@+id/buttonClose"></Button> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:id="@+id/buttonMode"></Button> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:id="@+id/buttonCameraInfo"></Button> </LinearLayout> 所有这些被封装在一个<merge>块中,但由于某种原因,我不能将它包含在上面的<code>列表中。 Preview是扩展SurfaceView并实现相机预览逻辑的类。 这项活动启动时正常工作。 在我启动另一个活动(例如,通过按下其中一个button)并完成该活动后,主要活动恢复,但3D对象不再可见。 我发现这个讨论提到setZOrderMediaOverlay()将有助于解决这个z顺序问题。 另外, 用于setZOrderMediaOverlay()的Android文档说这个函数应该在“表面视图的包含窗口被附加到窗口pipe理器之前”被调用。 我不知道应该如何解释这个语句,所以我把代码中的debugging语句看成事件的顺序。 以下是GLSurfaceView代码的外观: public class GLPreview extends GLSurfaceView { […]

button和GLSurfaceView

我有一个GLSurfaceView,我使用OpenGL显示一些animation。 我现在想要添加一个button到这个视图。 这是如何完成的? 可以做到不涉及XML布局?

以编程方式在后台具有GL视图的软键盘上的EditText

我正在做一个游戏,我想在软键盘上方popup一个EditText位置。 这是我的代码在我的主要活动中构buildView Hierarchy时的样子: getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); viewGroup = new RelativeLayout(this); viewGroup.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); view = new GameView(this); RelativeLayout.LayoutParams vLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); vLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP); view.setLayoutParams(vLayoutParams); viewGroup.addView(view); editText = new GameEditText(this); RelativeLayout.LayoutParams etLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); etLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); editText.setGravity(Gravity.BOTTOM); editText.setLayoutParams(etLayoutParams); viewGroup.addView(editText); setContentView(viewGroup); 这里是我的AndroidManifest.xml(这个部分的问题): <activity android:name="app.ember.MainActivity" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:launchMode="singleTask" android:configChanges="orientation|keyboardHidden|screenSize" android:screenOrientation="sensorLandscape" android:windowSoftInputMode="adjustResize" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category […]

Android视图与SurfaceView vs GLSurfaceView的2D绘图应用程序与Zoomable用户界面

我打算写一个带有可缩放用户界面的2D绘图应用程序。 使用该应用程序,用户应该能够转换(翻译和缩放)绘制的path(当然还有UI)。 我假设同时会有多达500条path。 现在,我想知道,以(View,SurfaceView或GLSurfaceView)开始,以提供可接受的性能。 我读了几个职位[1-6],包括一次在Android开发人员指南,我仍然不是100%确定使用哪个视图。 根据2009年Google I / O大会( http://youtu.be/U4Bk5rmIpic?t=45m10s )的演讲,以及自己的经验canvas(View和SurfaceView)在处理超过100条path时似乎没有足够快的执行速度。 有没有人看到使用canvas实现应用程序的可能性或是OpenGL的路要走? [1] Android:决定SurfaceView和OpenGL(GLSurfaceView) [2] SurfaceView或GLSurfaceview? [3] SurfaceView和视图之间的区别? [4] http://pierrchen.blogspot.jp/2014/03/anroid-graphics-surfaceview-all-you.html [5] SurfaceView和ImageView的区别 [6] Android中SurfaceView和GLSurfaceView的区别

为什么glClear在OpenGLES中被阻塞?

我试图描绘我的渲染器,我看到一些奇怪的分析行为,我无法解释。 我正在使用glSurfaceView,我已经设置了不断渲染。 这就是我的onDrawFrame()的结构 public void onDrawFrame(GL10 unused) { GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT); executeAllDrawCommands(); } 这在轻负载下performance的很慢,所以我创build了一个计时器类,并开始分析这一些。 我对我所看到的很惊讶。 我把一些探测器放在我的onDrawFrame方法中,如下所示: public void onDrawFrame(GL10 unused) { swapTimer.end(); clearTimer.start(); GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT); clearTimer.end(); drawTimer.start(); executeAllDrawCommands(); drawTimer.end(); swapTimer.start(); } clearTimer测量调用glClear drawTimer的时间, drawTimer测量运行所有绘制调用所swapTimer的时间, swapTimer测量onDrawFrame退出时间和返回时间(调用eglSwapBuffers所用的时间)的时间。 当我跑了一个非常轻的场景,我得到了一些奇怪的数字,我无法解释: swapTimer : 20ms (average) clearTimer : 11ms (average) drawTimer : 2ms (average) 我预计交换时间会稍微大一点,因为我相信这个设备的vsync强制启用的速度为30fps,不过我不知道为什么实际的“清除”通话会被阻塞11毫秒。 我以为它只是应该发出一个asynchronous命令并返回? 当我画一个更繁忙的场景时,数字发生了很大变化: swapTimer : 2ms […]