Move shader feature negotiation into renderer backend
This commit is contained in:
@@ -228,6 +228,17 @@ pp::renderer::RenderDeviceFeatures render_device_features(OpenGlCapabilities cap
|
||||
};
|
||||
}
|
||||
|
||||
OpenGlFeatureState detect_opengl_feature_state(
|
||||
std::span<const std::string_view> extensions,
|
||||
OpenGlRuntime runtime) noexcept
|
||||
{
|
||||
const auto capabilities = detect_opengl_capabilities(extensions, runtime);
|
||||
return OpenGlFeatureState {
|
||||
.capabilities = capabilities,
|
||||
.features = render_device_features(capabilities),
|
||||
};
|
||||
}
|
||||
|
||||
OpenGlInitialState panopainter_initial_state() noexcept
|
||||
{
|
||||
return OpenGlInitialState {
|
||||
@@ -369,6 +380,28 @@ pp::foundation::Result<std::vector<std::string>> query_opengl_extensions(
|
||||
return pp::foundation::Result<std::vector<std::string>>::success(std::move(extensions));
|
||||
}
|
||||
|
||||
pp::foundation::Result<OpenGlCapabilityDetectionResult> query_opengl_capability_detection(
|
||||
OpenGlExtensionQueryDispatch dispatch,
|
||||
OpenGlRuntime runtime)
|
||||
{
|
||||
auto extensions_result = query_opengl_extensions(dispatch);
|
||||
if (!extensions_result.ok()) {
|
||||
return pp::foundation::Result<OpenGlCapabilityDetectionResult>::failure(extensions_result.status());
|
||||
}
|
||||
|
||||
auto extensions = std::move(extensions_result.value());
|
||||
std::vector<std::string_view> extension_views;
|
||||
extension_views.reserve(extensions.size());
|
||||
for (const auto& extension : extensions) {
|
||||
extension_views.push_back(extension);
|
||||
}
|
||||
|
||||
return pp::foundation::Result<OpenGlCapabilityDetectionResult>::success(OpenGlCapabilityDetectionResult {
|
||||
.extensions = std::move(extensions),
|
||||
.feature_state = detect_opengl_feature_state(extension_views, runtime),
|
||||
});
|
||||
}
|
||||
|
||||
OpenGlDefaultClear panopainter_default_clear() noexcept
|
||||
{
|
||||
return OpenGlDefaultClear {
|
||||
|
||||
Reference in New Issue
Block a user