标签: glsurfaceview

Android glSurfaceView,使用XML/Java进行叠加

我启动了一个Android OpenGL应用程序,我有以下类:

class A extends Activity
class B extends GlSurfaceView implements Renderer
Run Code Online (Sandbox Code Playgroud)

当调用类A的onCreate时,它会创建一个类B类的对象并调用:

setContentView(Bobject)
Run Code Online (Sandbox Code Playgroud)

到目前为止它工作,我花了几天时间.

现在我想在我的应用程序中添加按钮并找到SurfaceViewOverlay示例.这使用一些XML来创建视图层次结构.我想创建一些非常类似于我简单剪切和粘贴XML代码的东西:

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

    <LinearLayout android:id="@+id/hidecontainer"
            android:orientation="vertical"
            android:visibility="gone"
            android:background="@drawable/translucent_background"
            android:gravity="center"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            ...
Run Code Online (Sandbox Code Playgroud)

现在请记住我原来的类层次结构,如何初始化我的视图?我应该在A班的onCreate()中写什么?

我试过用:

Bobject = new B(this);
GLSurfaceView glSurfaceView =
        (GLSurfaceView) findViewById(R.id.glsurfaceview);
    glSurfaceView.setRenderer(Bobject);
Run Code Online (Sandbox Code Playgroud)

它确实在屏幕上绘制按钮和GL视图,但GL视图无法从点击/点击中获取任何输入.

这可能是因为Bobject的onTouchEvent()没有被调用,因为它只被用作:

Renderer
Run Code Online (Sandbox Code Playgroud)

而不是:

glSurfaceView
Run Code Online (Sandbox Code Playgroud)

宾语.

而不是上面的代码,我真正想要的是让Bobject取代glSurfaceView.但我不知道该怎么做.当我找到FindById()时,似乎已经创建了glSurfaceView.如何让它在GL视图中使用B类对象?

抱歉任何新手的错误.完全是Android新手.

编辑:我也试过这个:

我还尝试了以下内容:在我的XML文件中,我将GLSurfaceView更改为:

<com.bla.bla.B
            android:id="@+id/glsurfaceview"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
Run Code Online (Sandbox Code Playgroud)

在我的A类构造函数中,我调用:

// This returns null
Bobject = (B) findViewById(R.id.glsurfaceview);

// And this suspends the application. :(
setContentView(R.layout.surface_view_overlay);
Run Code Online (Sandbox Code Playgroud)

我应该如何使用我的XML文件/ Activity中扩展glSurfaceView的自定义类?

android button surfaceview glsurfaceview

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

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

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

    view = new GLSurfaceView(this);

    view.setEGLConfigChooser(8, 8, 8, 8, 16, 0);
    view.getHolder().setFormat(PixelFormat.TRANSLUCENT);

    view.setRenderer(new Level1Renderer(this));

    setContentView(R.layout.test);


    addContentView(view, new LayoutParams(100,400));
Run Code Online (Sandbox Code Playgroud)

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

        gl.glClearColor(0.0f, 0.0f, 0.0f, 0);
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我我要遗漏的东西吗?

transparency android overlay glsurfaceview

6
推荐指数
1
解决办法
5733
查看次数

使用GLSurfaceView进行缩放

我有以下问题 -

我正在开发一个应用程序,我决定使用GLSurfaceView,因为我需要openGl来获得更好,更自然的页面卷曲动画.

实现了这一点,现在我发现自己有点问题,因为我无法找到任何类型的教程来实现GLSurfaceView上的缩放缩放.我抓住了事件,手指之间的距离,比例等......但我不知道如何进行实际的转换.

我找到了一个通过矩阵转换ImageView,但唉......

有人在openGl中完成了缩放吗?

我认为没有必要发布代码,但如果它会帮助你回答,我会这么做.

android opengl-es glsurfaceview

6
推荐指数
1
解决办法
4959
查看次数

确定Android OpenGLES中的最大/最小纹理大小限制

我被指派创建这个Objective C GPUImage Framework的开源Java端口,以便它可以在Android应用程序中使用.我将尽可能地重新创建它,所有变量名称,函数名称等都是相同的.我正处于开始阶段,我正在尝试移植GPUImageOpenGLESContext.h和GPUImageOpenGLESContext.m(对不起,会提供链接,但作为新用户,我无法添加更多链接).

我对这些方法有困难

+ (GLint)maximumTextureSizeForThisDevice;
{
    GLint maxTextureSize; 
    glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTextureSize);
    return maxTextureSize;
}

+ (GLint)maximumTextureUnitsForThisDevice;
{
    GLint maxTextureUnits; 
    glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &maxTextureUnits);
    return maxTextureUnits;
}
Run Code Online (Sandbox Code Playgroud)

似乎在Objective C中,你可以简单地调用这些方法,但在Java中你不能.我做了一些搜索,发现大多数人都说使用GLSurfaceView,但这需要一个活动,对吗?当我在Android上发现这个获取最大OpenGL ES 2.0纹理大小限制时,我感到非常兴奋,但是响应声称代码不起作用.

所以,我的问题是,如何在不是活动的类中获得最小和最大纹理?使用GLSurfaceView?

我也很感激有关如何移植它的任何建议.我从来没有从Objective C移植到Java,所以任何建议都将不胜感激!

如果它会有所帮助,这是我目前的代码:

public class GPUImageOpenGLESContext 
{
    private static GPUImageOpenGLESContext instance = null;

    EGLContext context;

    protected GPUImageOpenGLESContext()
    {
        // This is a protected empty method
        // that exists only to prevent
        // this singleton object from
        // multiple instantiation

        return;
    }

    public enum GPUImageRotationMode …
Run Code Online (Sandbox Code Playgroud)

android opengl-es glsurfaceview android-activity

6
推荐指数
1
解决办法
3794
查看次数

如何在Android视图之间添加GLSurfaceView?

我正在使用Android -Sandwich类型的特殊UI,GLSurfaceView上的一个小GalleryView(带有透明区域)在背景View(LinearLayout +一些小部件)之上.这就是我想要设置它的方式:

<User>
Run Code Online (Sandbox Code Playgroud)

TOP View
--- GalleryView
|
--- GLSurfaceView(带透明区域)
|
--- LinearLayout(带小部件)
BOTTOM View

在常规模式下,GLSurfaceView在透明区域上有黑色背景,所以我看不到底层,但是当我使用setZOrderOnTop(true)时; 我可以看到底层,但顶层(图库)也落后于Glsurface视图.如何在模式中完成所需的视图?

XML code dummy示例(使用AnalogClock而不是GalleryView):

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/RelativeLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#920000"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/LinearLayout1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|right" >

        <AnalogClock
            android:id="@+id/analogClock2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>

    <com.test.CustomGlView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/gl_view"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

    <AnalogClock
        android:id="@+id/Gallery_dummyview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

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

android glsurfaceview android-layout

6
推荐指数
1
解决办法
1010
查看次数

eglCreateWindowSurface失败,出现java.lang.IllegalArgumentException

在启动某些活动期间尝试快速按下后退按钮时GLSurfaceView,eglCreateWindowSurface失败java.lang.IllegalArgumentException.

我收到以下错误:

10-08 18:05:36.490: E/GLSurfaceView(3440): eglCreateWindowSurface
10-08 18:05:36.490: E/GLSurfaceView(3440): java.lang.IllegalArgumentException: Make sure the SurfaceView or associated SurfaceHolder has a valid Surface
10-08 18:05:36.490: E/GLSurfaceView(3440): at com.google.android.gles_jni.EGLImpl._eglCreateWindowSurface(Native Method)
10-08 18:05:36.490: E/GLSurfaceView(3440): at com.google.android.gles_jni.EGLImpl.eglCreateWindowSurface(EGLImpl.java:90)
10-08 18:05:36.490: E/GLSurfaceView(3440): at android.opengl.GLSurfaceView$DefaultWindowSurfaceFactory.createWindowSurface(GLSurfaceView.java:798)
10-08 18:05:36.490: E/GLSurfaceView(3440): at android.opengl.GLSurfaceView$EglHelper.createSurface(GLSurfaceView.java:1065)
10-08 18:05:36.490: E/GLSurfaceView(3440): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1433)
10-08 18:05:36.490: E/GLSurfaceView(3440): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1216)
Run Code Online (Sandbox Code Playgroud)

这些活动未在之前SurfaceHolder.Callback.surfaceCreated或之后调用GL操作SurfaceHolder.Callback.surfaceDestroyed.

有没有其他人遇到这个问题,解决方案是什么?

谢谢你的任何进步.

android opengl-es glsurfaceview opengl-es-2.0

6
推荐指数
1
解决办法
6833
查看次数

GLSurfaceView onDrawFrame清除行为

我使用GLSurfaceView遇到了不同的行为.AFAIK是程序的责任,清除每帧的缓冲区(颜色和深度).这意味着如果我不清除缓冲区,我会得到最后一帧的内容(或者之前用于双缓冲的内容).

似乎无论在某些设备上是什么,缓冲区都被清除了.我在Addison Wesley OpenglES2.0编程指南中对一些具有不同结果的测试设备进行了"Hello Triangle"程序的以下修改:

  • Acer Iconia A500(4.0.3):清除(预期行为)
  • Sony XPERIA Go(4.0.4):已清除
  • Galaxy S3(4.1.1):清除
  • LG Optimus 4x HD(4.0.3):清除
  • 三星Galaxy Tab 20.1(4.0.4):清除
  • 摩托罗拉Xoom(3.2):清除
  • Galaxy S2(4.1.2 - rooted):清除

有没有办法强制在每个绘制回调中获得一个未更改的缓冲区?

清除屏幕的设备的结果如下所示: 清除屏幕 未清除的屏幕 - 预期的行为

测试活动如下所示:

package com.example.glcleartest;

import java.nio.Buffer;
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.opengl.GLES20;
import android.opengl.GLSurfaceView;
import android.opengl.GLSurfaceView.Renderer;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;

public class MainActivity extends Activity {

protected static final int NUM_VERTICES = 3;

@Override
protected void onCreate(Bundle savedInstanceState) …
Run Code Online (Sandbox Code Playgroud)

android opengl-es glsurfaceview opengl-es-2.0

6
推荐指数
1
解决办法
2415
查看次数

是否可以在回收站视图中使用GPUImageView/GLSurfaceview?

我正在制作照片编辑应用程序.我正在使用GPUImageView来应用效果.我想在回收器视图中显示具有不同不同效果的多个缩略图大小的图像,以便用户了解应用该效果后图像的外观.

android glsurfaceview android-gpuimageview

6
推荐指数
1
解决办法
595
查看次数

GLSurfaceView 生命周期方法 onPause() 和 onResume()

我正在尝试在我的应用程序中正确使用 OpenGL,但在使用 Lifecycle Methods:onPause()onResume().

文件指出:

活动生命周期

当活动暂停和恢复时,必须通知 GLSurfaceView。GLSurfaceView 客户端需要在活动暂停时调用 onPause(),在活动恢复时调用 onResume()。这些调用允许 GLSurfaceView 暂停和恢复渲染线程,还允许 GLSurfaceView 释放和重新创建 OpenGL 显示。

所有我的第一略有困惑,onPause()onResume()为整个Android的,生命周期事件,其余为所谓的由系统(活动/片段)。在这里,从描述(包括onPause()onResume() 中的详细描述)来看,它们似乎必须由开发人员手动调用。

我一直在使用,GLSurfaceView 没有打电话onPause()onResume()没有发现问题。但是,为了打球(并减少恢复活动时奇怪行为的可能嫌疑人),我试图按照文档中的描述将它们添加进来。

然而,似乎使用 onResume() 会导致NullPointerException抛出 a:

07-23 13:20:08.570: E/AndroidRuntime(20777): Caused by: java.lang.NullPointerException
07-23 13:20:08.570: E/AndroidRuntime(20777):    at android.opengl.GLSurfaceView.onResume(GLSurfaceView.java:544)
07-23 13:20:08.570: E/AndroidRuntime(20777):    at com.ActivityNameHere.onResume(ActivityNameHere.java:151)
Run Code Online (Sandbox Code Playgroud)

是否有一个步骤我失踪注册ActivityView

android opengl-es glsurfaceview

5
推荐指数
1
解决办法
4523
查看次数

在具有高刷新率 (90-120Hz) 的新 Android 设备上将 SurfaceView 的刷新率限制为 60 FPS

我在具有 90Hz 和 120Hz 屏幕的新 Android 设备(例如 Samsung S20 FE)上面临着增加甚至翻倍的 FPS,它影响了我基于GLSurfaceView(OpenGL 实现SurfaceView)开发的游戏。最初它总是以每秒 60 帧的最高速度运行,但现在在一些新的 Android 设备上似乎一直达到 90 甚至 120 FPS,这使得游戏无法玩。将屏幕刷新率限制或限制在最大 60Hz 的最佳且可靠的解决方案是什么?

android frame-rate surfaceview glsurfaceview

5
推荐指数
0
解决办法
1910
查看次数