From 1b3b5ef32b0af3d792c45b3b82aff64f87519e46 Mon Sep 17 00:00:00 2001 From: ouczbs Date: Mon, 18 Sep 2023 22:22:49 +0800 Subject: [PATCH] upload zunicode --- .idea/encodings.xml | 6 ++ .idea/vcs.xml | 6 ++ go.mod | 2 + go.sum | 4 ++ src/zfile/core/archive.go | 5 +- src/{zfile/core => zos}/error.go | 2 +- src/{zfile/core => zos}/reader.go | 2 +- src/zunicode/file/00Window.h | 33 +++++++++++ src/zunicode/file/01.cpp | 94 +++++++++++++++++++++++++++++++ src/zunicode/file/main.cpp | 41 ++++++++++++++ src/zunicode/utf8.go | 66 ++++++++++++++++++++++ 11 files changed, 257 insertions(+), 4 deletions(-) create mode 100644 .idea/encodings.xml create mode 100644 .idea/vcs.xml rename src/{zfile/core => zos}/error.go (84%) rename src/{zfile/core => zos}/reader.go (99%) create mode 100644 src/zunicode/file/00Window.h create mode 100644 src/zunicode/file/01.cpp create mode 100644 src/zunicode/file/main.cpp create mode 100644 src/zunicode/utf8.go diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..ceaaccc --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/go.mod b/go.mod index b8baa9e..3616bf5 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,9 @@ module zlib go 1.20 require ( + github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 // indirect github.com/benbjohnson/clock v1.3.0 // indirect + github.com/saintfish/chardet v0.0.0-20230101081208-5e3ef4b5456d // indirect go.uber.org/multierr v1.10.0 // indirect go.uber.org/zap v1.25.0 // indirect ) diff --git a/go.sum b/go.sum index 8166539..e9fcedb 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,11 @@ +github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 h1:OYA+5W64v3OgClL+IrOD63t4i/RW7RqrAVl9LTZ9UqQ= +github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394/go.mod h1:Q8n74mJTIgjX4RBBcHnJ05h//6/k6foqmgE45jTQtxg= github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/saintfish/chardet v0.0.0-20230101081208-5e3ef4b5456d h1:hrujxIzL1woJ7AwssoOcM/tq5JjjG2yYOc8odClEiXA= +github.com/saintfish/chardet v0.0.0-20230101081208-5e3ef4b5456d/go.mod h1:uugorj2VCxiV1x+LzaIdVa9b4S4qGAcH6cbhh4qVxOU= github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ= diff --git a/src/zfile/core/archive.go b/src/zfile/core/archive.go index 7d29b21..2993ea0 100644 --- a/src/zfile/core/archive.go +++ b/src/zfile/core/archive.go @@ -4,12 +4,13 @@ import ( "os" "reflect" "zlib/src/zlog" + "zlib/src/zos" ) type FFileArchive struct { pos, start, stop, size int swapBytes bool - reader FReader + reader zos.FReader } func (ar *FFileArchive) SwapStructBytes(e any) { @@ -27,7 +28,7 @@ func NewFileArchive(filename string) *FFileArchive { return nil } s, _ := f.Stat() - io := NewReader(f) + io := zos.NewReader(f) return &FFileArchive{ size: int(s.Size()), stop: -1, diff --git a/src/zfile/core/error.go b/src/zos/error.go similarity index 84% rename from src/zfile/core/error.go rename to src/zos/error.go index 5b234d6..fe71ed5 100644 --- a/src/zfile/core/error.go +++ b/src/zos/error.go @@ -1,4 +1,4 @@ -package core +package zos import "errors" diff --git a/src/zfile/core/reader.go b/src/zos/reader.go similarity index 99% rename from src/zfile/core/reader.go rename to src/zos/reader.go index 348d65e..16a28ee 100644 --- a/src/zfile/core/reader.go +++ b/src/zos/reader.go @@ -1,4 +1,4 @@ -package core +package zos import ( "bytes" diff --git a/src/zunicode/file/00Window.h b/src/zunicode/file/00Window.h new file mode 100644 index 0000000..3b06c1d --- /dev/null +++ b/src/zunicode/file/00Window.h @@ -0,0 +1,33 @@ +#pragma once +#include +class Window +{ +public: + Window(int width, int height, const char* name); + HWND GetHWnd() { + return hWnd; + } + static bool ProcessMessages(int& code); +private: + class WindowClass + { + public: + static const char* GetName() noexcept; + static HINSTANCE GetInstance() noexcept; + private: + WindowClass() noexcept; + ~WindowClass(); + WindowClass(const WindowClass&) = delete; + WindowClass& operator=(const WindowClass&) = delete; + static constexpr const char* wndClassName = "MainWnd"; + static WindowClass wndClass; + HINSTANCE hInst; + }; +private: + static LRESULT CALLBACK HandleMsgSetup(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) noexcept; + static LRESULT CALLBACK HandleMsgThunk(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) noexcept; + LRESULT HandleMsg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) noexcept; + int width; + int height; + HWND hWnd; +}; \ No newline at end of file diff --git a/src/zunicode/file/01.cpp b/src/zunicode/file/01.cpp new file mode 100644 index 0000000..dfdd694 --- /dev/null +++ b/src/zunicode/file/01.cpp @@ -0,0 +1,94 @@ +#include "01 Instance and Devices/03 Connecting with a Vulkan Loader library.h" +#include "01 Instance and Devices/05 Loading function exported from a Vulkan Loader library.h" +#include "01 Instance and Devices/06 Loading global-level functions.h" +#include "01 Instance and Devices/07 Checking available Instance extensions.h" +#include "01 Instance and Devices/08 Creating a Vulkan Instance.h" +#include "01 Instance and Devices/09 Loading instance-level functions.h" +#include "01 Instance and Devices/10 Enumerating available physical devices.h" +#include "01 Instance and Devices/11 Checking available device extensions.h" +#include <01 Instance and Devices/12 Getting features and properties of a physical device.h> +#include <01 Instance and Devices/13 Checking available queue families and their properties.h> +#include <01 Instance and Devices/14 Selecting index of a queue family with desired capabilities.h> +#include <01 Instance and Devices/15 Creating a logical device.h> +#include <01 Instance and Devices/16 Loading device-level functions.h> +#include <01 Instance and Devices/17 Getting a device queue.h> +#include <01 Instance and Devices/18 Creating a logical device with geometry shaders and graphics queue.h> +#include <01 Instance and Devices/19 Destroying a logical device.h> +#include <01 Instance and Devices/20 Destroying a Vulkan Instance.h> +#include <01 Instance and Devices/21 Releasing a Vulkan Loader library.h> +using namespace VulkanCookbook; +int main01() { + //加载dll + LIBRARY_TYPE vulkan_library; + ConnectWithVulkanLoaderLibrary(vulkan_library); + + + //加载vulkan接口 + LoadFunctionExportedFromVulkanLoaderLibrary(vulkan_library); + + + //调用vulkan接口,加载全局函数指针 + LoadGlobalLevelFunctions(); + { + //调用全局函数指针,检查实例扩展 + std::vector available_extensions; + CheckAvailableInstanceExtensions(available_extensions); + } + + + std::vector desired_extensions; + VkInstance instance; + char* application_name = "hello world"; + //创建实例,依赖实例扩展,需要先检查是否支持 + CreateVulkanInstance(desired_extensions, application_name, instance); + + + //调用vulkan接口,加载实例函数指针 + LoadInstanceLevelFunctions(instance, desired_extensions); + //调用实例接口,获取物理设备列表 + std::vector available_devices; + EnumerateAvailablePhysicalDevices(instance, available_devices); + VkPhysicalDevice physical_device = available_devices[0]; + { + //调用实例接口,检查物理设备扩展 + std::vector available_extensions; + CheckAvailableDeviceExtensions(physical_device, available_extensions); + } + //调用实例接口,检查物理设备功能 + VkPhysicalDeviceFeatures device_features; + VkPhysicalDeviceProperties device_properties; + GetFeaturesAndPropertiesOfPhysicalDevice(physical_device, device_features, device_properties); + { + //调用实例接口,获取物理设备属性 + std::vector queue_families; + CheckAvailableQueueFamiliesAndTheirProperties(physical_device, queue_families); + } + //调用实例接口,获取命令队列信息 + uint32_t graphics_queue_family_index, compute_queue_family_index; + SelectIndexOfQueueFamilyWithDesiredCapabilities(physical_device, VK_QUEUE_GRAPHICS_BIT, graphics_queue_family_index); + SelectIndexOfQueueFamilyWithDesiredCapabilities(physical_device, VK_QUEUE_COMPUTE_BIT, compute_queue_family_index); + std::vector requested_queues = { { graphics_queue_family_index, { 1.0f } } }; + if (graphics_queue_family_index != compute_queue_family_index) { + requested_queues.push_back({ compute_queue_family_index, { 1.0f } }); + } + //调用实例接口,创建逻辑设备,需要检查物理设备扩展,功能,命令队列 + VkDevice logical_device; + CreateLogicalDevice(physical_device, requested_queues, {}, &device_features, logical_device); + + + //调用vulkan接口,加载设备函数指针 + LoadDeviceLevelFunctions(logical_device, desired_extensions); + //调用设备接口,获取命令队列 + VkQueue graphics_queue, compute_queue; + GetDeviceQueue(logical_device, graphics_queue_family_index, 0, graphics_queue); + GetDeviceQueue(logical_device, compute_queue_family_index, 0, compute_queue); + CreateLogicalDeviceWithGeometryShadersAndGraphicsAndComputeQueues(instance, logical_device, graphics_queue, compute_queue); + + //调用设备接口,销毁逻辑设备 + DestroyLogicalDevice(logical_device); + //调用实例接口,销毁vulkan实例1 + DestroyVulkanInstance(instance); + //调用系统接口,销毁dll + ReleaseVulkanLoaderLibrary(vulkan_library); + return 1; +} \ No newline at end of file diff --git a/src/zunicode/file/main.cpp b/src/zunicode/file/main.cpp new file mode 100644 index 0000000..2234626 --- /dev/null +++ b/src/zunicode/file/main.cpp @@ -0,0 +1,41 @@ +#define VK_USE_PLATFORM_WIN32_KHR 1 +#include "external/vulkan.h" +#include +#include "01 Instance and Devices/03 Connecting with a Vulkan Loader library.h" +#include "01 Instance and Devices/05 Loading function exported from a Vulkan Loader library.h" +#include "01 Instance and Devices/06 Loading global-level functions.h" +#include "01 Instance and Devices/07 Checking available Instance extensions.h" +#include "02 Image Presentation/02 Creating a presentation surface.h" +#include "02 Image Presentation/01 Creating a Vulkan Instance with WSI extensions enabled.h" + +using namespace VulkanCookbook; +int main() { + //加载dll + LIBRARY_TYPE vulkan_library; + ConnectWithVulkanLoaderLibrary(vulkan_library); + + //加载vulkan接口 + LoadFunctionExportedFromVulkanLoaderLibrary(vulkan_library); + + //调用vulkan接口,加载全局函数指针 + LoadGlobalLevelFunctions(); + { + //调用全局函数指针,检查实例扩展 + std::vector available_extensions; + CheckAvailableInstanceExtensions(available_extensions); + } + + std::vector desired_extensions; + char* application_name = "hello world"; + VkInstance instance; + CreateVulkanInstanceWithWsiExtensionsEnabled(desired_extensions, application_name, instance); + + auto pWnd = new Window(600, 800, "Game Window"); + WindowParameters window_parameters; + VkSurfaceKHR presentation_surface; + //presentation_surface. + CreatePresentationSurface(instance, window_parameters, presentation_surface); + + + return 1; +} \ No newline at end of file diff --git a/src/zunicode/utf8.go b/src/zunicode/utf8.go new file mode 100644 index 0000000..62a63d0 --- /dev/null +++ b/src/zunicode/utf8.go @@ -0,0 +1,66 @@ +package main + +import ( + "bufio" + "github.com/axgle/mahonia" + "github.com/saintfish/chardet" + "os" + "path/filepath" + "zlib/src/zlog" +) + +type Decoder = mahonia.Decoder + +var decMap = make(map[string]Decoder) + +func parseAllFiles(root string) []string { + var files []string + err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + if !info.IsDir() { + files = append(files, path) + } + return nil + }) + if err != nil { + panic(err) + } + return files +} +func getDecoder(name string) Decoder { + dec := decMap[name] + if dec != nil { + return dec + } + dec = mahonia.NewDecoder(name) + decMap[name] = dec + return dec +} +func convertFile(file string) { + from, _ := os.ReadFile(file) + det := chardet.NewTextDetector() + result, err := det.DetectBest(from) + if err != nil { + zlog.Errorf("error DetectBest: %s", err.Error()) + return + } + if result.Charset == "UTF-8" || result.Confidence < 80 { + return + } + dec := getDecoder(result.Charset) + to := dec.ConvertString(string(from)) + f, _ := os.OpenFile(file, os.O_WRONLY, 0777) + w := bufio.NewWriter(f) + w.WriteString(to) + w.Flush() + zlog.Infof("%d %s %s", result.Confidence, result.Charset, file) +} +func main() { + root := "F:\\zvulkan\\vulkanLearn\\src" + files := parseAllFiles(root) + for _, file := range files { + convertFile(file) + } +}