Android OpenGLES 渲染到纹理

2024-05-08

我为 iPhone 编写图形应用程序,并且希望将我最新的应用程序“Layers”移植到 Android 平台。 Layers 是一款绘画应用程序,允许用户在屏幕上绘画并使用不同的画笔、颜色等创建多层绘画......并导出到 PSD。它有桌面同步、涂抹工具、很多好东西......http://www.layersforiphone.com/ http://www.layersforiphone.com/

我周一开始研究 Android 平台,遇到了一个大问题。我使用 OpenGL 来完成所有绘图,因为它提供了最佳性能。然而,有几个地方我需要渲染成纹理然后使用该纹理。例如:

  1. 使用画笔纹理和精灵线在纹理 A 中创建黑色绘画描边
  2. 将笔刷颜色+alpha放入glColor4f中,然后将纹理A绘制到屏幕上。

在 iPhone 上,我随着用户手指的移动不断地执行此操作,并且在第一代 iPod Touch 上我能够达到 12-15fps。这是必要的,因为将颜色和 Alpha 应用于构成画笔描边的各个精灵不会产生正确的结果(因为精灵重叠并使描边太暗)。

Android 平台支持 OpenGL ES 1.0,但似乎省略了处理帧缓冲区的关键函数。我找不到将纹理绑定到帧缓冲区并使用 OpenGL 绘制到其中的方法。

以下是我通常在 iPhone 上进行操作的方法:

// generate a secondary framebuffer and bind it to OpenGL so we don't mess with existing output.
glGenFramebuffers(1, &compositingFramebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, compositingFramebuffer);

// attach a texture to the framebuffer.
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);

// subsequent drawing operations are rendered into the texture

// restore the primary framebuffer and (possibly) draw the rendered texture
glBindFramebuffer(GL_FRAMEBUFFER, originalActiveFramebuffer);

Android平台上有类似的东西吗?在 iPhone 上,OpenGL 比基于软件的绘图要快得多,并且是唯一可行的解​​决方案(相信我 - 我也编写了一个 CoreGraphics 绘图应用程序......)。也许我可以在 Android 上采取另一条路线?我愿意克服任何必要的困难,但除非性能达到要求,否则我不会发布该应用程序good(当您在屏幕上绘图时为 10fps+)。


我怀疑所有 Android 设备是否都支持完全相同的 OpenGL ES 扩展集,或者它们都支持完全相同的 OpenGL ES 版本。

帧缓冲对象 (FBO) 是 OpenGL ES 2.0 核心规范的一部分;如果您的 Android 设备支持 ES 2.0,则它支持 FBO。

如果您的 Android 设备支持 ES 1.1,请检查扩展字符串GL_OES_framebuffer_object using glGetString(GL_EXTENSIONS).

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

Android OpenGLES 渲染到纹理 的相关文章

随机推荐

  • 如何从数据表中设置 DataGridViewComboBoxColumn 中的值?

    DataGridViewComboBoxColumn dgvcb DataGridViewComboBoxColumn grvPackList Columns Units Globals G ProductUtility G Utility
  • 从成员函数返回枚举

    我想实现返回枚举的函数 class myClass private res res public enum res ok fail res getRes bool checkRes res r other function that cha
  • 无法将参数值从字符串转换为小数?

    我有一个像这样的存储过程 ALTER PROCEDURE dbo usp CSR UpdateDailyCustomerWithLCDHistory Add the parameters for the stored procedure h
  • 参考当前命令的先前参数

    例如 我想执行以下操作 mv xxxx xxxx bak 我知道我可以使用这个命令 mv xxxx bak 我认为这在某种程度上并不直接 如果我能做到这一点那就太好了 mv xxxx 1 bak 有时我需要这样 echo xxxx yyyy
  • 带有电子墨水显示屏的 Android

    我有兴趣使用 AndroidE Ink http www eink com technology howitworks html为基础的平台 我知道已经是证明了 http vimeo com 3162590MOTO 曾经使用过 但我有兴趣将
  • 如何在 AngularJS 初始化之前防止元素显示( ng-show )

    在AngularJS中 我想知道如何防止在ng show生效之前页面上显示的元素 我发现一些帖子谈论ng cloak 但在我的情况下似乎不起作用 可能ng cloak是为了防止双花括号而不是 Element 样式 有人谈论的另一种方式是在
  • 如何将 JUnit 5 与 Gradle 结合使用?

    在成功运行 JUnit 4 测试后 我尝试将 JUnit 5 与 Gradle 一起使用 预期结果 JUnit 4 测试在输出中给出了很好的 通过 结果 并在build reports tests 实际结果 下面的 JUnit 5 测试不输
  • 如何在前端和后端之间共享javascript代码(ES6)

    这是 ES6 特定的副本这个所以线程 https stackoverflow com questions 3225251 how can i share code between node js and the browser 其中详细介绍
  • MySQL 一起使用 LIKE、AND、OR

    我正在创建一个搜索功能来搜索一些图片 每张图片都有一个状态 表示它是被批准还是被拒绝 mysql 在返回之前检查状态 但是它仍然返回不应该返回的图像 这是我的查询 SELECT FROM Pictures WHERE ImageTitle
  • Jenkins - Xcode 构建工作协同设计失败

    下面是我的构建脚本 不使用 xcodebuild 插件 构建步骤工程 我使用所需的证书和私钥创建了一个单独的钥匙串 它们在钥匙串访问中可见 脚本中的钥匙串命令不会失败 安全列表钥匙串将这些显示为有效的钥匙串 它的表现就像解锁命令并未真正成功
  • (无限?)JavaScript 代码中的循环

    我有以下 JavaScript 代码来在网站上 显示 XML function createChild node tabindex var child node childNodes var r var tabs for i 0 i
  • 傅里叶变换定理 matlab

    我目前正在尝试理解二维傅里叶位移定理 根据我到目前为止所了解到的情况 图像空间中的平移会导致相位差异 但不会导致频率空间中的幅度差异 我试图用一个小例子来演示这一点 但它只适用于行的移位 而不适用于列的移位 这是一个小演示 我只在这里显示幅
  • 为什么.NET中的每个类都继承自Object?

    我不明白 为什么他们需要一个共同的基础 这个问题预设了一个谎言 他们不need一个共同的基础类型 这个选择并不是出于必要 这是出于为客户提供最佳价值的愿望 当设计类型系统或任何其他相关问题时 有时您会遇到决策点 您必须决定 X 或非 X 公
  • Clojure Web 应用程序 - 我从哪里开始?

    最近我一直在研究 Clojure 我喜欢这门语言 我想看看我是否可以在其中制作一个小型网络应用程序 只是为了挑战自己 但是 我完全没有设置任何与 Java 相关的 Web 应用程序的经验 事实上 我对 Java 并没有太多的经验 我从哪说起
  • spring启动时如何加载@Cache?

    我正在使用 spring cache 来改进数据库查询 其工作原理如下 Bean public CacheManager cacheManager return new ConcurrentMapCacheManager books Cac
  • MongoDB - 解释特定的解释输出

    我使用的是 MongoDB 版本 2 4 8 test 2014 03 25 14 42 13 0 gt gt gt db users getIndexes v 1 key id 1 ns test users name id v 1 ke
  • 如何以编程方式在导航栏中设置图片?

    我有一个带有导航栏的详细视图 其中带有后退按钮和视图名称 导航栏以编程方式设置 呈现的名称是这样设置的 self title NSLocalizedString name 该名称取决于所呈现的视图 现在我还想在导航栏上显示一个小图标 这也取
  • 使用简单的 ActionFilterAttribute 运行时出错

    开始编写一个简单的过滤器 从每个操作加载的请求中提取一些内容 从其他 stackoverflow 复制一些代码 如下所示 public class TestKeyAttribute ActionFilterAttribute public
  • Visual Studio 2015 RC:Android 模拟器:安装程序失败。 (代码:1603)

    当我安装 Microsoft Visual Studio 2015 Professional RC 时 出现以下错误 适用于 Android 的 Microsoft Visual Studio 模拟器 安装程序失败 安装过程中发生致命错误
  • Android OpenGLES 渲染到纹理

    我为 iPhone 编写图形应用程序 并且希望将我最新的应用程序 Layers 移植到 Android 平台 Layers 是一款绘画应用程序 允许用户在屏幕上绘画并使用不同的画笔 颜色等创建多层绘画 并导出到 PSD 它有桌面同步 涂抹工