SoftGLRender
1.0.0
實現GPU渲染管道的主要步驟的微小C ++軟件渲染器/射手儀,包括點,線和Polygon柵格化,紋理映射,深度測試,顏色混合等,並使用C ++,使用C ++,3D模型(GLTF)模擬Vertex著色器和碎片著色器,並使用GLM庫和使用GLM庫。該項目還添加了OpenGL和Vulkan渲染器實現,您可以在運行時實時切換它們(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存儲庫中下載源代碼作為ZIP文件。
要構建項目,請導航到存儲庫的根目錄並運行以下命令:
mkdir build
cmake -B ./build -DCMAKE_BUILD_TYPE=Release
cmake --build ./build --config Release這將生成可執行文件並將資產複製到目錄bin ,您可以通過執行以下命令來運行:
cd bin/Release
./SoftGLRenderassets :GLTF型號和天盒紋理, assets.json是所有模型和Skybox材料的索引src :主源代碼目錄Base :基本實用程序類,例如文件,哈希,計時器等。Render :渲染器抽象,包括頂點,紋理,均勻,框架擋板等。Software :軟件渲染器實施OpenGL :OpenGL渲染器實現Vulkan :Vulkan渲染器實施Viewer :GLTF加載(基於Assimp),相機和控制器,配置面板和渲染通行管理Shader/GLSL :GLSL著色器代碼,用於OpenGL和Vulkan渲染器Shader/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 如果您想為該項目做出貢獻,歡迎您提交帶有錯誤修復,新功能或其他改進的拉動請求。請確保您的代碼有充分的文獻記錄,並遵守項目的編碼標準。
此代碼是根據MIT許可證獲得許可的(請參閱許可證)。