1.lex说äºä»ä¹
2.OpenCL(Open Computing Language,源码杂谈开放计算语言)杂谈
3.Lua5.4 源码剖析——杂谈 之 如何调试Lua源码
4.UE4技术杂谈——多Pass渲染描边 与 细节面板扩展
5.WAP站长之家网站业务
6.D8论坛论坛简介
lex说äºä»ä¹
lexçææå¦ä¸ï¼
1ãLexä½ä¸ºåè¯è¡¨ç¤ºï¼æä¸ï¼æ³å¾ãç½é©¬å ¬æ³ï¼æç§æ³ï¼ãLexä½ä¸ºäººåæ¯æï¼å¾·ãåï¼è±å æ¯ã
2ãLexæ¯LEXical compilerç缩åï¼æ¯Unixç¯å¢ä¸é常èåçå·¥å ·ï¼ä¸»è¦åè½æ¯çæä¸ä¸ªè¯æ³åæå¨(scanner)çCæºç ï¼æè¿°è§åéç¨æ£å表达å¼(regular expression)ã
OpenCL(Open Computing Language,源码杂谈开放计算语言)杂谈
OpenCL,源码杂谈即开放计算语言,源码杂谈是源码杂谈一个用于异构平台编程的框架,同时也是源码杂谈全球院校库源码异构并行计算的行业标准,由Khronos Group维护。源码杂谈它适用于包括CPU、源码杂谈GPU、源码杂谈FPGA、源码杂谈DSP以及各类AI加速器在内的源码杂谈异构平台。OpenCL架构可以从四个角度展开:平台模型、源码杂谈内存模型、源码杂谈执行模型和编程模型。源码杂谈
在平台模型中,源码杂谈OpenCL由一个主机连接一个或多个OpenCL设备组成,设备内部可以进一步划分为计算单元(CU),CU则可能包含处理单元(PE),PE最终执行计算任务。OpenCL程序由两部分构成:主机代码和设备内核代码,主机运行主机代码,并将内核代码以命令形式提交至OpenCL设备进行执行。
执行模型阐述了主机如何高效地利用OpenCL设备的计算资源完成计算处理。Context代表了内核执行环境,包含设备、内核对象、程序对象、内存对象等资源。执行过程中的核心是内核,放置于设备上运行。执行前,小妖精源码需要创建索引空间NDRange。工作项(work-item)组织成工作组(work-group),再组织为NDRange,最终映射至设备的计算单元上。工作项可以通过全局索引或工作组索引加局部索引的方式找到。
内存模型描述了主机和设备如何看待数据。包含主机内存、全局内存、常量全局内存、本地内存和私有内存。全局内存由主机和设备共用,允许读写操作。常量全局内存允许主机读写,设备读操作。本地内存为CU内部使用,主机无法访问。私有内存为PE专用,主机和PE都无法访问。
编程模型涉及两个主要部分:主机端代码和设备端内核代码。编程过程中需要维护Context,代表执行环境。从cl源代码中创建Program对象并编译,运行时创建Kernel对象和内存对象,设置参数和输入后将Kernel送入执行队列。最终等待计算结束,获取结果。
OpenCL应用开发的基本流程包括创建Context、加载内核、分配内存、设置参数、时间戳转换源码执行内核和获取结果。示例代码提供了一个向量加法操作的实现,环境为Ubuntu .,使用了Intel CPU的OpenCL SDK。
Lua5.4 源码剖析——杂谈 之 如何调试Lua源码
我们有时候写了一段Lua代码,希望能通过断点调试的方式看一下我们的代码在执行过程中Lua虚拟机的状态与运行流程。本篇教程我将教大家Windows与Mac环境下如何配置Lua源码调试环境。
Lua调试环境需要有Lua源码,我们从官网下载源码:
Windows下Lua源码调试环境搭建
1)下载Visual Studio,可自行在官网下载最新版本即可:
2)打开VIsual Studio,创建一个新的C++控制台工程,我这里以Visual Studio 版本进行举例:
项目可任意命名,本例中我们命名为TestLua:
3)工程中添加Lua源码文件:
3.1)拷贝源代码文件到项目的文件夹,Makefile文件可以不拷贝:
3.2)把上面这些文件导入工程:
"
.h
头文件导入:导入所有".h"后缀文件到头文件文件夹中(右键头文件->添加->现有项):
"
.c
源文件导入:导入所有".c"后缀文件到源文件的文件夹(右键源文件->添加->现有项):
4)生成exe可执行文件:
文件都导入完成了,这时候如果按"生成"或者"F5",会有如下的报错:
这是因为除了我们创建项目工程的时候自带源文件中的一个main函数以外,Lua源码中也定义了两个Main函数。他们分别对应的是luac编译工具的启动函数和lua运行工具的启动函数。要想编译通过,我们只需要根据自己要调试目的,从3个main里面把用不到的2个main删掉或者重命名即可。
本例中,我打算在自己的main里面实现通过dofile函数执行一个Lua文件的功能,所以我不需要启动lua和luac指令控制台,所以我把他们的main函数改名:
luac.c:把main函数改名为luac_main函数:
lua.c:把main函数改为lua_main:
上述源码中多余的2个main函数都改名了,这时候已经能编译通过并生成出exe可执行文件了。
接下来我们可以开始编写自己的main函数逻辑了,打开TestLua.cpp,输入以下内容,作用是爱发天国源码运行一个在项目目录下名字为"testlua.lua"的lua文件:
5)testlua.lua文件创建与编写:
上述代码在运行时会执行testlua.lua文件,接下来我们就需要在工程目录下创建这个将要被执行的testlua.lua文件:
打开testlua.lua文件,添加任意lua代码,这里我们简单调用print打印一句信息:
6)在Visual Studio中按“F5”开启调试,可以看到控制台被成功运行,我们的lua文件也被成功执行,打印出了信息:
7)断点调试指令OpCode:
学习过我的《Lua源码剖析 之 虚拟机》系列教程的同学应该知道Lua的指令就是各种OpCode的执行,我们可以在《lvm.c》的下面这个地方加断点再按F5重新启动程序,程序在每执行一条OpCode指令就会在这处代码断点下来,这时候我们就能看到下一条要执行的OpCode是哪一条了:
在本例中的print函数最终会执行到OP_CALL这个调用分支:
Windows环境下搭建Lua源码调试环境的教程到此结束。
Mac下Lua源码调试环境搭建
因为大部分流程与上面Windows一样,所以我下面会省略一些重复步骤。
1)下载XCode,可自行在AppStore进行下载。
2)打开XCode,创建一个新的C++控制台工程,本例中命名为TestLua:
3)工程中添加Lua源码文件:
3.1)拷贝源代码文件到项目的文件夹,Makefile文件可以不拷贝:
3.2)把拷贝后的文件导入工程:
不需要区分".h"和".cpp",全选导进来就好了:
4)与Windows流程同样,把源码自带的2个main函数改名:
luac.c:把main函数改名为luac_main函数:
lua.c:把main函数改为lua_main:
把源码中多余的2个main函数都改名了,接下来同样,开始编写我们的main.cpp,打开该文件并添加代码如下代码。为了在mac下文件读取代码更简洁,在下面的Lua文件我暂时先使用文件的绝对路径,暂时把testlua.lua文件放在我的mac的桌面上进行读取:
5)在mac的桌面上创建testlua.lua文件,添加任意lua代码:
6)同理可正常运行或者加断点进行调试,这里不再赘述:
总结
本文我们学习了如何在Windows与Mac下搭建Lua源码调试环境。另外,我们上述使用的例子是通过dofile运行一个lua文件,同学们也可以试试保留lua.c里面的arp源码 linux内核main函数,删掉另外两个,此时按开始调试可启动lua的即时解析控制台,在控制台里面可自行输入任意Lua代码,并可断点查看即时运行状态或最终结果,感兴趣的同学可以自行试试。
不过,尽管能调试Lua源码,但如果之前没有学习过我的那些Lua源码剖析教程,可能很多地方会看不懂,所以这里建议有空的同学还是可以先去学习一下的。
谢谢阅读。
UE4技术杂谈——多Pass渲染描边 与 细节面板扩展
同时关注公众号,更多精彩内容不错过。 在《UE4技术杂谈——后处理 之 遮挡描边》中,我们了解了如何通过屏幕后处理技术实现场景对象的描边效果。然而,此方法对GPU带宽要求较高,不太适合移动设备。本文将介绍一种基于网格体多Pass渲染技术的描边实现,无需修改引擎源代码,更适合移动端或前向渲染管线。 UE4引擎受限于其架构,不能直接在材质代码中编写多Pass渲染逻辑,也没有类似UE5的“Overlay Material”功能。因此,我们通过插件方式支持多Pass渲染框架,该插件允许动态添加或删除StaticMesh材质。在本教程中,将展示如何定制细节面板,以及如何实现描边效果。 效果展示如下:圆锥体与球体分别使用两个材质渲染,一个用于主体颜色(红色),另一个用于描边效果。此外,扩展了静态网格体组件中的材质部分细节面板,添加按钮用于快速添加或删除材质。 以下是实现描边效果的关键知识点和步骤,重点在于如何利用引擎接口动态管理材质,以及如何定制细节面板:描边材质实现(%)
StaticMesh动态添加材质(%)
定制引擎StaticMeshComponent组件材质部分的细节面板(%)
接下来,我们逐步实现上述目标。 描边材质实现采用“法线外扩 + 正面剔除”的算法,通过设置材质参数实现背面剔除,仅渲染背面部分,达到描边效果。具体包括设置材质域、混合模式、着色模型和双面属性等。 StaticMesh动态添加材质的关键在于,通过创建新的网格体描述(FMeshDescription)并构建新的StaticMesh实例,从而添加额外材质。同时,实现删除材质功能,而不影响原有模型。 定制细节面板涉及扩展组件显示,实现添加或删除材质按钮。此功能通过继承IDetailCustomization接口并实现CustomizeDetails函数完成。 总结:本文通过插件方式扩展了UE4引擎功能,实现了多Pass渲染下的描边效果,并展示了如何定制组件细节面板。实现过程中,关键在于理解引擎接口并灵活应用,以达到高效渲染和用户友好界面的目标。WAP站长之家网站业务
欢迎来到WAP站长之家,这是一个专注于站长服务的综合性平台,提供了丰富的栏目以满足各类需求。在论坛部分,有新手报道区供新晋站长交流经验,休闲灌水区则供站长们轻松交流,站长杂谈则涵盖了行业动态和观点分享。此外,还有程序交流区,包括综合程序、插件采集等,帮助站长们提升网站技术水平。
在资源分享方面,网站提供免费专区和资源共享,让站长们可以免费获取所需的资源。知道互助栏目则是一个互助平台,解答网站建设和运营中的疑难问题。网站展示区则为站长们提供展示自己作品的平台,同城站长则有助于地域内的交流和合作。
对于网络权益保护,网络维权栏目是解决纠纷的重要场所。其他论坛则涵盖了更多元的讨论话题。在教育方面,站长学院分为域名分类,包括免费域名、域名知识和解析等;空间分类包括免费空间和空间管理知识;程序分类则细化到网站优化、编程教程等多个领域。
在商业和市场部分,站长市场提供商家店铺和二手交易,赚钱学院和现金任务等模块则帮助站长们寻找盈利机会。此外,链接交换和广告宣传也是提升网站流量的重要手段。资讯运营、创业、电商等板块则紧跟行业动态,分享运营策略和市场信息。
最后,站长素材勋章、表情、节日装饰等丰富元素为网站增添了趣味性,而电脑工具、手机工具和在线工具则为站长们提供了实用的技术支持。站长实验室则是一个充满创新的天地,展示国际前沿的源代码,为站长们提供学习和灵感的源泉。
D8论坛论坛简介
D8论坛是隶属于D8站长网(织梦吧)的专门面向站长的交流平台。这个论坛致力于为所有站长朋友们提供全方位的服务,包括从零开始的DedeCMS视频教程,丰富的SEO资源,CMS模板,源代码分享,以及外包任务交易和友链交换等建站相关服务。论坛自成立以来已有两年多的时间,期间不断发展壮大,深受站长们的喜爱。
在论坛的特色版块中,有D8杂谈,这是一个供站长们分享心得、交流经验的开放空间。DedeCMS有问必答版块则为新手站长解答疑惑,提供技术支持。dedecms视频教程版块则通过实际操作视频,帮助大家理解和掌握DedeCMS的使用技巧。此外,站长联盟赚钱版块更是为关注盈利策略的站长朋友们提供了实用的商业策略和赚钱途径。
总的来说,D8论坛是一个集学习、交流、合作于一体的专业平台,无论你是经验丰富的老站长,还是刚入门的新手,都能在这里找到所需的支持和帮助。论坛的成长和发展,都源自于站长朋友们的支持与参与,让我们共同为网络建站事业努力前行。
CesiumJS 源码杂谈 - 从光到 Uniform
CesiumJS 源码探索:光照与Uniform的转换之旅
CesiumJS 对光照的处理主要依赖于其底层API与WebGL着色器的交互。尽管它默认只支持一个太阳光,但通过DirectionalLight扩展,可模拟各种光照效果。光在CesiumJS中被转换为Uniform值,以统一的形式传递给着色器执行。
首先,CesiumJS的光照类型主要包括场景默认的太阳光和DirectionalLight,后者允许设定光照方向。例如,官方示例中的《Lighting》展示了如何运用DirectionalLight创建灯光效果。方向光多了一个方向属性,通常表示为单位向量。
在源码中,光照信息通过UniformState对象在每帧渲染时传递给Renderer。这个过程始于Scene.js模块的render函数,其中的uniformState会更新来自FrameState的光照参数。当Context对象执行DrawCommand时,ShaderProgram的_uniforms列表会填充来自uniformState的值,包括那些由AutomaticUniforms自动更新的,如光的属性。
光照Uniform在着色器中的应用十分广泛,如点云着色时使用czm_lightColor,冯氏着色法(Phong)材质通过czm_lightColor进行漫反射和高光计算,Globe.js则在GlobeFS片元着色器中使用czm_lightColor。在Model API的PBR着色法中,czm_lightColorHdr变量在光照阶段的计算中扮演重要角色。
总的来说,CesiumJS的光照系统通过Uniform的转换,确保光照信息在复杂渲染流程中的顺畅传递。然而,深入研究光照材质,特别是在自定义光照效果方面,仍需要进一步学习实时渲染(RealTimeRendering)的知识。