标签: glsurfaceview

Android:恢复应用后,GLSurfaceView为黑色

根据标题,从暂停状态恢复后,GLSurfaceView为空白。恢复后,渲染器的onSurfaceCreatedonSurfaceChangedonDrawFrame被调用,但屏幕仍为空白!

以下是相关代码:

@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
    gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
    gl.glShadeModel(GL10.GL_SMOOTH);
    gl.glClearDepthf(1.0f);
    gl.glEnable(GL10.GL_DEPTH_TEST);
    gl.glDepthFunc(GL10.GL_LEQUAL);

    boxWidth = 0.5f;
    boxHeight = 0.5f;
    boxCenter = new float[] { 0.5f, 0.5f };

    Log.v("resume", "onSurfaceCreated");
}

@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {      
    gl.glViewport(0, 0, width, height);
    gl.glMatrixMode(GL10.GL_PROJECTION);
    gl.glLoadIdentity();
    gl.glOrthof(0, 1, 0, 1, -5, 5);
    gl.glMatrixMode(GL10.GL_MODELVIEW);

    viewHeight = height;
    viewWidth = width;

    Log.v("resume", "onSurfaceChanged");
}

@Override
public void onDrawFrame(GL10 gl) {
    gl.glLoadIdentity(); …
Run Code Online (Sandbox Code Playgroud)

android opengl-es onresume glsurfaceview

4
推荐指数
2
解决办法
5557
查看次数

Android GLSurfaceView

可以在GLSurfaceView上添加LinearLayout吗?如何在GLSurfaceView上叠加LinearLayout?也许GLSurfaceView是Game playground,LinearLayout是菜鸟〜

android opengl-es glsurfaceview

4
推荐指数
1
解决办法
3044
查看次数

在Android ndk上的OpenGLES 1.1中使用GLSurfaceView模式的FrameBuffers

在Android NDK中,是否可以使用典型的Java端GLSurfaceView模式(从GLSurfaceView.Renderer onDrawFrame,onSurfaceCreated等覆盖方法)使用OpenGL ES 1.1,同时在C++端使用帧,颜色和深度缓冲区,以及VBO?

我正在尝试使用它创建它们:

void ES1Renderer::on_surface_created() {
    // Create default framebuffer object. The backing will be allocated for the current layer in -resizeFromLayer
    glGenFramebuffersOES(1, &defaultFramebuffer);
    glBindFramebufferOES(GL_FRAMEBUFFER_OES, defaultFramebuffer);

    // Create color renderbuffer object.
    glGenRenderbuffersOES(1, &colorRenderbuffer); 
    glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorRenderbuffer);
    glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, colorRenderbuffer);

    // create depth renderbuffer object.
    glGenRenderbuffersOES(1, &depthRenderbuffer);
    glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthRenderbuffer);
    glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, depthRenderbuffer);
}
Run Code Online (Sandbox Code Playgroud)

但是,似乎这没有得到适当的上下文,我认为这是在初始化GLSurfaceView和渲染器时创建的(java端).

我不是NDK和OpenGLES的专家,但我必须移植一个使用OpenGL ES 1.1的iOS应用程序,我的目标是尽可能多地重用代码.由于应用程序还在利用特定于平台的UI组件(按钮,列表等),同时绘制GL图形,我认为这将是最好的方法.但是,我现在正在考虑使用本机活动,但我不确定与其他java组件的关系是什么.

c++ opengl-es android-ndk glsurfaceview native-activity

4
推荐指数
1
解决办法
1085
查看次数

java.lang.ClassNotFoundException:android.view.GLSurfaceView

我试图添加一个GLSurfaceView,但我得到的错误 - java.lang.ClassNotFoundException:android.view.GLSurfaceView;

java.lang.RuntimeException: Unable to start activity ComponentInfo{fashizel.mizi/fashizel.mizi.MyActivity}: android.view.InflateException: Binary XML file line #11: Error inflating class GLSurfaceView
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
        at android.app.ActivityThread.access$600(ActivityThread.java:130)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:4745)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
        at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class GLSurfaceView
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:698)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
        at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:256)
        at android.app.Activity.setContentView(Activity.java:1867)
        at fashizel.mizi.MyActivity.onCreate(MyActivity.java:14)
        at android.app.Activity.performCreate(Activity.java:5008)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)

Caused …
Run Code Online (Sandbox Code Playgroud)

android opengl-es glsurfaceview

4
推荐指数
1
解决办法
3166
查看次数

如何判断用户是否在屏幕上按住手指而不移动它?

我目前正在使用纯OpenGL以自己的方式绘制按钮.

我可以通过onTouchEvent检测按钮是否被按下,但是我想知道用户是按住按钮,还是用户不再触摸屏幕.

android touch surfaceview glsurfaceview

3
推荐指数
1
解决办法
2071
查看次数

如何在GLSurfaceView上强制调用onDrawFrame()?

我有一个UI,它有一个显示多边形的GLSurfaceView.

UI还有两个按钮ZoomIn和ZoomOut.当用户按下这些按钮时,将调用myGLSurfaceView的zoomIn()和zoomOut()方法.

问题是我希望调用onDrawFrame方法来反映放大和缩小.

我为什么要这个?因为按钮有setClickable(true); 为什么?因为我需要,如果用户离开手指按下按钮,则连续应用变焦,直到用户释放按钮.

现在它可以工作,但它工作不好,我需要刷新GLsurfaceview强制onDrawFrame

android opengl-es glsurfaceview

3
推荐指数
1
解决办法
7366
查看次数

如何在公共类上使用静态变量在活动之间传递数据?

我试图在公共类上使用静态变量来在活动之间传递它们.

我这样做有一个罕见的问题.我给活动上的静态变量赋值.此活动调用GLSurfaceView并侦听屏幕方向更改.

如果我给GLSurfaceView上的静态变量赋值,那么,一切正常,值存储,并且我可以在屏幕方向更改后再次调用onCreate方法时检索它们.

问题是当我将值存储在GLSurfaceView类之外的静态变量上时,在活动的onTouchListener方法中.这些值没有正确存储在静态变量上,因为当我尝试在GLSurfaceView上访问它们时,这些值并不是它们所支持的值.

这是我的静态变量类:

public class MagazineStatus {
//clase utilizada para almacenar variables estáticas.   
static int currentPage=1; //página actual   
//Valores originales cuando pasamos de un modo a otro, por ejemplo, de portrait a landscape.
static float oScale=0.0f;
static float oX=0.0f;
static float oY=0.0f;
static float oZrot=0;   
static boolean modeChanged=false; //indica si hemos cambiado de modo 
(landscape/portrait)    
}
Run Code Online (Sandbox Code Playgroud)

这里我将值存储在我的活动类中(我做了一个调试,显然它们正确存储):

        for (int i=0;i<thumbnailLinearLayouts.size();i++){
        final int auxIndex=i;
        thumbnailLinearLayouts.get(i).setOnTouchListener(new OnTouchListener(){
            @Override
            public boolean onTouch(View v, MotionEvent event) {

                MagazineStatus.currentPage=auxIndex;
                System.out.println("MagazineStatus.currentPage: "+MagazineStatus.currentPage);
                return true; …
Run Code Online (Sandbox Code Playgroud)

static android glsurfaceview android-activity

3
推荐指数
1
解决办法
5166
查看次数

GLSurfaceView在Nexus 5上出现帧率问题

我有一个示例应用程序(完整源代码),使用MediaCodec对相机帧进行编码,同时在GLSurfaceView上显示它们.

Systrace确认每秒进行30次绘图调用:

Systrace截图

但是,屏幕记录录制(.mp4,YouTube)显示明显的帧速率要低得多.

简而言之,我的编码和显示循环执行以下操作:

  • 使MediaCodec Surface输入EGL上下文当前
  • 将相机框架绘制到MediaCodec EGL表面
  • 使GLSurfaceView EGL上下文成为当前
  • 将相同的相框绘制到GLSurfaceView

在Galaxy Nexus LTE和Nexus 7(均采用AOSP 4.4)上,应用程序按预期执行.到目前为止,只有Nexus 5在屏幕上绘制的帧数与明显的帧数之间存在差异......

我祈祷我不是疯了.

android glsurfaceview mediacodec

3
推荐指数
1
解决办法
2595
查看次数

在捕获GLSurfaceView的屏幕截图时显示黑屏

我徘徊了七个小时来解决我的问题.我创建了一个项目,其中我使用GLSurfaceView,我已经设置了一个图像,然后我使用EffectFactory类实现了不同的效果.

但我的问题是,当我拍摄带有影响的图像的屏幕截图时,它总是显示为黑屏而不是图像.我知道这可能是因为SurFaceview.但是,如果有任何建议可能对我有帮助.

提前致谢.

这是我的代码.

public class EffectsFilterActivity extends Activity implements
    GLSurfaceView.Renderer {

private GLSurfaceView mEffectView;
private int[] mTextures = new int[2];
private EffectContext mEffectContext;
private Effect mEffect;
private TextureRenderer mTexRenderer = new TextureRenderer();
private int mImageWidth;
private int mImageHeight;
private boolean mInitialized = false;
int mCurrentEffect;

public void setCurrentEffect(int effect) {
    mCurrentEffect = effect;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.main);

    Button b = (Button) findViewById(R.id.button1);
    b.setOnClickListener(new OnClickListener() {

        @Override
        public …
Run Code Online (Sandbox Code Playgroud)

android screenshot glsurfaceview

3
推荐指数
1
解决办法
3793
查看次数

将相机渲染到多个表面 - 打开和关闭屏幕

我想将摄像机输出渲染到视图中,偶尔将摄像机输出帧保存到文件中,约束为 - 保存的帧应该与摄像机配置的分辨率相同,而视图小于相机输出(保持纵横比).

基于grafika中ContinuousCaptureActivity示例,我认为最好的方法是将摄像机发送到SurfaceTexture并通常渲染输出并将其缩小为a SurfaceView,并在需要时将整个帧渲染为不Surface具有视图的不同帧,以便按顺序排列从常规SurfaceView呈现并行检索字节缓冲区.

该示例与我的情况非常相似 - 预览呈现为较小尺寸的视图,可以通过a以全分辨率进行记录和保存VideoEncoder.

我用VideoEncoder自己的逻辑替换了逻辑,并试图提供Surface像编码器一样的全分辨率渲染.我该如何创建这样的Surface?我接近这个吗?


基于示例的一些代码构思:


surfaceCreated(SurfaceHolder holder)方法内(第350行):

@Override   // SurfaceHolder.Callback
public void surfaceCreated(SurfaceHolder holder) {
    Log.d(TAG, "surfaceCreated holder=" + holder);

    mEglCore = new EglCore(null, EglCore.FLAG_RECORDABLE);
    mDisplaySurface = new WindowSurface(mEglCore, holder.getSurface(), false);
    mDisplaySurface.makeCurrent();

    mFullFrameBlit = new FullFrameRect(
            new Texture2dProgram(Texture2dProgram.ProgramType.TEXTURE_EXT));
    mTextureId = mFullFrameBlit.createTextureObject();
    mCameraTexture = new SurfaceTexture(mTextureId);
    mCameraTexture.setOnFrameAvailableListener(this);

    Log.d(TAG, "starting camera preview"); …
Run Code Online (Sandbox Code Playgroud)

android surfaceview glsurfaceview android-camera

3
推荐指数
1
解决办法
2260
查看次数