Articles of glsurfaceview

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 […]

Android上画相机预览

我正在制作一个虚拟现实应用程序,在这个应用程序中,相机应该检测到脸部,find它们并在相机预览中显示它们的位置 我知道有3种方法可以做到这一点,我想使用GLSurfaceView尽可能快( 根据这篇文章 ),但目前我正在尝试使用相机用于预览的同一个 SurfaceView。 我的callback就是onFaceDetection就像这样: public class MyActivity extends Activity implements SurfaceHolder.Callback, Camera.FaceDetectionListener { Camera camera; SurfaceView svPreview; SurfaceHolder previewHolder; TextView tvInfo; Paint red; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); svPreview = (SurfaceView) findViewById(R.id.svPreview); tvInfo = (TextView) findViewById(R.id.tvInfo); red = new Paint(); red.setStyle(Paint.Style.STROKE); red.setStrokeWidth(3); previewHolder = svPreview.getHolder(); previewHolder.addCallback(this); previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } public void […]

具有透明背景的OpenGL场景+以下和以上的原生小部件

我试图达到以下观点: 如果视图是分层的(从下到上): 第1层:基本的XML布局(图像,button等) 第二层:透明背景的OpenGL场景,让我们可以看透 第3层:OpenGL场景中的一些小部件(即TextView ) 我沿着这些线使用了GLSurfaceView和TextureView ,没有成功。 我可以在表面上设置不透明度,但整个视图变成半透明的,并且setZOrderOnTop必须设置为true ,所以没有任何小部件可以在上面生存。 我也尝试了rajawali3d ,结果相同 这可以实现吗? 使用股票的意见? 还是图书馆? 更新:也试过JPCT-AE ,结果一样。 更新2:在使用SurfaceView ,似乎有办法在UnityPlayer使用浮动的OpenGL视图,但是在新的SDK中不再是这种情况。

我怎样才能把一个透明的背景glSurfaceView的顶部视图?

我的应用程序由图像背景组成(从后到前),然后是包含3D对象的glSurfaceView和顶部2个button。 我想GLSurfaceView的背景是透明的,看到后面的图像。 我已经尝试了两种解决scheme,但没有一种能够满足要求: mGLSurfaceView = new GLSurfaceView(mContext); mGLSurfaceView.setEGLContextClientVersion(2); mGLSurfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0); mGLSurfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT); mGLSurfaceView.setZOrderOnTop(true); mGLSurfaceView.setRenderer(mRenderer); 在这种情况下,我可以看到背景,但3D对象漂浮在所有其他布局的顶部,有时隐藏button。 mGLSurfaceView = new GLSurfaceView(mContext); mGLSurfaceView.setEGLContextClientVersion(2); mGLSurfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0); mGLSurfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT); mGLSurfaceView.setZOrderMediaOverlay(true); mGLSurfaceView.setRenderer(mRenderer); 在这种情况下,我可以看到button,但GLSurfaceView不再透明,我看不到图像的背景。 我parsing了所有其他主题,但没有一个给我任何满意的答案。