webgl unity_Unity WebGL中的低级插件

2023-11-08

webgl unity

Last year we launched a series of technical blog posts on WebGL, starting with a couple of posts on memory. Now it’s time to continue with a new topic. Have you ever needed/wanted to re-use existing C/C++ code in a web page? Perhaps a graphics effect written in OpenGL ES? With Unity WebGL there is a way!

去年,我们在WebGL上发布了一系列技术博客文章,从内存中的几篇文章开始。 现在是时候继续一个新主题了。 您是否曾经需要/想要重复使用网页中的现有C / C ++代码? 也许是用OpenGL ES编写的图形效果? 有了Unity WebGL,就有了一种方法!

Unity supports two types of plugins: managed and native. On WebGL, managed plugins are supported like on other platforms. The only difference is that the managed assembly of the plug-in is converted, along with the engine and user’s managed code, to JavaScript (asm.js/wasm to be specific).

Unity支持两种类型的插件 :托管和本机。 与其他平台一样, 在WebGL上 也支持 托管插件 。 唯一的区别是,插件的托管程序集与引擎和用户的托管代码一起转换为JavaScript(具体来说为asm.js / wasm)。

What about native plugins? Does it even make sense to talk about something “native” on the web? When referring to native as something specific to the underlying architecture (mac, win32/64, etc.), it certainly does not. However, Unity WebGL does support several other types of plugins: JavaScript, C/C++ and pre-compiled LLVM byte code.

本机插件 呢? 在网络上谈论“本机”甚至有意义吗? 当将native称为特定于基础架构的东西(mac,win32 / 64等)时,它当然不是。 但是,Unity WebGL确实支持其他几种类型的插件:JavaScript,C / C ++和预编译的LLVM字节码。

In the Unity User Manual, there are a couple of examples of both JavaScript and C plugins that demonstrate how to interact with them via scripts. So, since we can use C/C++ sources, what’s stopping us from accessing the Low-Level plugin interface for rendering purposes? Well… nothing in Unity 5.5 ;-)

在Unity 用户手册中 ,有两个JavaScript和C插件示例,它们演示了如何 通过脚本与它们进行 交互 。 因此,由于我们可以使用C / C ++源,是什么阻止了我们 出于渲染目的而 访问 Low-Level插件接口 ? 好吧... Unity 5.5中什么都没有;-)

In fact, Unity 5.5 adds the missing hooks to allow you to register a low-level plugin:

实际上,Unity 5.5添加了缺少的钩子,以允许您注册低级插件:

As you can see, the amount of code we had to add is massive. Now let’s see what you need to do to implement your plug-in!

如您所见,我们必须添加大量的代码。 现在,让我们看看实现插件所需要做的!

实作 (Implementation)

First of all, you need to copy the Plugin API headers from the Unity install path Editor/Data/PluginAPI to the location that will contain your plug-in source file(s).

首先,您需要将Unity安装路径Editor / Data / PluginAPI中的Plugin API标头复制到将包含您的插件源文件的位置。

The headers you are interested in are IUnityInterface.h and IUnityGraphics.h, which declare the interfaces needed for the plugin. Remember that these headers are specific to a version of Unity, so it’s important to keep them in sync with the Editor.

您感兴趣的标头是IUnityInterface.hIUnityGraphics.h ,它们声明了插件所需的接口。 请记住,这些标头特定于Unity版本,因此使它们与编辑器保持同步很重要。

The function you need to call to register your plugin is UnityRegisterRenderingPlugin:

注册插件需要调用的函数是UnityRegisterRenderingPlugin

1

extern "C" void UnityRegisterRenderingPlugin(PluginLoadFunc loadPlugin, PluginUnloadFunc unloadPlugin);

1

extern "C" void UnityRegisterRenderingPlugin ( PluginLoadFunc loadPlugin , PluginUnloadFunc unloadPlugin ) ;

However, first you need to implement both Load and Unload callbacks to get the IUnityGraphics interface and register/unregister the graphics device event callback for your low-level rendering. Here is an example:

但是,首先,您需要同时实现LoadUnload回调,以获取IUnityGraphics接口并为低级渲染注册/注销图形设备事件回调。 这是一个例子:

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

webgl unity_Unity WebGL中的低级插件 的相关文章

  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • 在mockito中使用when进行模拟ContextLoader.getCurrentWebApplicationContext()调用。我该怎么做?

    我试图在使用 mockito 时模拟 ContextLoader getCurrentWebApplicationContext 调用 但它无法模拟 here is my source code Mock org springframewo
  • Java列表的线程安全

    我有一个列表 它将在线程安全上下文或非线程安全上下文中使用 究竟会是哪一个 无法提前确定 在这种特殊情况下 每当列表进入非线程安全上下文时 我都会使用它来包装它 Collections synchronizedList 但如果不进入非线程安
  • 如何从泛型类调用静态方法?

    我有一个包含静态创建方法的类 public class TestClass public static
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • 对现有视频添加水印

    我正在寻找一种用 C 在视频上加水印的方法 就像在上面写文字一样 图片或文字标签 我该怎么做 谢谢 您可以使用 Nreco 视频转换器 代码看起来像 NReco VideoConverter FFMpegConverter wrap new
  • Android 套接字和 asynctask

    我即将开始制作一个应该充当 tcp 聊天客户端的应用程序 我一直在阅读和阅读 我得出的结论是最好 如果不需要 将我的套接字和异步任务中的阅读器 问题是我不确定从哪里开始 因为我是 Android 新手 这至少对我来说是一项艰巨的任务 但据我
  • 在activity_main.xml中注释

    我是安卓新手 据我所知 XML 中的注释与 HTML 中的注释相同 使用 形式 我想在 Android 项目的 Activity main xml 配置文件中写一些注释 但它给了我错误 值得注意的是 我使用的是 Eclipse 但目前 我直
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • 如何确定对手机号码的呼叫是本地呼叫还是 STD 或 ISD

    我正在为 Android 开发某种应用程序 但不知道如何获取被叫号码是本地或 STD 的号码的数据 即手机号码检查器等应用程序从哪里获取数据 注意 我说的是手机号码 而不是固定电话 固定电话号码 你得到的数字是字符串类型 因此 您可以获取号
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 实现滚动选择 ListView 中的项目

    我想使用 ListView 您可以在其中滚动列表来选择一个项目 它应该像一个 Seekbar 但拇指应该是固定的 并且您必须使用该栏来调整它 我面临的一个问题是 我不知道这种小部件是如何调用的 这使得我很难搜索 所以我制作了下面这张图片 以
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch
  • 发送用户注册密码,django-allauth

    我在 django 应用程序上使用 django alluth 进行身份验证 注册 我需要创建一个自定义注册表单 其中只有一个字段 电子邮件 密码将在服务器上生成 这是我创建的表格 from django import forms from
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • ACC测试理论--google软件测试之道

    ACC测试理论 A Attribute 特质 在测试之前 需了解产品的特质是什么 即客户为何需要选择此产品的原因 Chrome的定位是快速 安全 稳定和优雅 特质所拥有的特点如下 简单 如果你不能几分钟内列举出来 说明你还没有足够理解你的产
  • CMake添加gcov代码覆盖测试支持

    CMake添加gcov代码覆盖测试支持 金庆的专栏 在根CMakeList txt中添加ENABLE GCOV选项 OPTION ENABLE GCOV Enable gcov debug Linux builds only OFF IF
  • 基数排序python

    一 基数排序介绍 基数排序 radix sort 属于 分配式排序 distribution sort 又称 桶子法 bucket sort 或bin sort 顾名思义 它是透过键值的部份资讯 将要排序的元素分配至某些 桶 中 藉以达到排
  • Shopify速度优化

    对于很多出海的商家 网站速度的加载快慢一直是大家困扰的问题 首先我们先认识下什么是网站速度和网页速度 网站速度是用户浏览网站时的网站加载速度 从第一页加载到访客点入浏览 最后在购物车页面 结账 这个速度由一些服务来评分 例如 Google
  • Influxdb 1.2版本优化之旅(经验证,适用于influxdb1.4版本)

    一 常见异常 1 max series per database exceeded 异常 err max series per database exceeded java lang RuntimeException error max s
  • c#与matlab混合编程解决线性规划,非线性规划(二次规划)等问题

    网上已经有很多类似方法 上一篇是Lingo 本篇是matlab 两个软件在解决最优解方面各有优势 matlab软件中自带许多函数 1 非线性规划 x fval fmincon fun x0 A b Aeq beq lb ub nonlcon
  • vscode react代码提示和补全

    无代码提示 安装代码提示插件Reactjs code snippets 按ctrl 进入设置界面 输入 tag usesOnlineServices 勾选 JSX html无自动补全 按ctrl 进入设置界面 搜索框中输入Include L
  • emoji表情大全

    emoji表情 emoji人物 emoji手势 emoji日常 emoji手机 emoji公共 emoji动物
  • 介绍一个很爽的 php 字符串特定检索函数---strpos()

    大家在用 php 开发的时候 是否 有遇到过 对于一个获取的字符串 如果想要特定检测它是否 含有某个特定的字符或者子字符串 总是找不到好方法 或者根本做不到 迫于无奈而使用foreach 函数 strpos 参数1 待检索的字符串或字符串变
  • Activity启动流程

    简述 Activity 启动分为两种 1 Activity中通过startActivity 方法启动一个Activity 2 从桌面通过点击应用图标启动一个App然后显示Activity 我们通过第二点来分析 更全面一点 先走一波流程图 以
  • 周志华《Machine Learning》学习笔记(17)--强化学习

    上篇主要介绍了概率图模型 首先从生成式模型与判别式模型的定义出发 引出了概率图模型的基本概念 即利用图结构来表达变量之间的依赖关系 接着分别介绍了隐马尔可夫模型 马尔可夫随机场 条件随机场 精确推断方法以及LDA话题模型 HMM主要围绕着评
  • ARM平台移植 openssl-1.1.0

    系统环境 Ubuntu 14 04 3 LTS 源码 openssl 1 1 0 pre1 tar gz 交叉编译环境 arm none linux gnueabi zhaojq virtual machine tar xzvf opens
  • gta5老是变成单人战局_《GTA5》为什么战局总是突然全部人都退出了?!

    不朽的传说猴哥 网络不好 我有时候也是 发布于 2020 04 13 01 46 45 不朽的传说猴哥 网络不好 我有时候也是 发布于 2020 04 13 01 46 45 不朽的传说猴哥 网络不好 我有时候也是 发布于 2020 04
  • 工作三年,你的存款有多少?统计出来的结果令人扎心

    最近看到一个粉丝给我留言 一个毕业三年的人 应该有多少存款 据我所知 身边大部分年轻人的存款都很少 如果你去问他们存款有多少 得到的答案很有可能是为零 甚至有很多人的存款是负数 每月工资到手就得拿去填各种窟窿 上千的房租 大几千的生活费 还
  • iOS中的autorelease

    iOS中的autorelease是一种非常重要的内存管理机制 它可以自动释放对象 从而避免内存泄漏和内存溢出等问题 在本文中 我们将详细介绍iOS中的autorelease机制 包括它的原理 使用方法以及注意事项等内容 autoreleas
  • TCP、UDP、IP报头结构体分析

    TCP UDP IP报头结构体分析 TCP数据段格式 TCP是一种可靠的 面向连接的字节流服务 源主机在传送数据前需要先和目标主机建立连接 然后 在此连接上 被编号的数据段按序收发 同时 要求对每个数据段进行确认 保证了可靠性 如果在指定的
  • c盘哪些文件可以删除?正确答案在这里!

    当我们使用电脑时 经常下意识把各种文件数据保存在c盘 导致c盘的空间越来越小 想要清理电脑缓存 c盘哪些文件可以删除 注意 清理文件之前 记得要备份好重要的数据 下面一起来看看哪些c盘文件可以删除吧 操作环境 演示机型 华硕X8AE43In
  • Python下的图像处理库,你要选哪个?

    欢迎大家关注微信公众号 baihuaML 白话机器学习 码字不易 如转载请私信我 在这里 我们一起分享AI的故事 您可以在后台留言 关于机器学习 深度学习的问题 我们会选择其中的优质问题进行回答 在进行数字图像处理时 我们经常需要对图像进行
  • location.host 与 location.hostname 的区别

    location host 与 location hostname 的区别 location host 包含端口 端口是80的话 就不显示 location hostname 不包含端口 http localhost 8888 locati
  • webgl unity_Unity WebGL中的低级插件

    webgl unity Last year we launched a series of technical blog posts on WebGL starting with a couple of posts on memory No