Tiny C ++ Software Renderer/Rasterizer التي تنفذ الخطوات الرئيسية لخط أنابيب عرض GPU ، بما في ذلك النقطة ، والخط ، ومضلع ، ورسم الخرائط للملمس ، واختبار العمق ، ومزج اللون ، وما إلى ذلك ، ويحاكي تظليل الرياضيات وتظليلات الشظايا باستخدام نماذج C ++ ، 3D (GLTF) محملة عن طريق الأهمية ، واستخدام GLM كمكتب الرياضيات. يضيف المشروع أيضًا تطبيق OpenGL و Vulkan Mreeters ، يمكنك التبديل بينهما (Software/OpenGL/Vulkan) في الوقت الفعلي أثناء التشغيل.
الغرض من هذا المشروع هو توفير نقطة انطلاق للمطورين الذين يرغبون في التعرف على برمجة الرسومات الحديثة.
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
dFdx dFdyLod ، Bias ، OffsetLinearimguiيتم تنفيذ جميع العارضين (البرمجيات/OpenGL/Vulkan) بناءً على فئة العارض المجردة هذه:
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 ، فأنت بحاجة إلى تثبيت مكتبة 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 سيؤدي ذلك إلى إنشاء الملف القابل للتنفيذ ونسخ الأصول إلى bin Directory ، والذي يمكنك تشغيله عن طريق تنفيذ الأمر التالي:
cd bin/Release
./SoftGLRenderassets : نماذج GLTF وقوام Skybox ، assets.json هي فهرس جميع مواد Model & Skyboxsrc : دليل رمز المصدر الرئيسيBase : فئات الأداة المساعدة الأساسية مثل الملف ، التجزئة ، المؤقت ، إلخ.Render : تجريد العارض ، قم بتضمين قمة الرأس ، الملمس ، الموحد ، إطار الإطار ، إلخ.Software : تطبيق عارض البرامجOpenGL : تطبيق عارض OpenGLVulkan : تنفيذ عارض فولكانViewer : تحميل GLTF (استنادًا إلى ASSIMP) ، الكاميرا ووحدة التحكم ، لوحة التكوين ، وتقديم إدارة التمريراتShader/GLSL : رمز Shader GLSL ، لعارض OpenGL و VulkanShader/Software : محاكاة C ++ من تظليلات الرأس وتظليل الأجزاء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 إذا كنت ترغب في المساهمة في المشروع ، فنحن نرحب بك لتقديم طلبات السحب باستخدام إصلاحات الأخطاء أو الميزات الجديدة أو التحسينات الأخرى. يرجى التأكد من أن الكود موثقة جيدًا ويتمسك بمعايير ترميز المشروع.
تم ترخيص هذا الرمز بموجب ترخيص معهد ماساتشوستس للتكنولوجيا (انظر الترخيص).