daily update on 20240424 by nitloady youmu

This commit is contained in:
YoumuLiu
2024-04-25 10:37:33 +08:00
parent 32c0a0f99b
commit dd6e8247bf
40 changed files with 568 additions and 119 deletions
@@ -114,7 +114,7 @@ namespace StgSharp.Graphics
}
[StructLayout(LayoutKind.Sequential)]
public unsafe struct GLFWvidmode
public unsafe struct glfwVideomode
{
/*! The refresh rate, in Hz, of the video mode.
@@ -140,7 +140,7 @@ namespace StgSharp.Graphics
}
[StructLayout(LayoutKind.Sequential)]
public unsafe struct GLFWgammaramp
public unsafe struct glfwGammaramp
{
/*! An array of value describing the response of the blue channel.
@@ -166,13 +166,13 @@ namespace StgSharp.Graphics
/*! The height, in pixels, of this image.
*/
private int height;
/*! The width, in pixels, of this image.
*/
private int width;
/*! The pixel data of this image, arranged left-to-right, top-to-bottom.
*/
private byte* pixels;
/*! The width, in pixels, of this image.
*/
private int width;
}
@@ -210,35 +210,36 @@ namespace StgSharp.Graphics
}
[StructLayout(LayoutKind.Sequential)]
public unsafe struct GLFWmonitor
public unsafe struct glfwMonitor
{
private GLFWvidmode currentMode;
private GLFWgammaramp currentRamp;
private fixed byte name[128];
private IntPtr userPointer;
private int width, height;
private glfwWindow* window;
private glfwVideomode* modes;
private int modeCount;
private glfwVideomode currentMode;
//GLFWvidmode* modes;
private IntPtr modes;
private glfwGammaramp originalRamp;
private glfwGammaramp currentRamp;
private byte[] name = new byte[128];
private GLFWgammaramp originalRamp;
private void* userPointer;
// Physical dimensions in millimeters.
private int widthMM, heightMM;
// The window whose video mode is current on this monitor
//glfwWindow* window;
private IntPtr window;
// not transformed
//GLFW_PLATFORM_MONITOR_STATE;
public GLFWmonitor()
public glfwMonitor()
{ }
public unsafe string Name
{
get
{
fixed (byte* cptr = name)
{
return Marshal.PtrToStringAnsi((IntPtr)cptr);
}
}
}
}
[StructLayout(LayoutKind.Sequential)]
@@ -256,7 +257,7 @@ namespace StgSharp.Graphics
int shouldClose;
void* userPointer;
int doublebuffer;
// GLFWvidmode videoMode; // 根据GLFWvidmode的定义转换
// glfwVideomode videoMode; // 根据GLFWvidmode的定义转换
IntPtr monitor; // _GLFWmonitor* monitor;
IntPtr cursor; // _GLFWcursor* cursor;
@@ -819,10 +820,10 @@ namespace StgSharp.Graphics
void (* getMonitorPos) (GLFWmonitor*, int*, int*);
void (* getMonitorContentScale) (GLFWmonitor*, float*, float*);
void (* getMonitorWorkarea) (GLFWmonitor*, int*, int*, int*, int*);
GLFWvidmode* (* getVideoModes) (GLFWmonitor*, int*);
void (* getVideoMode) (GLFWmonitor*, GLFWvidmode*);
GLFWbool(*getGammaRamp)(GLFWmonitor*, GLFWgammaramp*);
void (* setGammaRamp) (GLFWmonitor*,const GLFWgammaramp*);
glfwVideomode* (* getVideoModes) (GLFWmonitor*, int*);
void (* getVideoMode) (GLFWmonitor*, glfwVideomode*);
GLFWbool(*getGammaRamp)(GLFWmonitor*, glfwGammaramp*);
void (* setGammaRamp) (GLFWmonitor*,const glfwGammaramp*);
// window
GLFWbool(*createWindow)(glfwWindow*,const GLFWwndconfig*,const GLFWctxconfig*,const GLFWfbconfig*);
void (* destroyWindow) (glfwWindow*);
@@ -74,7 +74,7 @@ namespace StgSharp.Graphics
[UnmanagedFunctionPointer(callingConvention: CallingConvention.StdCall, CharSet = CharSet.Ansi)] internal unsafe delegate void glfwGetFramebufferSize(IntPtr window, int* width, int* height);
[UnmanagedFunctionPointer(callingConvention: CallingConvention.StdCall, CharSet = CharSet.Ansi)] internal unsafe delegate byte* glfwGetGamepadName(int jid);
[UnmanagedFunctionPointer(callingConvention: CallingConvention.StdCall, CharSet = CharSet.Ansi)] internal unsafe delegate int glfwGetGamepadState(int jid, GLFWgamepadstate* state);
[UnmanagedFunctionPointer(callingConvention: CallingConvention.StdCall, CharSet = CharSet.Ansi)] internal unsafe delegate GLFWgammaramp* glfwGetGammaRamp(IntPtr monitor);
[UnmanagedFunctionPointer(callingConvention: CallingConvention.StdCall, CharSet = CharSet.Ansi)] internal unsafe delegate glfwGammaramp* glfwGetGammaRamp(IntPtr monitor);
[UnmanagedFunctionPointer(callingConvention: CallingConvention.StdCall, CharSet = CharSet.Ansi)] internal unsafe delegate int glfwGetInputMode(IntPtr window, int mode);
[UnmanagedFunctionPointer(callingConvention: CallingConvention.StdCall, CharSet = CharSet.Ansi)] internal unsafe delegate float* glfwGetJoystickAxes(int jid, int* count);
[UnmanagedFunctionPointer(callingConvention: CallingConvention.StdCall, CharSet = CharSet.Ansi)] internal unsafe delegate byte* glfwGetJoystickButtons(int jid, int* count);
@@ -101,8 +101,8 @@ namespace StgSharp.Graphics
[UnmanagedFunctionPointer(callingConvention: CallingConvention.StdCall, CharSet = CharSet.Ansi)] internal unsafe delegate ulong* glfwGetTimerValue();
[UnmanagedFunctionPointer(callingConvention: CallingConvention.StdCall, CharSet = CharSet.Ansi)] internal unsafe delegate void glfwGetVersion(int* major, int* minor, int* rev);
[UnmanagedFunctionPointer(callingConvention: CallingConvention.StdCall, CharSet = CharSet.Ansi)] internal unsafe delegate byte* glfwGetVersionString();
[UnmanagedFunctionPointer(callingConvention: CallingConvention.StdCall, CharSet = CharSet.Ansi)] internal unsafe delegate GLFWvidmode* glfwGetVideoMode(IntPtr monitor);
[UnmanagedFunctionPointer(callingConvention: CallingConvention.StdCall, CharSet = CharSet.Ansi)] internal unsafe delegate GLFWvidmode* glfwGetVideoModes(IntPtr monitor, int* count);
[UnmanagedFunctionPointer(callingConvention: CallingConvention.StdCall, CharSet = CharSet.Ansi)] internal unsafe delegate glfwVideomode* glfwGetVideoMode(IntPtr monitor);
[UnmanagedFunctionPointer(callingConvention: CallingConvention.StdCall, CharSet = CharSet.Ansi)] internal unsafe delegate glfwVideomode* glfwGetVideoModes(IntPtr monitor, int* count);
[UnmanagedFunctionPointer(callingConvention: CallingConvention.StdCall, CharSet = CharSet.Ansi)] internal unsafe delegate int glfwGetWindowAttrib(IntPtr window, int attrib);
[UnmanagedFunctionPointer(callingConvention: CallingConvention.StdCall, CharSet = CharSet.Ansi)] internal unsafe delegate void glfwGetWindowContentScale(IntPtr window, float* xscale, float* yscale);
[UnmanagedFunctionPointer(callingConvention: CallingConvention.StdCall, CharSet = CharSet.Ansi)] internal unsafe delegate void glfwGetWindowFrameSize(IntPtr window, int* left, int* top, int* right, int* bottom);
@@ -135,7 +135,7 @@ namespace StgSharp.Graphics
[UnmanagedFunctionPointer(callingConvention: CallingConvention.StdCall, CharSet = CharSet.Ansi)] internal unsafe delegate GLFWerrorfun glfwSetErrorCallback(GLFWerrorfun callback);
[UnmanagedFunctionPointer(callingConvention: CallingConvention.StdCall, CharSet = CharSet.Ansi)] internal unsafe delegate FramebuffersizeHandler glfwSetFramebufferSizeCallback(IntPtr window, IntPtr callback);
[UnmanagedFunctionPointer(callingConvention: CallingConvention.StdCall, CharSet = CharSet.Ansi)] internal unsafe delegate void glfwSetGamma(IntPtr monitor, float gamma);
[UnmanagedFunctionPointer(callingConvention: CallingConvention.StdCall, CharSet = CharSet.Ansi)] internal unsafe delegate void glfwSetGammaRamp(IntPtr monitor, GLFWgammaramp* ramp);
[UnmanagedFunctionPointer(callingConvention: CallingConvention.StdCall, CharSet = CharSet.Ansi)] internal unsafe delegate void glfwSetGammaRamp(IntPtr monitor, glfwGammaramp* ramp);
[UnmanagedFunctionPointer(callingConvention: CallingConvention.StdCall, CharSet = CharSet.Ansi)] internal unsafe delegate void glfwSetInputMode(IntPtr window, int mode, int value);
[UnmanagedFunctionPointer(callingConvention: CallingConvention.StdCall, CharSet = CharSet.Ansi)] internal unsafe delegate GLFWjoystickfun glfwSetJoystickCallback(GLFWjoystickfun callback);
[UnmanagedFunctionPointer(callingConvention: CallingConvention.StdCall, CharSet = CharSet.Ansi)] internal unsafe delegate void glfwSetJoystickUserPointer(int jid, void* pointer);
+11 -14
View File
@@ -90,7 +90,11 @@ namespace StgSharp.Graphics
public int Height
{
get => height;
set => height = value;
set
{
height = value;
InternalIO.glfwSetWindowSize(windowID, Width, Height);
}
}
public bool ShouldClose
@@ -109,6 +113,7 @@ namespace StgSharp.Graphics
{
width = (int)value.X;
height = (int)value.Y;
InternalIO.glfwSetWindowSize(windowID, Width, Height);
}
}
@@ -118,7 +123,11 @@ namespace StgSharp.Graphics
public int Width
{
get => width;
set => width = value;
set
{
width = value;
InternalIO.glfwSetWindowSize(windowID, Width, Height);
}
}
@@ -206,18 +215,6 @@ namespace StgSharp.Graphics
public void SetSizeLimit(int minWidth, int minHeight, int maxWidth, int maxHeight)
{ InternalIO.glfwSetWindowSizeLimits(this.windowID, minWidth, minHeight, maxWidth, maxHeight); }
#region form main
[MethodImpl(MethodImplOptions.AggressiveInlining)]
internal void InternalDeInit() { DeInit(); }
unsafe ~Form() { Marshal.FreeHGlobal(graphicContextID); }
#endregion form main
}
@@ -15,6 +15,16 @@ namespace StgSharp.Graphics
set { ContextHandle = value; }
}
internal sealed override void CreateCanvas((int width, int height, int depth) size, (int x_stretch, int y_stretch, int z_stretch) coordStrech, string name)
{
Width = size.width; Height = size.height;
Depth = size.depth;
_coordStretch = coordStrech;
Name = name;
}
/// <summary>
/// Init an OpenGl context if current form has not been binded to any context. and set the context binded to
/// current form as current OpenGL context.
@@ -28,8 +28,11 @@
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
using StgSharp.Math;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@@ -38,6 +41,9 @@ namespace StgSharp.Graphics
{
public abstract class RenderStream
{
protected (int x, int y, int z) _coordStretch;
private int refDepth;
protected Camera NativeCamera;
private IntPtr canvasHandle;
private IntPtr contextHandle;
@@ -59,12 +65,30 @@ namespace StgSharp.Graphics
get => contextHandle;
internal set => contextHandle = value;
}
public int Depth
{
get => refDepth;
internal set => refDepth = value;
}
public int Height
{
get => height;
internal set => height = value;
}
public vec3d GlobalCoordSize
{
get
{
return (
Width * 1.0f / _coordStrech.x,
Height * 1.0f / _coordStrech.y,
refDepth * 1.0f / _coordStrech.z);
}
}
public IntPtr Monitor
{
get => monitor;
@@ -89,6 +113,10 @@ namespace StgSharp.Graphics
internal set => width = value;
}
internal abstract void CreateCanvas(
(int width,int height,int depth) size, (int x_stretch,int y_stretch, int z_stretch) coordStrech, string name
);
protected abstract void Init();
protected abstract void Main();
protected abstract void Deinit();
+4 -4
View File
@@ -81,15 +81,15 @@ namespace StgSharp
[DllImport(SSC_libname, EntryPoint = "glfwSetMonitorCallback")] internal static extern unsafe GLFWmonitorfun glfwSetMonitorCallback(GLFWmonitorfun callback);
[DllImport(SSC_libname, EntryPoint = "glfwGetVideoModes")] internal static extern unsafe GLFWvidmode* glfwGetVideoModes(IntPtr monitor, int* count);
[DllImport(SSC_libname, EntryPoint = "glfwGetVideoModes")] internal static extern unsafe glfwVideomode* glfwGetVideoModes(IntPtr monitor, int* count);
[DllImport(SSC_libname, EntryPoint = "glfwGetVideoMode")] internal static extern unsafe GLFWvidmode* glfwGetVideoMode(IntPtr monitor);
[DllImport(SSC_libname, EntryPoint = "glfwGetVideoMode")] internal static extern unsafe glfwVideomode* glfwGetVideoMode(IntPtr monitor);
[DllImport(SSC_libname, EntryPoint = "glfwSetGamma")] internal static extern unsafe void glfwSetGamma(IntPtr monitor, float gamma);
[DllImport(SSC_libname, EntryPoint = "glfwGetGammaRamp")] internal static extern unsafe GLFWgammaramp* glfwGetGammaRamp(IntPtr monitor);
[DllImport(SSC_libname, EntryPoint = "glfwGetGammaRamp")] internal static extern unsafe glfwGammaramp* glfwGetGammaRamp(IntPtr monitor);
[DllImport(SSC_libname, EntryPoint = "glfwSetGammaRamp")] internal static extern unsafe void glfwSetGammaRamp(IntPtr monitor, GLFWgammaramp* ramp);
[DllImport(SSC_libname, EntryPoint = "glfwSetGammaRamp")] internal static extern unsafe void glfwSetGammaRamp(IntPtr monitor, glfwGammaramp* ramp);
[DllImport(SSC_libname, EntryPoint = "glfwDefaultWindowHints")] internal static extern unsafe void glfwDefaultWindowHints();