Simple 2D-Kamera-Bewegung implementiert

This commit is contained in:
mono 2019-02-14 07:04:30 +01:00
parent 3e47899971
commit 71e600b9c9
18 changed files with 2583 additions and 170 deletions

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/>
</startup>
</configuration>

56
src/Form1.Designer.cs generated
View File

@ -1,56 +0,0 @@
namespace JuicyGraphics {
partial class mainForm {
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing) {
if (disposing && (components != null)) {
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent() {
this.canvas2 = new JuicyGraphics.canvas();
((System.ComponentModel.ISupportInitialize)(this.canvas2)).BeginInit();
this.SuspendLayout();
//
// canvas2
//
this.canvas2.Dock = System.Windows.Forms.DockStyle.Fill;
this.canvas2.Location = new System.Drawing.Point(0, 0);
this.canvas2.Name = "canvas2";
this.canvas2.Size = new System.Drawing.Size(704, 521);
this.canvas2.TabIndex = 3;
this.canvas2.Text = "canvas2";
//
// mainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(704, 521);
this.Controls.Add(this.canvas2);
this.Name = "mainForm";
this.Text = "JuicyGraphics";
((System.ComponentModel.ISupportInitialize)(this.canvas2)).EndInit();
this.ResumeLayout(false);
}
#endregion
private canvas canvas2;
}
}

View File

@ -8,8 +8,9 @@
<OutputType>WinExe</OutputType>
<RootNamespace>JuicyGraphics</RootNamespace>
<AssemblyName>JuicyGraphics</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
@ -31,9 +32,14 @@
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<StartupObject />
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
@ -45,16 +51,21 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="canvas.cs">
<Compile Include="SharpGL\Matrix.cs" />
<Compile Include="JuicyGraphics\renderer\camera2D.cs" />
<Compile Include="JuicyGraphics\renderer\iGraphicalObject.cs" />
<Compile Include="JuicyGraphics\renderer\line.cs" />
<Compile Include="JuicyGraphics\renderer\renderCam.cs" />
<Compile Include="JuicyGraphics\ui\canvas.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Form1.cs">
<Compile Include="JuicyGraphics\ui\Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<Compile Include="JuicyGraphics\ui\Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="JuicyGraphics\Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SharpGL\DIBSection.cs" />
<Compile Include="SharpGL\Enumerations\OpenGLEnumerations.cs" />
@ -80,7 +91,7 @@
<Compile Include="SharpGL\VertexBuffers\VertexBuffer.cs" />
<Compile Include="SharpGL\VertexBuffers\VertexBufferArray.cs" />
<Compile Include="SharpGL\Win32.cs" />
<EmbeddedResource Include="Form1.resx">
<EmbeddedResource Include="JuicyGraphics\ui\Form1.resx">
<DependentUpon>Form1.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
@ -91,6 +102,7 @@
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
@ -105,6 +117,8 @@
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup />
<ItemGroup>
<Folder Include="JuicyGraphics\math\" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@ -0,0 +1,32 @@
using SharpGL;
using System.Numerics;
namespace Graphics {
class camera2D {
protected Matrix mat;
public Vector2 translation {
get {
return new Vector2((float)mat[0, 3], (float)mat[1, 3]);
}
set {
mat[0, 3] = value.X;
mat[1, 3] = value.Y;
}
}
public double scale {
get {
return mat[0, 0];
}
set {
mat[0, 0] = value;
mat[1, 1] = value;
}
}
public camera2D() {
mat = new Matrix(Matrix.Identity(4));
}
}
}

View File

@ -0,0 +1,7 @@
using SharpGL;
namespace Graphics.Objects {
interface iGraphicalObject {
void render(renderCam context);
}
}

View File

@ -0,0 +1,96 @@
using SharpGL;
using System.Numerics;
namespace Graphics.Objects {
class line : iGraphicalObject {
#region fields
Vector2 pt01;
Vector2 pt02;
double thickness01;
double thickness02;
double tilt01;
double tilt02;
#endregion
#region properties
#endregion
#region constructors
public line(Vector2 startPoint, Vector2 endPoint) {
pt01 = startPoint;
pt02 = endPoint;
thickness01 = 1.0;
thickness02 = 1.0;
tilt01 = 0.0;
tilt02 = 0.0;
}
public line(Vector2 startPoint, Vector2 endPoint, double thickness) {
pt01 = startPoint;
pt02 = endPoint;
thickness01 = thickness;
thickness02 = thickness;
tilt01 = 0.0;
tilt02 = 0.0;
}
public enum valueing { defineLinearThickness, defineBothTilts }
public line(Vector2 startPoint, Vector2 endPoint,
valueing defineType, double startPointParam, double endPointParam) {
pt01 = startPoint;
pt02 = endPoint;
switch (defineType) {
case valueing.defineLinearThickness:
thickness01 = startPointParam;
thickness02 = endPointParam;
tilt01 = 0.0;
tilt02 = 0.0;
break;
case valueing.defineBothTilts:
thickness01 = 1.0;
thickness02 = 1.0;
tilt01 = startPointParam;
tilt02 = endPointParam;
break;
default:
thickness01 = 1.0;
thickness02 = 1.0;
tilt01 = 0.0;
tilt02 = 0.0;
break;
}
}
public line(Vector2 startPoint, Vector2 endPoint,
double thickness, double tiltOfStartPoint, double tiltOfEndPoint) {
pt01 = startPoint;
pt02 = endPoint;
thickness01 = thickness;
thickness02 = thickness;
tilt01 = tiltOfStartPoint;
tilt02 = tiltOfEndPoint;
}
public line(Vector2 startPoint, Vector2 endPoint,
double thicknessOfStartPoint, double thicknessOfEndPoint,
double tiltOfStartPoint, double tiltOfEndPoint) {
pt01 = startPoint;
pt02 = endPoint;
thickness01 = thicknessOfStartPoint;
thickness02 = thicknessOfEndPoint;
tilt01 = tiltOfStartPoint;
tilt02 = tiltOfEndPoint;
}
#endregion
public void render(renderCam context) {
context.drawQuad(pt01, pt01 + new Vector2(0.03f, 0), pt02 + new Vector2(0.03f, 0), pt02);
}
}
}

View File

@ -0,0 +1,37 @@
using System.Windows.Forms;
using System.Numerics;
using SharpGL;
namespace Graphics {
class renderCam : camera2D {
OpenGL gl;
Control ownerControl;
public renderCam(OpenGL glContext, Control owner) : base() {
gl = glContext;
ownerControl = owner;
}
public void attacheMatrix() {
gl.MultMatrix(mat);
}
public void drawTriangle(Vector2 corner01, Vector2 corner02, Vector2 corner03) {
gl.Vertex(corner01);
gl.Vertex(corner02);
gl.Vertex(corner03);
}
public void drawQuad(Vector2 corner01, Vector2 corner02, Vector2 corner03, Vector2 corner04) {
gl.Vertex(corner01);
gl.Vertex(corner02);
gl.Vertex(corner03);
gl.Vertex(corner03);
gl.Vertex(corner04);
gl.Vertex(corner01);
}
}
}

138
src/JuicyGraphics/ui/Form1.Designer.cs generated Normal file
View File

@ -0,0 +1,138 @@
namespace JuicyGraphics {
partial class mainForm {
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing) {
if (disposing && (components != null)) {
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent() {
this.menuStrip1 = new System.Windows.Forms.MenuStrip();
this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.tabControl1 = new System.Windows.Forms.TabControl();
this.tabPage1 = new System.Windows.Forms.TabPage();
this.canvas1 = new JuicyGraphics.canvas();
this.tabPage2 = new System.Windows.Forms.TabPage();
this.menuStrip1.SuspendLayout();
this.tabControl1.SuspendLayout();
this.tabPage1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.canvas1)).BeginInit();
this.SuspendLayout();
//
// menuStrip1
//
this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.fileToolStripMenuItem,
this.editToolStripMenuItem});
this.menuStrip1.Location = new System.Drawing.Point(0, 0);
this.menuStrip1.Name = "menuStrip1";
this.menuStrip1.Size = new System.Drawing.Size(704, 24);
this.menuStrip1.TabIndex = 4;
this.menuStrip1.Text = "menuStrip1";
//
// fileToolStripMenuItem
//
this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20);
this.fileToolStripMenuItem.Text = "File";
//
// editToolStripMenuItem
//
this.editToolStripMenuItem.Name = "editToolStripMenuItem";
this.editToolStripMenuItem.Size = new System.Drawing.Size(39, 20);
this.editToolStripMenuItem.Text = "Edit";
//
// tabControl1
//
this.tabControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tabControl1.Controls.Add(this.tabPage1);
this.tabControl1.Controls.Add(this.tabPage2);
this.tabControl1.Location = new System.Drawing.Point(13, 28);
this.tabControl1.Name = "tabControl1";
this.tabControl1.SelectedIndex = 0;
this.tabControl1.Size = new System.Drawing.Size(679, 481);
this.tabControl1.TabIndex = 5;
//
// tabPage1
//
this.tabPage1.Controls.Add(this.canvas1);
this.tabPage1.Location = new System.Drawing.Point(4, 22);
this.tabPage1.Name = "tabPage1";
this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
this.tabPage1.Size = new System.Drawing.Size(671, 455);
this.tabPage1.TabIndex = 0;
this.tabPage1.Text = "Scene Editor";
this.tabPage1.UseVisualStyleBackColor = true;
//
// canvas1
//
this.canvas1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.canvas1.Location = new System.Drawing.Point(7, 7);
this.canvas1.Name = "canvas1";
this.canvas1.Size = new System.Drawing.Size(508, 442);
this.canvas1.TabIndex = 0;
this.canvas1.Text = "canvas1";
//
// tabPage2
//
this.tabPage2.Location = new System.Drawing.Point(4, 22);
this.tabPage2.Name = "tabPage2";
this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
this.tabPage2.Size = new System.Drawing.Size(671, 455);
this.tabPage2.TabIndex = 1;
this.tabPage2.Text = "Object Editor";
this.tabPage2.UseVisualStyleBackColor = true;
//
// mainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(704, 521);
this.Controls.Add(this.tabControl1);
this.Controls.Add(this.menuStrip1);
this.MainMenuStrip = this.menuStrip1;
this.Name = "mainForm";
this.Text = "JuicyGraphics";
this.menuStrip1.ResumeLayout(false);
this.menuStrip1.PerformLayout();
this.tabControl1.ResumeLayout(false);
this.tabPage1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.canvas1)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.MenuStrip menuStrip1;
private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem editToolStripMenuItem;
private System.Windows.Forms.TabControl tabControl1;
private System.Windows.Forms.TabPage tabPage1;
private canvas canvas1;
private System.Windows.Forms.TabPage tabPage2;
}
}

View File

@ -117,4 +117,7 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View File

@ -0,0 +1,160 @@
using System;
using System.Windows.Forms;
using System.Windows;
using SharpGL.Enumerations;
using SharpGL.Version;
using SharpGL;
using System.ComponentModel;
using Graphics;
using Graphics.Objects;
using System.Numerics;
using System.Drawing;
namespace JuicyGraphics {
class canvas : Control, ISupportInitialize {
OpenGL GL = new OpenGL();
renderCam rc;
public canvas() {
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.UserPaint, true);
InitializeOpenGL();
rc = new renderCam(GL, this);
}
void InitializeOpenGL() {
GL.Create(OpenGLVersion.OpenGL4_3, RenderContextType.NativeWindow, Width, Height, 32, this.Handle);
GL.ShadeModel(OpenGL.GL_SMOOTH);
GL.ClearDepth(1.0f);
GL.Enable(OpenGL.GL_DEPTH_TEST);
GL.DepthFunc(OpenGL.GL_LEQUAL);
GL.Hint(OpenGL.GL_PERSPECTIVE_CORRECTION_HINT, OpenGL.GL_NICEST);
GL.Viewport(0, 0, Width, Height);
}
bool renderingForDesigner() {
if (this == null)
return false;
if (LicenseManager.UsageMode == LicenseUsageMode.Designtime)
return true;
Control p = this.Parent;
while (p != null) {
if (p.GetType().FullName.Contains(".DesignerFrame"))
return true;
p = p.Parent;
}
return false;
}
protected override void OnPaintBackground(PaintEventArgs e) {
if (renderingForDesigner()) { base.OnPaintBackground(e); }
return;
}
protected override void OnPaint(PaintEventArgs e) {
if (renderingForDesigner()) {
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.UserPaint, true);
InitializeOpenGL();
}
GL.LoadIdentity();
GL.Ortho(-(Width / 2160.0), Width / 2160.0,
-(Height / 2160.0), Height / 2160.0,
-1, 1);
if (rc != null)
rc.attacheMatrix();
GL.MakeCurrent();
GL.ClearColor(0.3f, 0.35f, 0.7f, 1f);
GL.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
GL.Begin(BeginMode.Triangles);
GL.Color(0.9, 0.83, 0.1);
GL.Vertex(1.0, 1.0);
GL.Vertex(-1.0, -1.0);
GL.Vertex(-1.0, 1.0);
GL.Color(0, 0, 0);
line testLine = new line(new Vector2(-0.4f, 0.4f), new Vector2(0.4f, -0.4f));
testLine.render(rc);
GL.End();
GL.Flush();
var handleDeviceContext = e.Graphics.GetHdc();
GL.Blit(handleDeviceContext);
e.Graphics.ReleaseHdc(handleDeviceContext);
}
protected override void OnSizeChanged(EventArgs e) {
if (GL.RenderContextProvider == null)
return;
GL.SetDimensions(Width, Height);
GL.Viewport(0, 0, Width, Height);
Invalidate();
}
enum mouseInteractionMode { none, left, middle, right };
mouseInteractionMode pressedMouseButton = mouseInteractionMode.none;
Point prevMousePosition = Point.Empty;
protected override void OnMouseDown(MouseEventArgs e) {
switch (e.Button) {
case MouseButtons.Left:
pressedMouseButton = mouseInteractionMode.left;
break;
case MouseButtons.Middle:
pressedMouseButton = mouseInteractionMode.middle;
break;
case MouseButtons.Right:
pressedMouseButton = mouseInteractionMode.right;
break;
}
prevMousePosition = MousePosition;
}
protected override void OnMouseMove(MouseEventArgs e) {
switch (pressedMouseButton) {
case mouseInteractionMode.left:
break;
case mouseInteractionMode.middle:
rc.translation += new Vector2(MousePosition.X - prevMousePosition.X,
prevMousePosition.Y - MousePosition.Y) / 1080.0f;
Invalidate();
break;
case mouseInteractionMode.right:
break;
}
prevMousePosition = MousePosition;
}
protected override void OnMouseUp(MouseEventArgs e) {
switch (e.Button) {
case MouseButtons.Left:
if (pressedMouseButton == mouseInteractionMode.left)
pressedMouseButton = mouseInteractionMode.none;
break;
case MouseButtons.Middle:
if (pressedMouseButton == mouseInteractionMode.middle)
pressedMouseButton = mouseInteractionMode.none;
break;
case MouseButtons.Right:
if (pressedMouseButton == mouseInteractionMode.right)
pressedMouseButton = mouseInteractionMode.none;
break;
}
}
protected override void OnMouseWheel(MouseEventArgs e) {
rc.scale *= Math.Pow(1.0008, e.Delta);
Invalidate();
}
public void BeginInit() { }
public void EndInit() {
InitializeOpenGL();
OnSizeChanged(null);
}
}
}

View File

@ -9,6 +9,7 @@
//------------------------------------------------------------------------------
namespace JuicyGraphics.Properties {
using System;
/// <summary>
@ -37,7 +38,7 @@ namespace JuicyGraphics.Properties {
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if ((resourceMan == null)) {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("JuicyGraphics.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}

View File

@ -12,7 +12,7 @@ namespace JuicyGraphics.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.1.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));

2046
src/SharpGL/Matrix.cs Normal file

File diff suppressed because it is too large Load Diff

View File

@ -4,6 +4,7 @@ using System.ComponentModel;
using System.Runtime.InteropServices;
using SharpGL.RenderContextProviders;
using SharpGL.Version;
using System.Numerics;
namespace SharpGL
{
@ -3978,6 +3979,16 @@ namespace SharpGL
PostGLCall();
}
/// <summary>
/// Multiply the current matrix with the specified matrix.
/// </summary>
/// <param name="m">Points to 16 consecutive values that are used as the elements of a 4x4 column-major matrix.</param>
public void MultMatrix(Matrix m) {
PreGLCall();
glMultMatrixd(m.As1DArray);
PostGLCall();
}
/// <summary>
/// Multiply the current matrix with the specified matrix.
/// </summary>
@ -6003,12 +6014,22 @@ namespace SharpGL
return result;
}
/// <summary>
/// <summary>
/// Set the current vertex (must be called between 'Begin' and 'End').
/// </summary>
/// <param name="x">X Value.</param>
/// <param name="y">Y Value.</param>
public void Vertex(double x, double y)
/// <param name="vertex">The to the vertex pointing vector.</param>
public void Vertex(Vector2 vertex) {
PreGLCall();
glVertex2d(vertex.X, vertex.Y);
PostGLCall();
}
/// <summary>
/// Set the current vertex (must be called between 'Begin' and 'End').
/// </summary>
/// <param name="x">X Value.</param>
/// <param name="y">Y Value.</param>
public void Vertex(double x, double y)
{
PreGLCall();
glVertex2d(x, y);

View File

@ -38,8 +38,7 @@ namespace SharpGL
string name = delegateType.Name;
// ftlPhysicsGuy - Better way
Delegate del = null;
if (extensionFunctions.TryGetValue(name, out del) == false)
if (extensionFunctions.TryGetValue(name, out Delegate del) == false)
{
IntPtr proc = Win32.wglGetProcAddress(name);
if (proc == IntPtr.Zero)

View File

@ -1,85 +0,0 @@
using System;
using System.Windows.Forms;
using SharpGL.Enumerations;
using SharpGL.Version;
using SharpGL;
using System.ComponentModel;
namespace JuicyGraphics {
class canvas : Control, ISupportInitialize {
protected OpenGL GL = new OpenGL();
public canvas() {
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.UserPaint, true);
InitializeOpenGL();
}
protected void InitializeOpenGL() {
GL.Create(OpenGLVersion.OpenGL4_3, RenderContextType.NativeWindow, Width, Height, 32, this.Handle);
GL.ShadeModel(OpenGL.GL_SMOOTH);
GL.ClearDepth(1.0f);
GL.Enable(OpenGL.GL_DEPTH_TEST);
GL.DepthFunc(OpenGL.GL_LEQUAL);
GL.Hint(OpenGL.GL_PERSPECTIVE_CORRECTION_HINT, OpenGL.GL_NICEST);
GL.Viewport(0, 0, Width, Height);
}
bool renderingForDesigner() {
if (this == null)
return false;
if (LicenseManager.UsageMode == LicenseUsageMode.Designtime)
return true;
Control p = this.Parent;
while (p != null) {
if (p.GetType().FullName.Contains(".DesignerFrame"))
return true;
p = p.Parent;
}
return false;
}
protected override void OnPaintBackground(PaintEventArgs e) {
if (renderingForDesigner()) { base.OnPaintBackground(e); }
return;
}
protected override void OnPaint(PaintEventArgs e) {
if (renderingForDesigner()) {
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.UserPaint, true);
InitializeOpenGL();
}
GL.MakeCurrent();
GL.ClearColor(0f, 0.3f, 0.7f, 1f);
GL.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
GL.Begin(BeginMode.Triangles);
GL.Color(0.8, 0.1, 0.1);
GL.Vertex(1.0, 1.0);
GL.Vertex(-1.0, -1.0); GL.Vertex(-1.0, 1.0);
GL.End();
GL.Flush();
var handleDeviceContext = e.Graphics.GetHdc();
GL.Blit(handleDeviceContext);
e.Graphics.ReleaseHdc(handleDeviceContext);
}
protected override void OnSizeChanged(EventArgs e) {
if (GL.RenderContextProvider == null)
return;
GL.SetDimensions(Width, Height);
GL.Viewport(0, 0, Width, Height);
Invalidate();
}
public void BeginInit() { }
public void EndInit() {
InitializeOpenGL();
OnSizeChanged(null);
}
}
}