diff --git a/src/vht/GraphicsPipeline.cppm b/src/vht/GraphicsPipeline.cppm
index f6a8481..c3cfa2b 100644
--- a/src/vht/GraphicsPipeline.cppm
+++ b/src/vht/GraphicsPipeline.cppm
@@ -1,13 +1,82 @@
 export module GraphicsPipeline;
 
 import std;
+import shaderc;
 import vulkan_hpp;
 
+
 import DataLoader;
 import Tools;
 import Device;
 import RenderPass;
 
+const std::string VERT_CODE = R"_GLSL_(
+#version 450
+
+layout(binding = 0) uniform UniformBufferObject {
+    mat4 model;
+    mat4 view;
+    mat4 proj;
+} ubo;
+
+layout(location = 0) in vec3 inPosition;
+layout(location = 1) in vec2 inTexCoord;
+
+layout(location = 0) out vec2 fragTexCoord;
+
+void main() {
+    gl_Position = ubo.proj * ubo.view * ubo.model * vec4(inPosition, 1.0);
+    fragTexCoord = inTexCoord;
+}
+)_GLSL_";
+
+const std::string FRAG_CODE = R"_GLSL_(
+#version 450
+
+layout(set = 1, binding = 0) uniform sampler2D texSampler;
+
+layout(location = 0) in vec2 fragTexCoord;
+
+layout(location = 0) out vec4 outColor;
+
+void main() {
+    outColor = texture(texSampler, fragTexCoord);
+}
+)_GLSL_";
+
+
+std::vector<std::uint32_t> compile_shader(
+    const std::string& source,              // 着色器源代码
+    const shaderc::shader_kind kind,        // 着色器类型
+    const std::string& name = "shader"     // 着色器名称（可选，默认为 "shader"）
+) {
+    // 创建编译器和编译选项
+    shaderc::Compiler compiler;
+    shaderc::CompileOptions options;
+
+    // 设置编译选项
+    options.SetOptimizationLevel(shaderc::optimization_level::shaderc_optimization_level_performance);
+    // 设置目标环境
+    options.SetTargetEnvironment(shaderc::target_env::shaderc_target_env_vulkan, shaderc::env_version::shaderc_env_version_vulkan_1_4);
+    // 设置源语言
+    options.SetSourceLanguage(shaderc::source_language::shaderc_source_language_glsl);
+
+    // 编译着色器
+    const shaderc::SpvCompilationResult result = compiler.CompileGlslToSpv(
+        source, // 着色器源代码
+        kind,   // 着色器类型
+        name.c_str(), // 着色器名称
+        options // 编译选项
+    );
+
+    // 检查编译结果
+    if (result.GetCompilationStatus() != shaderc::compilation_status::shaderc_compilation_status_success) {
+        throw std::runtime_error(result.GetErrorMessage());
+    }
+
+    return {result.cbegin(), result.cend()};
+}
+
 export namespace vht {
 
     /**
@@ -73,10 +142,16 @@ export namespace vht {
         }
         // 创建图形管线
         void create_graphics_pipeline() {
-            const auto vertex_shader_code = vht::read_shader("shaders/graphics.vert.spv");
-            const auto fragment_shader_code = vht::read_shader("shaders/graphics.frag.spv");
-            const auto vertex_shader_module = vht::create_shader_module(m_device->device(), vertex_shader_code);
-            const auto fragment_shader_module = vht::create_shader_module(m_device->device(), fragment_shader_code);
+            // const std::vector<std::uint32_t>
+            const auto vertex_shader_code = compile_shader(VERT_CODE, shaderc::shader_kind::shaderc_glsl_vertex_shader);
+            const auto fragment_shader_code = compile_shader(FRAG_CODE, shaderc::shader_kind::shaderc_glsl_fragment_shader);
+            const auto vertex_shader_module = m_device->device().createShaderModule(
+                vk::ShaderModuleCreateInfo().setCode( vertex_shader_code )
+            );
+            const auto fragment_shader_module = m_device->device().createShaderModule(
+                vk::ShaderModuleCreateInfo().setCode(fragment_shader_code)
+            );
+
             vk::PipelineShaderStageCreateInfo vertex_shader_create_info;
             vertex_shader_create_info.stage = vk::ShaderStageFlagBits::eVertex;
             vertex_shader_create_info.module = vertex_shader_module;
