独立包装dxc-wrapper:简化DirectXShaderCompiler使用

需积分: 9 0 下载量 175 浏览量 更新于2024-12-29 收藏 29.82MB ZIP 举报
资源摘要信息:"dxc-wrapper:DirectXShaderCompiler的独立包装" DirectXShaderCompiler(简称DXC)是一个由微软开发的编译器,它支持最新的Shader Model 6.0和6.2,同时也兼容旧版本的HLSL(High-Level Shader Language)。DXC的主要目的是为Direct3D 12提供编译支持,但它的应用范围却不限于此,它也为其他图形API和计算平台提供了支持。DXC编译器是DirectX的一部分,可以处理HLSL源代码,并将其编译成目标平台的可执行代码。 C++是编写dxc-wrapper的主要语言。这个包装器的目标是为DXC提供一个独立的环境,使其可以在没有安装完整DirectX SDK的环境中使用。dxc-wrapper的作用类似于一个“前端”,它封装了DXC编译器的调用过程,为用户提供了一个更简洁、更易于使用的接口。这样一来,开发者无需深入了解DXC编译器复杂的命令行参数和配置,只需通过dxc-wrapper提供的接口即可完成Shader代码的编译工作。 dxc-wrapper的出现,降低了使用最新Shader编译技术的门槛,使得更多的开发者和小团队能够更容易地在他们的项目中利用DXC编译器。例如,对于那些想在非Windows平台上使用DXC的开发者,dxc-wrapper提供了便利,因为原生的DXC编译器主要支持Windows系统。通过dxc-wrapper,开发者可以更轻松地在跨平台项目中集成DXC编译器,从而实现高效的Shader编译。 文件名称列表中的"dxc-wrapper-master"表明这是一个主分支的代码库,通常包含了最新的特性更新和修复。在一个典型的版本控制系统中,"master"分支代表了项目的稳定版或最新版,开发者们可以通过这个分支获取到最新的代码更新和功能改进。 由于dxc-wrapper是一个针对DXC的独立包装器,因此它的开发和维护对于持续推动图形编程技术的发展至关重要。随着图形API如Vulkan、OpenGL等不断演进,以及GPU计算能力的持续提升,拥有一个高效、易用的Shader编译器变得越发重要。dxc-wrapper帮助简化了这一过程,使得开发者可以更专注于编写高效、复杂的着色器代码,而无需过多关注编译器的具体实现细节。 总之,dxc-wrapper对于任何需要使用DirectXShaderCompiler的开发者来说都是一个宝贵的资源。它不仅提高了DXC的可用性,还扩展了其应用范围,尤其是在跨平台开发场景下。通过封装DXC的复杂性并提供易于理解的接口,dxc-wrapper降低了技术门槛,加速了图形编程技术的普及和应用。

Object itemObj = itemList.stream().map(row -> { // 处理后的newRow格式{"clock":"2021-11-18 08:48:44","SYS-ACTIVE":30,"SYS-INACTIVE":5,"TEST-ACTIVE":4,"TEST-INACTIVE":5} JSONObject newRow = JSONUtil.createObj(); JSONObject rowJson = JSONUtil.parseObj(row); String clock = rowJson.get("clock", String.class); newRow.set("clock", clock); // [{\"MSG\":\"schema:SYS,status:ACTIVE,count:30\"},{\"MSG\":\"schema:SQLAUDIT_MON,status:INACTIVE,count:1\"},{\"MSG\":\"schema:TEST,status:ACTIVE,count:3\"},{\"MSG\":\"schema:TEST,status:INACTIVE,count:1\"}] JSONArray value = rowJson.get("value", JSONArray.class); // newValue格式示例:[{"schema":"SYS-ACTIVE","count":32},{"schema":"SYS-INACTIVE","count":3},{"schema":"TEST-INACTIVE","count":1},{"schema":"TEST-ACTIVE","count":39}] // JSONArray newValue = JSONUtil.createArray(); value.forEach(val -> { String msg = JSONUtil.parseObj(val).get("MSG", String.class); String resultExtractMulti = ReUtil.extractMulti("schema:(\\w+),status:(\\w+),count:([0-9]+)", msg, "$1-$2-$3"); if (StrUtil.isNotEmpty(resultExtractMulti)) { List<String> split = StrSplitter.split(resultExtractMulti, '-', 0, true, true); if (split.size() == 3) { String schema = split.get(0) + "-" + split.get(1); Integer count = Integer.parseInt(split.get(2)); newRow.set(schema, count); } else { log.error("MSG:{}", msg); } } }); // 汇总schema相同的用户数 // Map<String, Integer> newValueMap = newValue.stream().collect(Collectors.groupingBy(v -> JSONUtil.parseObj(v).get("schema", String.class), Collectors.summingInt(v -> JSONUtil.parseObj(v).get("count", Integer.class)))); return newRow; }).collect(Collectors.toList());这段代码可以优化吗?

2023-06-09 上传