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许可证获得许可的(请参阅许可证)。