ポイント、ライン、ポリゴンラスター化、テクスチャマッピング、深度テスト、カラーブレンドなど、Point、ライン、ポリゴンレンダリングパイプラインの主要なステップを実装する小さなC ++ソフトウェアレンダラー/ラスターザーは、C ++、3Dモデル(GLTF)を使用してC ++、3Dモデル(GLTF)を使用して頂点シェーダーとフラグメントシェーダーをエミュレートします。また、このプロジェクトはOpenGLとVulkan Renderersの実装を追加し、実行中にリアルタイムでそれら(Software/OpenGL/Vulkan)を切り替えることができます。
このプロジェクトの目的は、最新のグラフィックプログラミングについて学びたい開発者に出発点を提供することです。
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
dFdx dFdyLod 、 Bias 、 OffsetLinearとして保存されますimguiに基づく構成パネルすべてのレンダラー(ソフトウェア/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 、すべてのモデルおよびスカイボックス素材のインデックスですsrc :メインソースコードディレクトリBase :ファイル、ハッシュ、タイマーなどの基本的なユーティリティクラス。Render :レンダラーの抽象化、頂点、テクスチャ、ユニフォーム、フレームバッファなどが含まれます。Software :ソフトウェアレンダラーの実装OpenGL :OpenGLレンダラーの実装Vulkan :Vulkanレンダラーの実装Viewer :GLTFロード(Assimpに基づく)、カメラとコントローラー、構成パネル、およびパス管理のレンダリングShader/GLSL :OpenGL&Vulkanレンダラー用GLSLシェーダーコード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ライセンスの下でライセンスされています(ライセンスを参照)。