Clean up depth format selection code

オープン
#224 コメント 0 件 リアクション 1 件 担当者 1 名 GitHub で見る

@SaschaWillems がすでに取り組んでいます。

2025年11月12日 から。

評価

この issue はまだ評価されていません。

説明

All samples that do depth buffering have code like this:

	void createDepthResources()
	{
		vk::Format depthFormat = findDepthFormat();

		createImage(swapChainExtent.width, swapChainExtent.height, depthFormat, vk::ImageTiling::eOptimal, vk::ImageUsageFlagBits::eDepthStencilAttachment, vk::MemoryPropertyFlagBits::eDeviceLocal, depthImage, depthImageMemory);
		depthImageView = createImageView(depthImage, depthFormat, vk::ImageAspectFlagBits::eDepth);
	}

	vk::Format findSupportedFormat(const std::vector<vk::Format> &candidates, vk::ImageTiling tiling, vk::FormatFeatureFlags features) const
	{
		for (const auto format : candidates)
		{
			vk::FormatProperties props = physicalDevice.getFormatProperties(format);

			if (tiling == vk::ImageTiling::eLinear && (props.linearTilingFeatures & features) == features)
			{
				return format;
			}
			if (tiling == vk::ImageTiling::eOptimal && (props.optimalTilingFeatures & features) == features)
			{
				return format;
			}
		}

		throw std::runtime_error("failed to find supported format!");
	}

	[[nodiscard]] vk::Format findDepthFormat() const
	{
		return findSupportedFormat(
		    {vk::Format::eD32Sfloat, vk::Format::eD32SfloatS8Uint, vk::Format::eD24UnormS8Uint},
		    vk::ImageTiling::eOptimal,
		    vk::FormatFeatureFlagBits::eDepthStencilAttachment);
	}

        ....
        // Somewhere in a function A
        vk::Format depthFormat = findDepthFormat();
        ....
        // Somewhere in a function B
        vk::Format depthFormat = findDepthFormat();
  • findDepthFormat is often called multiple times of just querying once and then storing it.
  • findSupportedFormat is only ever used in findDepthFormat
  • findDepthFormat is declared after the calling function(s) createDepthResources

There is potential here to simplify code and make it easier to follow.

主要言語
C++
スター
424
フォーク
127
平均マージ
2日 22時間
マージ済み PR(30日)
7

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

KhronosGroup/Vulkan-Tutorial のほかの issue

KhronosGroup/Vulkan-Tutorial の issue をすべて見る

似ている issue

C++ の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。