Android ndk 上 OpenGLES 1.1 中具有 GLSurfaceView 模式的 FrameBuffer

2023-12-08

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

我正在尝试使用以下方法创建它们:

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);
}

然而,这似乎没有适当地获取上下文,我认为这是在初始化 GLSurfaceView 和渲染器(java 端)时创建的。

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


绝对没错。标准方法是您创建一个GLSurfaceView就像您在 Java 中使用 OpenGL 一样,创建并连接您的GLSurfaceView.Renderer实现,并让渲染线程启动。

从你的Renderer方法,例如onSurfaceCreated() and onDrawFrame(),您现在可以调用 JNI 函数来调用本机代码中的函数。在这些本机函数中,您可以根据需要进行任何 OpenGL API 调用。例如,在您调用的函数中onSurfaceCreated()您可以创建一些对象并设置一些初始状态。在您调用的函数中onSurfaceChanged(),您可以设置视口和投影。在您调用的函数中onDrawFrame(),您进行渲染。

您甚至可以从 Java 和本机代码进行 OpenGL 调用。 Java OpenGL API 只是围绕本机函数的一个非常薄的层。无论是从本机代码还是通过 Java API 调用这些函数,都没有什么区别。

您唯一需要注意的是您调用all您的本机代码从GLSurfaceView.Renderer的实施onSurfaceCreated(), onSurfaceChanged() and onDrawFrame()。当这些方法被调用时,您处于渲染线程中,并且拥有当前的 OpenGL 上下文。如果从其他任何地方调用本机 OpenGL 代码,则很可能您处于错误的线程中和/或没有当前的 OpenGL 上下文。

当然,还有更复杂的设置,您可以创建自己的 OpenGL 上下文,显式地将它们设置为当前上下文,等等。但我强烈建议您坚持使用上面的简单方法,除非您有充分的理由需要更多东西。对于大多数标准 OpenGL 渲染,我所描述的应该已经足够了。

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

Android ndk 上 OpenGLES 1.1 中具有 GLSurfaceView 模式的 FrameBuffer 的相关文章

  • 如何验证文件名称在 Windows 中是否有效?

    是否有一个 Windows API 函数可以将字符串值传递给该函数 该函数将返回一个指示文件名是否有效的值 我需要验证文件名是否有效 并且我正在寻找一种简单的方法来完成此操作 而无需重新发明轮子 我正在直接使用 C 但针对的是 Win32
  • 从父类调用子类方法

    a doStuff 方法是否可以在不编辑 A 类的情况下打印 B did stuff 如果是这样 我该怎么做 class Program static void Main string args A a new A B b new B a
  • 如何在列表框项目之间画一条线

    我希望能够用水平线分隔列表框中的每个项目 这只是我用于绘制项目的一些代码 private void symptomsList DrawItem object sender System Windows Forms DrawItemEvent
  • C++ 子字符串返回错误结果

    我有这个字符串 std string date 20121020 我正在做 std cout lt lt Date lt lt date lt lt n std cout lt lt Year lt lt date substr 0 4 l
  • 实时服务器上的 woff 字体 MIME 类型错误

    我有一个 asp net MVC 4 网站 我在其中使用 woff 字体 在 VS IIS 上运行时一切正常 然而 当我将 pate 上传到 1and1 托管 实时服务器 时 我得到以下信息 网络错误 404 未找到 http www co
  • 将布尔参数传递给 SQL Server 存储过程

    我早些时候问过这个问题 我以为我找到了问题所在 但我没有 我在将布尔参数传递给存储过程时遇到问题 这是我的 C 代码 public bool upload false protected void showDate object sende
  • 为什么#pragma optimize("", off)

    我正在审查一个 C MFC 项目 在某些文件的开头有这样一行 pragma optimize off 我知道这会关闭所有以下功能的优化 但这样做的动机通常是什么 我专门使用它来在一组特定代码中获得更好的调试信息 并在优化的情况下编译应用程序
  • 在 Visual Studio 2008 上设置预调试事件

    我想在 Visual Studio 中开始调试程序之前运行一个任务 我每次调试程序时都需要运行此任务 因此构建后事件还不够好 我查看了设置的 调试 选项卡 但没有这样的选项 有什么办法可以做到这一点吗 你唯一可以尝试的 IMO 就是尝试Co
  • Json.NET - 反序列化接口属性引发错误“类型是接口或抽象类,无法实例化”

    我有一个类 其属性是接口 public class Foo public int Number get set public ISomething Thing get set 尝试反序列化Foo使用 Json NET 的类给我一条错误消息
  • Web API - 访问 DbContext 类中的 HttpContext

    在我的 C Web API 应用程序中 我添加了CreatedDate and CreatedBy所有表中的列 现在 每当在任何表中添加新记录时 我想填充这些列 为此目的我已经覆盖SaveChanges and SaveChangesAsy
  • 在 ASP.NET Core 3.1 中使用包含“System.Web.HttpContext”的旧项目

    我们有一些用 Net Framework编写的遗留项目 应该由由ASP NET Core3 1编写的API项目使用 问题是这些遗留项目正在使用 System Web HttpContext 您知道它不再存在于 net core 中 现在我们
  • 在数据库中搜索时忽略空文本框

    此代码能够搜索数据并将其加载到DataGridView基于搜索表单文本框中提供的值 如果我将任何文本框留空 则不会有搜索结果 因为 SQL 查询是用 AND 组合的 如何在搜索 从 SQL 查询或 C 代码 时忽略空文本框 private
  • 将自定义元数据添加到 jpeg 文件

    我正在开发一个图像处理项目 C 我需要在处理完成后将自定义元数据写入 jpeg 文件 我怎样才能做到这一点 有没有可用的图书馆可以做到这一点 如果您正在谈论 EXIF 元数据 您可能需要查看exiv2 http www exiv2 org
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • 32 位到 64 位内联汇编移植

    我有一段 C 代码 在 GNU Linux 环境下用 g 编译 它加载一个函数指针 它如何执行并不重要 使用一些内联汇编将一些参数推送到堆栈上 然后调用该函数 代码如下 unsigned long stack 1 23 33 43 save
  • 为什么 C# Math.Ceiling 向下舍入?

    我今天过得很艰难 但有些事情不太对劲 在我的 C 代码中 我有这样的内容 Math Ceiling decimal this TotalRecordCount this PageSize Where int TotalRecordCount
  • mysql-connector-c++ - “get_driver_instance”不是“sql::mysql”的成员

    我是 C 的初学者 我认为学习的唯一方法就是接触一些代码 我正在尝试构建一个连接到 mysql 数据库的程序 我在 Linux 上使用 g 没有想法 我运行 make 这是我的错误 hello cpp 38 error get driver
  • 使用 libcurl 检查 SFTP 站点上是否存在文件

    我使用 C 和 libcurl 进行 SFTP FTPS 传输 在上传文件之前 我需要检查文件是否存在而不实际下载它 如果该文件不存在 我会遇到以下问题 set up curlhandle for the public private ke
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我

随机推荐

  • ParseException:无法解析的日期:

    我有像 2015 07 13T10 44 58Z 这样的时间戳字符串 当我尝试将其转换为日期对象时 它总是会生成异常 Caused by java text ParseException Unparseable date 2015 07 1
  • Apriori 算法未显示结果

    我正在使用 Python 进行购物篮分析 当我执行此代码时 它仅显示列名称 没有任何结果 frequent tr apriori data tr min support 0 05 这是删除的数据集 我已经调整了 min support 值
  • 线性回归上的 R 循环

    我浏览了论坛 但找不到我要找的东西 我想运行几次简单的线性回归 每次使用不同的列作为自变量时 因变量保持不变 运行后 我希望能够从每个回归中提取 R 平方 我的思考过程是使用一个简单的 for 循环 但是 我无法让它发挥作用 假设我使用以下
  • 如何根据提供的最小和最大字符范围在 Javascript 中生成随机数

    我有一个有点奇怪的要求 我需要生成用户给出的长度的随机数 用户可以给Minimum Length和Maximum Length我需要生成由该范围之间的字符长度组成的随机数 例如 如果Minimum Length is 6 and Maxim
  • 将 sympy 表达式分解为矩阵系数?

    我试图勤奋地查看文档 但一无所获 我正在尝试将表达式中的项分解或消除为矩阵形式 我的问题似乎与多项式因式分解不同 因为我计划实现一个函数phi x y z a 1 a 2 x a 3 y a 4 z import sympy from sy
  • 缓存控制失败

    我的 index php 页面不断被缓存 显示旧的计时器值和其他值 即使我正在使用这个 session cache limiter nocache session start header Cache Control no cache mu
  • Jquery 中的 XML 解析

    我有一个 XML 文件 其中有四个
  • 如何使用特定的TaskScheduler使TaskCompletionSource.Task完成

    怎样才能完成TaskCompletionSource Task发生在特定的TaskScheduler 当我打电话时TaskCompletionSource SetResult 目前 我正在使用我借用的想法这个帖子 static public
  • 如何使用批处理(.bat)脚本在给定行号的情况下删除文本文件的一行?

    我想编写一个批处理脚本 用户可以在其中输入行号 脚本将删除文本文件的该行 例如 tmp txt 1 aaa 2 bbb 3 ccc 4 ddd 我希望当我执行我的脚本和用户输入 3 时 tmp txt 是 1 aaa 2 bbb 4 ddd
  • Rails - 使用复选框选择多个对象并选择要执行的操作

    我希望能够为对象列表创建复选框 然后向用户提供对所选对象执行的许多操作 IE 删除 存档等 我知道 ryan 的截屏视频 但它没有解释如何为所选对象创建多个操作的链接 它只是显示他创建一个 form tag 其中包含一个操作的 url 和一
  • 在非托管 C++ 程序中实现 C# DLL COM 文件

    这是我的另一个问题 也导致了这个问题作为参考 如何从非托管 C 调用托管 C 方法 我已成功创建 C COM 文件 现在我需要一个关于如何在非托管 C 中实现它的简单解释 我正在遵循这个示例 但 C 部分很弱 http www codepr
  • JTextField 的值更改侦听器

    我希望在用户更改文本字段中的值后立即显示消息框 目前 我需要按 Enter 键才能弹出消息框 我的代码有什么问题吗 textField addActionListener new java awt event ActionListener
  • 如何在我的汇编代码中调用 C++ 函数

    我需要从程序集中调用 PrintResult 来显示结果 我知道我必须在某处使用 extrn PrintResult 并且我应该使用 call PrintResult 来调用该函数 但我不太确定如何使用它 有什么建议 public Squa
  • NSAttributedString 的boundingRectWithSize 返回错误的大小

    我试图获取属性字符串的矩形 但boundingRectWithSize调用不考虑我传入的大小 并且返回一个具有单行高度的矩形 而不是一个大高度 它是一个长字符串 我已经尝试过传递一个非常大的高度值和 0 如下面的代码所示 但返回的矩形始终是
  • 如何在页面关闭时执行 PHP 代码?

    我试图找到一种方法来在用户关闭页面后执行一些 PHP 代码 在我的应用程序中 一旦用户关闭或导航离开页面 服务器就会在数据库中将用户状态为 离线 这需要代码知道用户何时离开页面 我的应用程序也有无限的负载 即它将休眠直到用户关闭页面 当用户
  • 使用 Gulp 来连接和 Uglify 文件

    我正在尝试使用 Gulp 来 获取 3 个特定的 javascript 文件 将它们连接起来 然后将结果保存到文件中 concat js 获取这个串联文件并对其进行 uglify minify 然后将结果保存到另一个文件 uglify js
  • 从 Jenkins 管道并行步骤收集数据

    从并行步骤收集数据 例如通过 失败结果 的最佳方法是什么 到目前为止我已经达到了什么 groovy def fspam name spam spam name BEEN THERE TOO pipeline node slave stage
  • Spring Boot Application.properties 没有自动完成建议

    我是 Spring Boot 初学者 我使用 spring 初始化程序创建了一个示例项目 在 application properties 中我想更改服务器 端口但编辑器不知道 什么都不知道 有什么问题 IntelliJ IDEA 社区版不
  • 使用 es6 或 lodash 将字符串数组转换为对象数组

    我有一个字符串数组 我想将其转换为对象数组 array a b c 我想生成 array name a isChecked false availibility 0 name b isChecked false availibility 0
  • Android ndk 上 OpenGLES 1.1 中具有 GLSurfaceView 模式的 FrameBuffer

    在 Android NDK 中 是否可以使 OpenGL ES 1 1 使用典型的 java 端 GLSurfaceView 模式 覆盖 GLSurfaceView Renderer onDrawFrame onSurfaceCreated