标签: glsurfaceview

重新启动时,GLSurfaceView内部片段无法呈现

我有一个GLSurfaceView设置和渲染预期使用a GLSurfaceView.Renderer.我的应用程序使用Android支持包中的片段.当我导航到一个新的片段surfaceDestroyed被调用但是当我通过backstack回到片段时GLSurfaceView将不会呈现,调用requestRender不会导致onDraw调用.

我知道我需要调用onResumeonPause表面视图,我从托管片段做这个,但它似乎没有解决问题.关于htis方法的所有例子都参考了活动,这可能是问题吗?如果是这样,你如何使用GLSurfaceView片段内部.

非常感谢任何见解,我很高兴发布代码,但它似乎更像是一个普遍的问题,

谢谢

android opengl-es glsurfaceview android-fragments

59
推荐指数
1
解决办法
8590
查看次数

捕获GLSurfaceView的屏幕到位图

我需要能够GLSurfaceView在特定时刻捕捉到某个时刻的图像.我有以下代码:

relative.setDrawingCacheEnabled(true);
screenshot = Bitmap.createBitmap(relative.getDrawingCache());
relative.setDrawingCacheEnabled(false);
Log.v(TAG, "Screenshot height: " + screenshot.getHeight());
image.setImageBitmap(screenshot); 
Run Code Online (Sandbox Code Playgroud)

GLSurfaceView包含内的RelativeLayout,但我也尝试它直接使用GLSurfaceView,试图捕捉图像.有了这个,我认为屏幕捕获透明图像,即没有任何东西.任何帮助将不胜感激.

java android screen-capture glsurfaceview

33
推荐指数
2
解决办法
2万
查看次数

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

我对EGL感到困惑.

我的GLSurfaceView创建了一个EGLContext.现在我创建一个共享上下文.现在我需要使用EGLExtension.

我必须使用的方法称为(> = API18):

EGLExt.eglPresentationTimeANDROID(android.opengl.EGLDisplay display, android.opengl.EGLSurface surface, long time);
Run Code Online (Sandbox Code Playgroud)

问题是,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上下文一起使用?

我做错什么了吗?

android glsurfaceview textureview

25
推荐指数
2
解决办法
1万
查看次数

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

我正在为Android编写信息可视化API,并试图将两个自定义单元GLSurfaceView放入布局中遇到问题.此时的Custom GLSurfaceView只是一个扩展,GLSurfaceView以消除自定义方法可能导致的故障.

当我在布局中添加了两个组件并启动它运行的应用程序时.但没有任何东西被绘制,似乎它进入了一个无限循环.因为Renderers中的调试消息被打印到LogCat中.但是,如果我只使用其中一个自定义GLSurfaceView组件,它的工作完全正常.

我读到GLSurfaceView在多个活动中使用时出现问题,我想在同时使用其中两个组件时也适用.我已经尝试过这里发布的解决方法,但似乎无法让它工作.

我将不胜感激任何帮助.我选择使用openGL以获得更好的性能,但如果我不能同时使用多个组件,我想我将不得不使用Canvas.

清单如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView android:text="@string/hello" android:id="@+id/TextView01"
        android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

    <com.syntronic.vtadlib.VisualizationView android:id="@+id/glview"
        android:layout_width="fill_parent" android:layout_height="300px" />


    <TextView android:text="@string/hello" android:id="@+id/TextView02"
        android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

    <LinearLayout 
        android:orientation="vertical" android:layout_width="fill_parent"
        android:layout_height="fill_parent">

        <com.syntronic.vtadlib.VisualizationView android:id="@+id/glview2"
            android:layout_width="fill_parent" android:layout_height="fill_parent" />

    </LinearLayout>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

从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 …
Run Code Online (Sandbox Code Playgroud)

android opengl-es glsurfaceview android-layout

23
推荐指数
2
解决办法
9203
查看次数

对正在播放的视频应用效果

我是Open Gl世界的新手,我已经google了很多,但我无法找到一种方法来实现对正在播放的视频的效果.经过一番研究,我终于找到了一个可以用来在GLSurfaceView播放视频.我从Google文档中了解到,我们可以对视频应用效果.

通过这篇文章,我能够成功地对位图应用效果.现在我想为我的视频做到这一点,所以任何帮助或指针都表示赞赏.

是我用于渲染正在播放的视频的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 context, MediaPlayer mp) {
        super(context);

        setEGLContextClientVersion(2);
        mMediaPlayer = mp;
        mRenderer = new VideoRender(context);
        setRenderer(mRenderer);
    }

    @Override
    public void onResume() { …
Run Code Online (Sandbox Code Playgroud)

video android opengl-es glsurfaceview

23
推荐指数
1
解决办法
8303
查看次数

我如何使用Android的"Surface"类?

是否有Surface,SurfaceHolder,EGLSurface,SurfaceView,GLSurfaceView,SurfaceTexture和TextureView的详细说明?特别是:

  • SurfaceView和TextureView有什么区别?
  • 我是否需要使用GLSurfaceView来使用OpenGL ES?
  • Surface和EGLSurface如何相互作用?
  • SurfaceTexture有什么作用?
  • 为什么我在SurfaceView上绘制的东西必须高于或低于其他所有东西?
  • 什么是SurfaceFlinger?
  • 状态和导航栏的组成如何工作?
  • 虽然我们正在努力,但在Android上构建游戏循环的正确方法是什么?

android surfaceview glsurfaceview surfaceflinger textureview

17
推荐指数
1
解决办法
1515
查看次数

使用MediaCodec记录曲面

因此,在我的应用程序中,我能够使用GPUImage库向来自Camera的视频显示效果(如模糊滤镜,高斯).

基本上,我(库)将来自摄像机的输入,获得真实的原始字节的数据,将其转换为从YUV格式RGBA格式,然后应用上的影响到该图像和显示器SurfaceGLSurfaceView使用OpenGL.最后,对于用户来说,它看起来像是应用了效果的视频.

现在我想Surface使用MediaCodec API 将视频帧记录下来.

但是这个讨论说我们无法将预定义传递SurfaceMediaCodec.

我在bigflake看到了一些他正在Surface使用的样品,MediaCodec.createInputSurface()但对我来说,Surface来自于GLSurfaceView.

那么,我如何录制Surface视频的帧?

我将并行录制音频,使用FFMPEG合并该视频和音频,并作为应用效果的视频呈现给用户.

android ffmpeg opengl-es glsurfaceview mediacodec

14
推荐指数
1
解决办法
5078
查看次数

使用带有android xml布局的GLSurfaceView类

我想利用android xml布局.我在框架布局中放置了一个glSurfaceView,以便与线性布局结合使用......

<FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1">

<android.opengl.GLSurfaceView android:id="@+id/surfaceviewclass"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

</FrameLayout>

<LinearLayout android:id="@+id/gamecontrolslayout"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:layout_weight="5"
          android:background="@drawable/backdrop"> 
//some layout stuff

</LinearLayout>
<LinearLayout>
Run Code Online (Sandbox Code Playgroud)

然后我就像这样调用我的布局

setContentView(R.layout.main);
    GLSurfaceView glSurfaceView = (GLSurfaceView)findViewById(R.id.surfaceviewclass);
Run Code Online (Sandbox Code Playgroud)

在onCreate();

我怎样才能调用我的glSurfaceView以便我可以使用这样的xml布局并引用我自己的GLSurfaceView类(下面是引用我自己的GLSurfaceView类的代码)...

glSurfaceView = new MyGLSurfaceView(this);
    setContentView(glSurfaceView);
Run Code Online (Sandbox Code Playgroud)

无论如何将这两者结合起来?我想这样做因为我在我的glSurfaceView类中有很多东西,比如文件加载和触摸事件.而且我只想到实现这个新布局

java android opengl-es glsurfaceview android-layout

13
推荐指数
1
解决办法
2万
查看次数

使用Grafika CameraCapture代码拉伸Android相机预览

我正在寻找帮助解决我使用Grafika的CameraCaptureActivity代码所面临的问题.我想构建一个可以记录相机并显示预览的应用程序,所以这个样本和代码看起来就像我想要的那样,到目前为止它很棒,这个问题appart.

我的问题是,当相机预览尺寸与GLSurfaceView我用于显示预览的确切尺寸不匹配时,它会显示拉伸预览.

以下是它的外观:

预览拉伸

你可以看到它是水平拉伸的,因为音符表是一个完美的正方形.

用于在三星Galaxy S4这种精确为例,相机预览大小1280x720(从使用预览可用大小提取Camera2API),并且GLSurfaceView1920x1080覆盖整个屏幕.

什么时候出现?

当SurfaceView与Camera输出相比进行放大时,即使我始终确保比率保持正确(1920x1080= 1.5*1280x720),也会出现此问题.

你用的是什么代码?

我使用Grafika的代码,包括:

有些日志?

这是SurfaceFlinger转储的样子:

Hardware Composer state (version 01030000):
  mDebugForceFakeVSync=0
  Display[0] configurations (* current):
    * 0: 1080x1920, xdpi=442.450989, ydpi=439.351013, secure=1 refresh=16666667
  numHwLayers=3, flags=00000000
    type   |  handle  | hint | flag | tr | blnd |  format     |     source crop(l,t,r,b)       |           frame        |      dirtyRect         |  name 
------------+----------+----------+----------+----+-------+----------+-----------------------------------+---------------------------+-------------------
       HWC | b3b12ba0 …
Run Code Online (Sandbox Code Playgroud)

android opengl-es glsurfaceview android-camera grafika

13
推荐指数
1
解决办法
1276
查看次数

没有setZOrderonTop的Android GLSurfaceView透明背景

对不起我的英语不好.

我的工作基于https://github.com/harism/android_page_curl/

经过几个小时的研究,我找到了一些解决方案,但不是我在申请中遇到的所有问题.我在使用GLSurfaceView时遇到了一些麻烦.我有一个背景,有一个relativeLayout,一个GLSurfaceView和一个叠加在上面.

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/background"
    android:layout_width="match_parent"
    android:background="@layout/backgroundrepeat"
    android:layout_height="match_parent">
<com.m2y.foxprez.view.CurlView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/openglview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
<RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/overlay"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

当我开始我的观点时:

setEGLConfigChooser(8,8,8,8,16,0);
setRenderer(renderer);
getHolder().setFormat(PixelFormat.TRANSLUCENT);
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
setZOrderMediaOverlay(true);
Run Code Online (Sandbox Code Playgroud)

在我的渲染器中:

public void onSurfaceCreated(GL10 gl, EGLConfig config) {
    gl.glClearColor(0f, 0f, 0f, 0f);
    gl.glShadeModel(GL10.GL_SMOOTH);
    gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
    gl.glHint(GL10.GL_LINE_SMOOTH_HINT, GL10.GL_NICEST);
    gl.glHint(GL10.GL_POLYGON_SMOOTH_HINT, GL10.GL_NICEST);
    gl.glEnable(GL10.GL_LINE_SMOOTH);
    gl.glDisable(GL10.GL_DEPTH_TEST);
    gl.glDisable(GL10.GL_CULL_FACE);
}

public synchronized void onDrawFrame(GL10 gl) {
    gl.glClearColor(0f,0f,0f,0f);
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    gl.glLoadIdentity();
}
Run Code Online (Sandbox Code Playgroud)

经过多次研究,我目前被阻止了这个结果:
使用setZOrderOnTop,我有背景,但叠加层在视图下.
使用setZOrderMediaOverlay,我有叠加层,但背景为黑色.

有人可以帮帮我吗?

android opengl-es glsurfaceview android-relativelayout

12
推荐指数
1
解决办法
1万
查看次数