Software Renderer/Rasterizer ขนาดเล็ก C ++ ที่ใช้ขั้นตอนหลักของไปป์ไลน์การเรนเดอร์ GPU รวมถึงจุด, เส้นและรูปหลายเหลี่ยมแรสเตอร์, การทำแผนที่พื้นผิว, การทดสอบความลึก, การผสมสี ฯลฯ โครงการยังเพิ่มการใช้งาน OpenGL และ Vulkan Renderers คุณสามารถสลับระหว่างพวกเขา (ซอฟต์แวร์/OpenGL/Vulkan) แบบเรียลไทม์ขณะทำงาน
วัตถุประสงค์ของโครงการนี้คือการเป็นจุดเริ่มต้นสำหรับนักพัฒนาที่ต้องการเรียนรู้เกี่ยวกับการเขียนโปรแกรมกราฟิกสมัยใหม่
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
dFdx dFdyLod , Bias , OffsetLinearimguiRenderers ทั้งหมด (ซอฟต์แวร์/OpenGL/Vulkan) ดำเนินการตามคลาส Renderer นามธรรมนี้:
class Renderer {
public:
// framebuffer
std::shared_ptr<FrameBuffer> createFrameBuffer ( bool offscreen);
// texture
std::shared_ptr<Texture> createTexture ( const TextureDesc &desc);
// vertex
std::shared_ptr<VertexArrayObject> createVertexArrayObject ( const VertexArray &vertexArray);
// shader program
std::shared_ptr<ShaderProgram> createShaderProgram ();
// pipeline states
std::shared_ptr<PipelineStates> createPipelineStates ( const RenderStates &renderStates);
// uniform
std::shared_ptr<UniformBlock> createUniformBlock ( const std::string &name, int size);
std::shared_ptr<UniformSampler> createUniformSampler ( const std::string &name, const TextureDesc &desc);
// pipeline
void beginRenderPass (std::shared_ptr<FrameBuffer> &frameBuffer, const ClearStates &states);
void setViewPort ( int x, int y, int width, int height);
void setVertexArrayObject (std::shared_ptr<VertexArrayObject> &vao);
void setShaderProgram (std::shared_ptr<ShaderProgram> &program);
void setShaderResources (std::shared_ptr<ShaderResources> &uniforms);
void setPipelineStates (std::shared_ptr<PipelineStates> &states);
void draw ();
void endRenderPass ();
};ในการสร้างโครงการคุณต้องติดตั้งเครื่องมือต่อไปนี้ก่อน:
หากคุณต้องการเรียกใช้ Vulkan Renderer คุณต้องติดตั้ง Library Vulkan ดังนี้:
ในการรับรหัสสำหรับไลบรารีนี้คุณสามารถโคลนพื้นที่เก็บข้อมูล GitHub โดยใช้คำสั่งต่อไปนี้:
git clone https://github.com/keith2018/SoftGLRender.gitหรือคุณสามารถดาวน์โหลดซอร์สโค้ดเป็นไฟล์ซิปจากที่เก็บ GitHub
ในการสร้างโครงการนำทางไปยังไดเรกทอรีรากของที่เก็บและเรียกใช้คำสั่งต่อไปนี้:
mkdir build
cmake -B ./build -DCMAKE_BUILD_TYPE=Release
cmake --build ./build --config Release สิ่งนี้จะสร้างไฟล์ที่เรียกใช้งานและคัดลอกสินทรัพย์ไปยัง Directory bin ซึ่งคุณสามารถรันได้โดยดำเนินการคำสั่งต่อไปนี้:
cd bin/Release
./SoftGLRenderassets : รุ่น GLTF และพื้นผิว Skybox, assets.json เป็นดัชนีของวัสดุโมเดลและ Skybox ทั้งหมดsrc : ไดเรกทอรีซอร์สโค้ดหลักBase : คลาสยูทิลิตี้พื้นฐานเช่นไฟล์แฮชตัวจับเวลา ฯลฯRender : Renderer Abstraction รวมถึงจุดสุดยอด, พื้นผิว, เครื่องแบบ, เฟรมบัฟเฟอร์ ฯลฯSoftware : การใช้งานซอฟต์แวร์ RendererOpenGL : การใช้งาน OpenGL RendererVulkan : การใช้งาน Vulkan RendererViewer : การโหลด GLTF (ขึ้นอยู่กับ Assimp), Camera & Controller, Config Panel และ Render Pass ManagementShader/GLSL : รหัส shader glsl สำหรับ opengl & vulkan rendererShader/Software : การจำลอง C ++ ของจุดสุดยอดและ shaders ชิ้นส่วนthird_party : ไลบรารีและสินทรัพย์ภายนอก assimp https://github.com/assimp/assimpglfw https://github.com/glfw/glfwglm https://github.com/g-truc/glmglslang https://github.com/khronosgroup/glslangimgui https://github.com/ocornut/imguijson11 https://github.com/dropbox/json11stb_image https://github.com/nothings/stbvma https://github.com/gpuopen-librariesandsdks/vulkanmemoryallocator หากคุณต้องการมีส่วนร่วมในโครงการคุณสามารถส่งคำขอดึงด้วยการแก้ไขข้อผิดพลาดคุณสมบัติใหม่หรือการปรับปรุงอื่น ๆ โปรดตรวจสอบให้แน่ใจว่ารหัสของคุณมีเอกสารที่ดีและปฏิบัติตามมาตรฐานการเข้ารหัสของโครงการ
รหัสนี้ได้รับอนุญาตภายใต้ใบอนุญาต MIT (ดูใบอนุญาต)