Share retained runtime GL dispatch

This commit is contained in:
2026-06-05 15:30:33 +02:00
parent 0fb3bd09ac
commit 308fb13075
7 changed files with 67 additions and 35 deletions

View File

@@ -18,6 +18,7 @@
#include "legacy_app_startup_services.h"
#include "legacy_document_open_services.h"
#include "legacy_document_session_services.h"
#include "legacy_gl_runtime_dispatch.h"
#include "legacy_recording_services.h"
#include "legacy_ui_gl_dispatch.h"
#include "platform_api/platform_services.h"
@@ -37,11 +38,6 @@ std::condition_variable App::render_cv;
namespace {
[[nodiscard]] const char* query_opengl_string(std::uint32_t name) noexcept
{
return reinterpret_cast<const char*>(glGetString(static_cast<GLenum>(name)));
}
pp::app::CanvasToolMode canvas_tool_mode_from_canvas_mode(kCanvasMode mode) noexcept
{
switch (mode) {
@@ -393,9 +389,7 @@ void App::init()
{
App::I->install_render_debug_callback();
const auto runtime_info_result = pp::renderer::gl::query_opengl_runtime_info(
pp::renderer::gl::OpenGlRuntimeInfoDispatch {
.get_string = query_opengl_string,
});
pp::legacy::gl_runtime::runtime_info_dispatch());
if (runtime_info_result.ok())
{
const auto& runtime_info = runtime_info_result.value();

View File

@@ -1,5 +1,6 @@
#include "pch.h"
#include "app.h"
#include "legacy_gl_runtime_dispatch.h"
#include "renderer_api/shader_catalog.h"
#include "renderer_gl/opengl_capabilities.h"
#include "shader.h"
@@ -16,19 +17,6 @@ void apply_shader_manager_feature_state(pp::renderer::gl::OpenGlFeatureState fea
ShaderManager::set_render_device_features(feature_state.features);
}
void query_gl_integer(std::uint32_t name, std::int32_t* value) noexcept
{
GLint queried_value = 0;
glGetIntegerv(static_cast<GLenum>(name), &queried_value);
*value = static_cast<std::int32_t>(queried_value);
}
const char* query_gl_string_indexed(std::uint32_t name, std::uint32_t index) noexcept
{
return reinterpret_cast<const char*>(
glGetStringi(static_cast<GLenum>(name), static_cast<GLuint>(index)));
}
}
void App::initShaders()
@@ -40,10 +28,7 @@ void App::initShaders()
render_task([] {
const auto detection_result = pp::renderer::gl::query_opengl_capability_detection(
pp::renderer::gl::OpenGlExtensionQueryDispatch {
.get_integer = query_gl_integer,
.get_string_indexed = query_gl_string_indexed,
},
pp::legacy::gl_runtime::extension_query_dispatch(),
pp::renderer::gl::opengl_runtime_for_current_build());
if (!detection_result.ok()) {
LOG("OpenGL capability detection failed: %s", detection_result.status().message);

View File

@@ -0,0 +1,42 @@
#pragma once
#include <cstdint>
#include "renderer_gl/opengl_capabilities.h"
namespace pp::legacy::gl_runtime {
inline const char* query_opengl_string(std::uint32_t name) noexcept
{
return reinterpret_cast<const char*>(glGetString(static_cast<GLenum>(name)));
}
inline void query_opengl_integer_scalar(std::uint32_t name, std::int32_t* value) noexcept
{
GLint queried_value = 0;
glGetIntegerv(static_cast<GLenum>(name), &queried_value);
*value = static_cast<std::int32_t>(queried_value);
}
inline const char* query_opengl_indexed_string(std::uint32_t name, std::uint32_t index) noexcept
{
return reinterpret_cast<const char*>(
glGetStringi(static_cast<GLenum>(name), static_cast<GLuint>(index)));
}
inline pp::renderer::gl::OpenGlRuntimeInfoDispatch runtime_info_dispatch() noexcept
{
return pp::renderer::gl::OpenGlRuntimeInfoDispatch {
.get_string = query_opengl_string,
};
}
inline pp::renderer::gl::OpenGlExtensionQueryDispatch extension_query_dispatch() noexcept
{
return pp::renderer::gl::OpenGlExtensionQueryDispatch {
.get_integer = query_opengl_integer_scalar,
.get_string_indexed = query_opengl_indexed_string,
};
}
} // namespace pp::legacy::gl_runtime

View File

@@ -8,6 +8,7 @@
#include "canvas.h"
#include "keymap.h"
#include "hmd.h"
#include "legacy_gl_runtime_dispatch.h"
#include "renderer_gl/opengl_capabilities.h"
#include "platform_windows/windows_platform_services.h"
#include "../resource.h"
@@ -89,11 +90,6 @@ void win32_renderdoc_frame_start() { }
void win32_renderdoc_frame_end() { }
#endif
const char* query_opengl_string(std::uint32_t name) noexcept
{
return reinterpret_cast<const char*>(glGetString(static_cast<GLenum>(name)));
}
HRESULT(*GetDpiForMonitor_fn)(HMONITOR hmonitor, MONITOR_DPI_TYPE dpiType, UINT* dpiX, UINT* dpiY);
HRESULT(*SetProcessDpiAwareness_fn)(PROCESS_DPI_AWARENESS value);
void init_shcore_API()
@@ -860,9 +856,7 @@ int main(int argc, char** argv)
auto runtime_info = pp::renderer::gl::OpenGlRuntimeInfo {};
const auto runtime_info_result = pp::renderer::gl::query_opengl_runtime_info(
pp::renderer::gl::OpenGlRuntimeInfoDispatch {
.get_string = query_opengl_string,
});
pp::legacy::gl_runtime::runtime_info_dispatch());
if (runtime_info_result.ok()) {
runtime_info = runtime_info_result.value();
LOG("GL version: %s", runtime_info.version);