swiss ok, needs more benchmark

This commit is contained in:
Youmu Liu
2026-03-06 18:22:30 +08:00
parent 83997f64d0
commit f6e897ed06
70 changed files with 1889 additions and 3371 deletions
@@ -66,7 +66,7 @@ namespace StgSharp.Graphics.OpenGL
}
public class Shader : ISSDSerializable
public class Shader
{
private readonly OpenGLFunction GL;
@@ -84,8 +84,6 @@ namespace StgSharp.Graphics.OpenGL
type = usage;
}
public SerializableTypeCode SSDTypeCode => SerializableTypeCode.Shader;
/// <summary>
/// Attach one shader code to a shader program.
/// </summary>
+53 -49
View File
@@ -2,8 +2,8 @@
// -----------------------------------------------------------------------
// file="glApiManager"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// AuthorGroup: Nitload
// Copyright (c) Nitload. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
@@ -25,11 +25,9 @@
//
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using StgSharp.Internal;
using StgSharp.Mathematics;
using StgSharp.Mathematics;
using StgSharp.MVVM;
using StgSharp.MVVM;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -52,15 +50,15 @@ namespace StgSharp.Graphics.OpenGL
"OpenGL SC "
};
private static string glExtensionList;
/// <summary>
/// Load all supported OpenGL APIs and bind them to given <see cref="ViewPort" />.
/// </summary>
/// <param _label="contextHandle">
/// The handle to current OpenGL viewPortDisplay
/// </param>
public static unsafe void LoadOpenGLApiTo(IntPtr contextHandle)
public static unsafe void LoadOpenGLApiTo(
IntPtr contextHandle
)
{
OpenglContext* context = (OpenglContext*)contextHandle;
if (context->glGetString != null) {
@@ -81,12 +79,13 @@ namespace StgSharp.Graphics.OpenGL
if (context->glGetString(glVersion) == null) {
DefaultLog.InternalWriteLog("Failed to call glGetString", LogType.Error);
}
coreVersion = Marshal.PtrToStringAnsi((nint)context->glGetString(glVersion)) ?? string.Empty;
coreVersion = Marshal.PtrToStringAnsi((nint)context->glGetString(glVersion)) ??
string.Empty;
foreach (string branch in glBranch)
{
if (coreVersion.Contains(branch)) {
coreVersion.Replace(branch, string.Empty);
if (coreVersion.Contains(branch, StringComparison.Ordinal)) {
coreVersion.Replace(branch, string.Empty, StringComparison.Ordinal);
}
}
string[] versionSep = coreVersion!.Split('.');
@@ -163,182 +162,182 @@ namespace StgSharp.Graphics.OpenGL
if (extensions.Contains("gl_AMD_blend_minmax_factor"))
{
AMD_blend_minmax_factor = true;
extensions.Remove("glAMD_blend_minmax_factor");
extensions.Remove("gl_AMD_blend_minmax_factor");
}
if (extensions.Contains("gl_AMD_conservative_depth"))
{
AMD_conservative_depth = true;
extensions.Remove("glAMD_conservative_depth");
extensions.Remove("gl_AMD_conservative_depth");
}
if (extensions.Contains("gl_AMD_debug_output"))
{
AMD_debug_output = true;
extensions.Remove("glAMD_debug_output");
extensions.Remove("gl_AMD_debug_output");
}
if (extensions.Contains("gl_AMD_depth_clamp_separate"))
{
AMD_depth_clamp_separate = true;
extensions.Remove("glAMD_depth_clamp_separate");
extensions.Remove("gl_AMD_depth_clamp_separate");
}
if (extensions.Contains("gl_AMD_draw_buffers_blend"))
{
AMD_draw_buffers_blend = true;
extensions.Remove("glAMD_draw_buffers_blend");
extensions.Remove("gl_AMD_draw_buffers_blend");
}
if (extensions.Contains("gl_AMD_framebuffer_multisample_advanced"))
{
AMD_framebuffer_multisample_advanced = true;
extensions.Remove("glAMD_framebuffer_multisample_advanced");
extensions.Remove("gl_AMD_framebuffer_multisample_advanced");
}
if (extensions.Contains("gl_AMD_framebuffer_sample_positions"))
{
AMD_framebuffer_sample_positions = true;
extensions.Remove("glAMD_framebuffer_sample_positions");
extensions.Remove("gl_AMD_framebuffer_sample_positions");
}
if (extensions.Contains("gl_AMD_gcn_shader"))
{
AMD_gcn_shader = true;
extensions.Remove("glAMD_gcn_shader");
extensions.Remove("gl_AMD_gcn_shader");
}
if (extensions.Contains("gl_AMD_gpu_shader_half_float"))
{
AMD_gpu_shader_half_float = true;
extensions.Remove("glAMD_gpu_shader_half_float");
extensions.Remove("gl_AMD_gpu_shader_half_float");
}
if (extensions.Contains("gl_AMD_gpu_shader_int16"))
{
AMD_gpu_shader_int16 = true;
extensions.Remove("glAMD_gpu_shader_int16");
extensions.Remove("gl_AMD_gpu_shader_int16");
}
if (extensions.Contains("gl_AMD_gpu_shader_int64"))
{
AMD_gpu_shader_int64 = true;
extensions.Remove("glAMD_gpu_shader_int64");
extensions.Remove("gl_AMD_gpu_shader_int64");
}
if (extensions.Contains("gl_AMD_interleaved_elements"))
{
AMD_interleaved_elements = true;
extensions.Remove("glAMD_interleaved_elements");
extensions.Remove("gl_AMD_interleaved_elements");
}
if (extensions.Contains("gl_AMD_multi_draw_indirect"))
{
AMD_multi_draw_indirect = true;
extensions.Remove("glAMD_multi_draw_indirect");
extensions.Remove("gl_AMD_multi_draw_indirect");
}
if (extensions.Contains("gl_AMD_name_gen_delete"))
{
AMD_name_gen_delete = true;
extensions.Remove("glAMD_name_gen_delete");
extensions.Remove("gl_AMD_name_gen_delete");
}
if (extensions.Contains("gl_AMD_occlusion_query_event"))
{
AMD_occlusion_query_event = true;
extensions.Remove("glAMD_occlusion_query_event");
extensions.Remove("gl_AMD_occlusion_query_event");
}
if (extensions.Contains("gl_AMD_performance_monitor"))
{
AMD_performance_monitor = true;
extensions.Remove("glAMD_performance_monitor");
extensions.Remove("gl_AMD_performance_monitor");
}
if (extensions.Contains("gl_AMD_pinned_memory"))
{
AMD_pinned_memory = true;
extensions.Remove("glAMD_pinned_memory");
extensions.Remove("gl_AMD_pinned_memory");
}
if (extensions.Contains("gl_AMD_query_buffer_object"))
{
AMD_query_buffer_object = true;
extensions.Remove("glAMD_query_buffer_object");
extensions.Remove("gl_AMD_query_buffer_object");
}
if (extensions.Contains("gl_AMD_sample_positions"))
{
AMD_sample_positions = true;
extensions.Remove("glAMD_sample_positions");
extensions.Remove("gl_AMD_sample_positions");
}
if (extensions.Contains("gl_AMD_seamless_cubemap_per_texture"))
{
AMD_seamless_cubemap_per_texture = true;
extensions.Remove("glAMD_seamless_cubemap_per_texture");
extensions.Remove("gl_AMD_seamless_cubemap_per_texture");
}
if (extensions.Contains("gl_AMD_shader_atomic_counter_ops"))
{
AMD_shader_atomic_counter_ops = true;
extensions.Remove("glAMD_shader_atomic_counter_ops");
extensions.Remove("gl_AMD_shader_atomic_counter_ops");
}
if (extensions.Contains("gl_AMD_shader_ballot"))
{
AMD_shader_ballot = true;
extensions.Remove("glAMD_shader_ballot");
extensions.Remove("gl_AMD_shader_ballot");
}
if (extensions.Contains("gl_AMD_shader_explicit_vertex_parameter"))
{
AMD_shader_explicit_vertex_parameter = true;
extensions.Remove("glAMD_shader_explicit_vertex_parameter");
extensions.Remove("gl_AMD_shader_explicit_vertex_parameter");
}
if (extensions.Contains("gl_AMD_shader_gpu_shader_half_float_fetch"))
{
AMD_shader_gpu_shader_half_float_fetch = true;
extensions.Remove("glAMD_shader_gpu_shader_half_float_fetch");
extensions.Remove("gl_AMD_shader_gpu_shader_half_float_fetch");
}
if (extensions.Contains("gl_AMD_shader_image_load_store_lod"))
{
AMD_shader_image_load_store_lod = true;
extensions.Remove("glAMD_shader_image_load_store_lod");
extensions.Remove("gl_AMD_shader_image_load_store_lod");
}
if (extensions.Contains("gl_AMD_shader_stencil_export"))
{
AMD_shader_stencil_export = true;
extensions.Remove("glAMD_shader_stencil_export");
extensions.Remove("gl_AMD_shader_stencil_export");
}
if (extensions.Contains("gl_AMD_shader_trinary_minmax"))
{
AMD_shader_trinary_minmax = true;
extensions.Remove("glAMD_shader_trinary_minmax");
extensions.Remove("gl_AMD_shader_trinary_minmax");
}
if (extensions.Contains("gl_AMD_sparse_texture"))
{
AMD_sparse_texture = true;
extensions.Remove("glAMD_sparse_texture");
extensions.Remove("gl_AMD_sparse_texture");
}
if (extensions.Contains("gl_AMD_stencil_operation_extended"))
{
AMD_stencil_operation_extended = true;
extensions.Remove("glAMD_stencil_operation_extended");
extensions.Remove("gl_AMD_stencil_operation_extended");
}
if (extensions.Contains("gl_AMD_texture_gather_bias_lod"))
{
AMD_texture_gather_bias_lod = true;
extensions.Remove("glAMD_texture_gather_bias_lod");
extensions.Remove("gl_AMD_texture_gather_bias_lod");
}
if (extensions.Contains("gl_AMD_texture_texture4"))
{
AMD_texture_texture4 = true;
extensions.Remove("glAMD_texture_texture4");
extensions.Remove("gl_AMD_texture_texture4");
}
if (extensions.Contains("gl_AMD_transform_feedback3_lines_triangles"))
{
AMD_transform_feedback3_lines_triangles = true;
extensions.Remove("glAMD_transform_feedback3_lines_triangles");
extensions.Remove("gl_AMD_transform_feedback3_lines_triangles");
}
if (extensions.Contains("gl_AMD_transform_feedback4"))
{
AMD_transform_feedback4 = true;
extensions.Remove("glAMD_transform_feedback4");
extensions.Remove("gl_AMD_transform_feedback4");
}
if (extensions.Contains("gl_AMD_vertex_shader_layer"))
{
AMD_vertex_shader_layer = true;
extensions.Remove("glAMD_vertex_shader_layer");
extensions.Remove("gl_AMD_vertex_shader_layer");
}
if (extensions.Contains("gl_AMD_vertex_shader_tessellator"))
{
AMD_vertex_shader_tessellator = true;
extensions.Remove("glAMD_vertex_shader_tessellator");
extensions.Remove("gl_AMD_vertex_shader_tessellator");
}
if (extensions.Contains("gl_AMD_vertex_shader_viewport_index"))
{
AMD_vertex_shader_viewport_index = true;
extensions.Remove("glAMD_vertex_shader_viewport_index");
extensions.Remove("gl_AMD_vertex_shader_viewport_index");
}
if (extensions.Contains("gl_APPLE_aux_depth_stencil"))
{
@@ -3244,7 +3243,10 @@ namespace StgSharp.Graphics.OpenGL
#endregion checkGLextensions
}
internal static void CheckCoreVersion(int majorVersion, int minorVersion)
internal static void CheckCoreVersion(
int majorVersion,
int minorVersion
)
{
if (majorVersion < 3) {
throw new InvalidOperationException(
@@ -3410,7 +3412,9 @@ namespace StgSharp.Graphics.OpenGL
}
}
internal static unsafe string GetExtensions(this OpenglContext context)
internal static unsafe string GetExtensions(
this OpenglContext context
)
{
if (context.glGetString == null) {
return string.Empty;
+1 -28
View File
@@ -50,10 +50,7 @@ namespace StgSharp.Graphics.OpenGL
private OpenGLFunction _context;
protected internal OpenGLFunction GL
{
get { return _context; }
}
protected internal OpenGLFunction GL => _context;
/// <summary>
/// Initialize an opengl context and load all opengl functions.
@@ -169,29 +166,5 @@ namespace StgSharp.Graphics.OpenGL
NativeCamera.SetViewDirection(position, direction, up);
}
#region Key Control
protected KeyStatus CheckKey(
KeyboardKey key
)
{
return GraphicFramework.glfwGetKey(this.CanvasHandle, (int)key);
}
protected KeyStatus CheckKey(
Mouse key
)
{
return GraphicFramework.glfwGetKey(this.CanvasHandle, (int)key);
}
protected KeyStatus CheckKey(
Joystick key
)
{
return GraphicFramework.glfwGetKey(this.CanvasHandle, (int)key);
}
#endregion
}
}