swiss ok, needs more benchmark
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user