Vulkan是Khronos寄于厚望的下一代图形API,我们在全新的试验工程ULRE(超轻量级渲染引擎)中,尝试将渲染API迁移到Vulkan。
未来ULRE的完善版本,将会取代CMGameEngine中老旧的渲染器。
Vulkan是Khronos寄于厚望的下一代图形API,我们在全新的试验工程ULRE(超轻量级渲染引擎)中,尝试将渲染API迁移到Vulkan。
未来ULRE的完善版本,将会取代CMGameEngine中老旧的渲染器。
Turbo C/C++、Borland C++、C++Builder曾经是我唯一的开发工具。在很久的一段时间里,我一直使用的是盗版,后来Borland公司的一位员工劝说我要使用正版。我同意了,我努力去做了,我也真的做到了。
只不过世事难料的是,因为我的全正版化计划,我放弃了我最爱的C++Builder。原因很有意思也很简单:我买不到正版。从2002年开始,我寻找一切可以购买C++Builder正版的方式,但都一无所获。一开始告诉我在中国不卖个人版和专业版,只卖企业版。于是我准备好了3万块钱去买一套企业版,结果告诉我不卖给个人。我成立了一家空壳公司去买,答复我不卖给只有2个人的小公司。拉了几个朋友都弄成公司员工,最后告诉我至少要5套起卖。当时我就差点去丰联广场拉横幅抗议了,我突然醒悟:为什么我要花这么大的力气去给人送钱呢?
于是我放弃了使用C++Builder,转向Microsoft C/C++。为什么是Microsoft C/C++而不是Visual C++呢?因为我不想花钱,但又想是正版。Visual C++ IDE是收费的,但微软提供了免费且可商用的Windows SDK,其中便包含了Visual C++底层所调用的Microsoft C/C++ Compiler。于是我所有的工程就变成了使用CMAKE生成工程文件,再通过MSBuild编译链接。整个过程全程正版、合法、免费。
我曾经说过,在我可以得到正版的C++Builder前,我不会考虑再度支持C++Builder。只是没想到这个时间隔的是这么久。如今C++Builder推出了免费且可有限商用的Community版,这确实是一份正版授权,履行承诺的时刻来了。
近十年,我们的渲染器设计都失败了!这其中,前期有各种各样的原因。后期由于服务器模块的重量化,倒导渲染器的工作也停滞了很多年。
此次的渲染器重新设计,将会对引擎本身带来很多革命性的变化。
参见范例Example.DataType.StrCharTest
str: “hello,world!”
strchr(str,’,’) return “,world!”
strrchr(str,strlen(str),’,’) return “,world!”
strchr(str,”el”,2) return “ello,world!”
strrchr(str,strlen(str),”el”,2) return “ld!”
strrchr(str,strlen(str),3,’l’) return “lo,world!”
strrchr(str,strlen(str),3,”el”,2) return “lo,world!”
ClipFilename(“C:\1.txt”) return “1.txt”
ClipLastPathname(“C:\1\2”) return “2”
ClipLastPathname(“C:\1\2\”) return “2”
ClipLastPathname(“C:\1\2\\”) return “2”
SHA1LE算法是我们自定义的一种SHA1算法变种,它的计算方法与SHA1一致,改动如下:
日志系统一直是SDK的重中之中,在DOS时代,单机无法调试图形界面程序的情况下。日志系统是调试信息来源的重要途径。
从单纯的文本文件输出,到 控制台、文件等 等 的多端输出,从单线程到多线程,我们的日志系统经历了一次次的更新与换代。
现在,我们又将迎来全新一代的日志系统。
主要思想是以画点模式绘图,在一个顶点数据下保存left,top,right,bottom四个数据。在Geometry shader中转换成Triangle Strip。
Vertex Shader
#version 330 core
uniform mat4 ModelViewProjectionMatrix;
layout(location=0) in vec4 Vertex;
void main()
{
vec4 lt=vec4(Vertex.xy,vec2(0,1));
vec4 rb=vec4(Vertex.zw,vec2(0,1));
vec4 lt_fin=lt*ModelViewProjectionMatrix;
vec4 rb_fin=rb*ModelViewProjectionMatrix;
gl_Position=vec4(lt_fin.xy,rb_fin.xy);
}
Geometry Shader
#version 330 core
layout (points) in;
layout (triangle_strip,max_vertices=4) out;
void main()
{
vec2 lt=gl_in[0].gl_Position.xy;
vec2 rb=gl_in[0].gl_Position.zw;
gl_Position=vec4(lt, vec2(0,1));EmitVertex();
gl_Position=vec4(lt.x,rb.y, vec2(0,1));EmitVertex();
gl_Position=vec4(rb.x,lt.y, vec2(0,1));EmitVertex();
gl_Position=vec4(rb, vec2(0,1));EmitVertex();
EndPrimitive();
}