Android OpenGL ES 2:如何在主活动中使用 OpenGL 活动作为片段

2024-02-22

我对 Android 和 OpenGL ES 还很陌生。我必须在 OpenGL 中创建一个 GUI,并且我想将其用作Fragment在主要活动中。为了学习如何做到这一点,我尝试了 2 个教程 -这个片段教程 http://www.techotopia.com/index.php/Using_Fragments_in_Android_-_A_Worked_Example and 有关 OpenGL ES 的 Android 开发人员教程 http://developer.android.com/training/graphics/opengl/index.html.

但我仍然不明白如何将 OpenGL 视图包含在Fragment。 OpenGL 不使用 XML 布局文件,因此这个过程对我来说相当混乱。我想做这样的事情:在主要活动中Fragment我想包括第三个教程Fragment与OpenGL。对我放轻松,我是初学者:)


如果可以参考开发人员教程,那么以下设置将起作用:

活动:

public class MainActivity extends FragmentActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        getSupportFragmentManager().addOnBackStackChangedListener(new OnBackStackChangedListener()
        {
            public void onBackStackChanged()
            {
                int backCount = getSupportFragmentManager().getBackStackEntryCount();
                if (backCount == 0)
                {
                    finish();
                }
            }
        });

        if (savedInstanceState == null)
        {
            getSupportFragmentManager().beginTransaction().add(R.id.main_container, new OpenGLFragment()).addToBackStack(null).commit();
        }
    }
}

活动 XML (activity_main.xml):

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

分段:

public class OpenGLFragment extends Fragment
{ 
    private GLSurfaceView mGLView;

    public OpenGLFragment()
    {
        super();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        mGLView = new MyGLSurfaceView(this.getActivity()); //I believe you may also use getActivity().getApplicationContext();
        return mGLView;
    }
}

我想你需要按照教程所述制作自己的 GLSurfaceView:

class MyGLSurfaceView extends GLSurfaceView {

    public MyGLSurfaceView(Context context){
        super(context);
        setEGLContextClientVersion(2);    
        // Set the Renderer for drawing on the GLSurfaceView
        setRenderer(new MyRenderer());

    }
}

正如教程所说,让你的渲染器:

public class MyGLRenderer implements GLSurfaceView.Renderer {

    public void onSurfaceCreated(GL10 unused, EGLConfig config) {
        // Set the background frame color
        GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    }

    public void onDrawFrame(GL10 unused) {
        // Redraw background color
        GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
    }

    public void onSurfaceChanged(GL10 unused, int width, int height) {
        GLES20.glViewport(0, 0, width, height);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android OpenGL ES 2:如何在主活动中使用 OpenGL 活动作为片段 的相关文章

随机推荐

  • 当我可以直接访问IP时,为什么还需要xip io?

    xip io 欢迎屏幕显示如下 10 0 0 1 xip io 解析为 10 0 0 1 我可以直接使用IP 为什么还要经过xip io呢 是用域名而不是IP来访问服务器吗 主要用例是当您的应用程序需要支持多个子域时 以这些生产子域为例 w
  • 在 VIM 中处理大文件

    我尝试在 VIM 中打开一个巨大的 2GB 文件 但它被卡住了 我实际上不需要编辑文件 只需高效地跳转即可 我如何在 VIM 中处理非常大的文件 我今天有一个 12GB 的文件需要编辑 vim LargeFile 插件对我不起作用 它仍然耗
  • Laravel 迁移:类“未找到”

    我正在将 Laravel 准系统项目部署到 Microsoft Azure 但是每当我尝试执行php artisan migrate我收到错误 2015 06 13 14 34 05 production ERROR 异常 Symfony
  • 如何在不使用第三方网关服务的情况下设置 Kannel

    我想设置 Kannel 来发送 SMS 消息 而无需通过 Clickatell 或 Twilio 等第三方网关 换句话说 我想连接到每个无线服务 AT T Verizon 等 的 SMPP 服务器 以这种方式运行 Kannel 服务器有多困
  • CMake 不支持工具集规范

    我正在尝试构建使用 CMake 的 Checked C 项目 但是当我生成 makefile CMake 时出现以下错误 checkedc build cmake llvm CMake Error at CMakeLists txt 57
  • 在 python 中使用 selenium 将密钥发送到文本区域不起作用

    我试图通过制作一个机器人来学习硒 该机器人可以访问 Instagram 帐户并对帖子发表评论 这是我的代码 from selenium import webdriver from selenium webdriver common keys
  • aarch64;加载获取独占与加载独占

    有什么区别LDAXR LDXRAArch64 指令集之外的指令 从参考手册来看 它们看起来完全相同 获取 一词除外 LDAXR 加载获取独占寄存器 从按基址寻址的存储器加载字到Wt 将物理地址记录为独占访问 LDXR 加载独占寄存器 从内存
  • 如何 mod_rewrite 并保留查询字符串?

    我想将 URL mod rewrite 到另一个页面 但我还希望保留添加的任何查询字符串 RewriteEngine On enforce trailing slashes RewriteCond REQUEST FILENAME f Re
  • java中处理外部库的正确方法(使用eclipse)

    在某种程度上 这是我之前未回答的问题的后续 link https stackoverflow com questions 3238644 adding user defined libraries to svn 在过去的几周里不断升级 现在
  • 为什么memcached不能跨节点同步

    在memcached概述中here http code google com p memcached wiki NewOverview It says Memcached servers are generally unaware of e
  • 如何在 Angular-CLI 组件内使用电子浏览器窗口?

    Angular cli 不接受组件内部的电子 如何在 Angular CLI 组件内使用电子浏览器窗口 我收到这样的错误 fs existsync 还有其他选项可以将电子与 Angular2 组件一起使用吗 var electron req
  • DeadlineExceededException 在 Google App Engine for Java 中是如何实现的?

    应用程序于谷歌应用引擎 http appengine google com 必须有在 30 秒内返回响应数据的 Web 请求 当超过这个时间时 DeadlineExceededException抛出异常 time jsp java lang
  • 如何获取专为Android设备设计的前后摄像头的百万像素?

    如何使用Android代码识别Android设备的前后摄像头的百万像素 我尝试过 CameraInfo 但没有获得百万像素 例如 为了识别我们正在使用的设备型号android os Build MODEL 同样 任何识别前置和后置摄像头百万
  • 反应材料表自动页面大小

    我正在使用 React Material Table 我有问题 有没有办法动态设置pageSize https material table com docs all props基于页面上的可用空间 如果没有 API 可以做到这一点 如何从
  • FirestoreRecyclerAdapter 不更新视图

    我正在使用 FirestoreRecyclerAdapter 并遇到了问题 Query query db collection SOME COLLECTION whereEqualTo key key orderBy dueDate 如果我
  • 让嵌入式闪存自动播放

    我真的很困惑这怎么行不通 但视频由于某种原因无法自动启动 我做错了什么吗 嵌入的代码用于 Flash 播放
  • 从 Chrome 扩展获取唯一的 ClientID?

    我正在开发 chrome 扩展 我需要能够将每个客户识别为独特的客户 我无法将 guid 存储在 cookie 中 因为 cookie 可以被删除 我需要从系统本身读取一些独特的东西 现在 我知道 JS 无法访问客户端资源 本地资源 但是
  • NextJS - ReactDOMServer 尚不支持 Suspense

    我目前正在尝试将加载器组件合并到使用 NextJS 构建的网站中 我想使用 Suspense 显示加载屏幕 可能是在刷新页面或更改路线后 我的代码是这样的 import Head from next head import Loader f
  • 为什么具有终结器的对象即使没有根也不会被收集?

    我遇到了可终结对象的问题 该对象未被收集GC if Dispose 没有被明确调用 我知道我应该打电话Dispose 显式地如果一个对象实现IDisposable 但我一直认为依赖框架是安全的 当一个对象变得未被引用时 它可以被收集 但经过
  • Android OpenGL ES 2:如何在主活动中使用 OpenGL 活动作为片段

    我对 Android 和 OpenGL ES 还很陌生 我必须在 OpenGL 中创建一个 GUI 并且我想将其用作Fragment在主要活动中 为了学习如何做到这一点 我尝试了 2 个教程 这个片段教程 http www techotop