๊ฐ๋จํ ๋งํด์: OpenTK์ ํจ๊ป ์ฌ์ฉ๋๋ OpenGL Render Control์ ์ข ๋ฅ๊ฐ ๊ณํ๋์ด ์์ต๋๊น?
ํน๋ณํ ๊ณํ๋ ๊ฒ์ ์๋์ง๋ง ์ถฉ๋ถํ ์ฝ๊ฒ ํ ์ ์์ต๋๋ค. OpenTK๊ฐ MIT ๋ผ์ด์ ์ค๋ฅผ ๋ฐ์ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ฏ๋ก Eto.Forms์ ์ ๋ง์ต๋๋ค.
Eto.Forms์ OpenTK์ ๋ํ ์ผ์ข ์ ๋ํผ๊ฐ ์๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด ๋์ ํ๋ซํผ์ ๊ธฐ๋ฐ์ผ๋ก ๋ค๋ฅธ ์ฐธ์กฐ๋ก ์ฑ์ ์ปดํ์ผํด์ผ ํ๋ฏ๋ก ๋ช ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์ ์ ์์ต๋๋ค.
Windows, Gtk ๋ฐ Mac์ฉ์ผ๋ก ๋ณ๋์ ํ๋ซํผ DLL์ด ์๋ ๊ฒ์ ๊ด์ฐฐํ๋๋ฐ ํ๋ซํผ๋ณ ์ฝ๋๋ฅผ ๋ฐฐ์นํ ์์น๊ฐ ์๋ ์ ์์ต๋๋ค.
OpenTK๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ด๋ฏธ ํ์ํ ์ฐธ์กฐ๊ฐ ํฌํจ๋์ด ์์ ๊ฐ๋ฅ์ฑ์ด ๋๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด Eto.Platform.*.dll์ ์ฝ๋๋ฅผ ์ถ๊ฐํ ์ ์๋ ํ๋์ ๊ณตํต ํ๋ซํผ ๋
๋ฆฝ OpenTK.dll๊ณผ ํ๋ซํผ๋ณ ํ๋๋ฅผ ์ฐธ์กฐํด์ผ ํฉ๋๋ค.
์ ๋ https://github.com/hultqvist/opentk ์ ์๋ OpenTK ํฌํฌ๋ฅผ ์์ ํ๊ณ ์ ๊ฑฐํ๋ ์์
์ ํด์์ต๋๋ค.
๊ทธ๋ฌ๋ ํฌํฌ์๋ ์๋ Opentk ํ๋ก์ ํธ(์ฃผ๋ก ์ด ๋ฒกํฐ ์ฌ์ฉ)์ ํธํ๋์ง ์๋ ๋ช ๊ฐ์ง ์ฃผ์ ์์ ์ฌํญ์ด ์์ต๋๋ค.
์ฌ์ ํ ๋ด๊ฐ ๋งํ๋ ๋ถ๋ถ์ ๊ทธ ์ ์์ ๋ณ๊ฒฝ๋์ง ์์์ต๋๋ค. ํนํ Windows ๋ฐ Gtk์ฉ OpenTK.GLControl ๋ฐ OpenTK.GLWidget ํ๋ก์ ํธ ๊ฐ๊ฐ Mac์ฉ์ผ๋ก ๋น์ทํ ๊ฒ์ ๋ง๋ค ์ ์์ง๋ง ํ์ฌ ์ ์ผํ ๊ตฌํ์ ์๋ณธ์์ ๊ฐ์ ธ์จ ๊ฒ์ ๋๋ค. OpenTK ๊ฒ์์ฐฝ ํด๋์ค.
์ฌ์ค ๊ทธ๋ ๊ฒ ํ๋ ๊ฒ๋ ๋ฐฉ๋ฒ์ผ ๊ฒ์ ๋๋ค.
๋๋ ์ด๊ฒ์ ์กฐ๊ธ ๋ณด์๋ค - MonoMac์ด MonoMac.dll์ ๋ด์ฅ๋ ์ฌ์ฉ์ ์ ์ OpenTK๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ๋ถํํ ์ผ์ ๋๋ค. ์ฐ๋ฆฌ๋ ๋ถํํ๋ ์ ์ฒด API ์ฃผ์์ ๋ํผ๋ฅผ ๋ง๋ค์ด์ผ ํ ์๋ ์์ต๋๋ค.
์ฌ๊ธฐ์์ eto์ ๋ํ OpenGL ์ปจํธ๋กค์ด ์งํ๋์์ต๋๋ค.
์ด OpenGL ์ปจํธ๋กค์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ํ์ ๋๊น?
๋๋ ๊ทธ๊ฒ์ ์๋ํ์ง ์์๊ธฐ ๋๋ฌธ์ ํ์คํ์ง ์์ง๋ง SharpFlame์์ ์๋ํ๋ ์คํฌ๋ฆฐ ์ท์ ๋ณด์์ง๋ง.. @bchavez , OpenGL ์ปจํธ๋กค์ ์ํ์ ๋ํ ์์ธํ ์ ๋ณด๊ฐ ์์ต๋๊น?
Eto.Gl
- _Eto Control_์ด์ง๋ง ์์ง API๋ฅผ ์ ์ํํ์ง ์์์ต๋๋ค.Eto.Gl.Windows
- ํ๋ซํผ๋ณ GL์ Eto.Gl
์ฌ์ฉํ๋ Windows์์ ์๋ ๊ทธ๋๋ก ์๋ํด์ผ ํฉ๋๋ค.Eto.Gl.Linux
- ์๋ก์ด eto ๋ณ๊ฒฝ ์ฌํญ์ผ๋ก ์ธํด Linux์ ํ๋ซํผ๋ณ GL์ ์
๋ฐ์ดํธํด์ผ ํฉ๋๋ค. ์
๋ฐ์ดํธํ๊ธฐ๊ฐ ์ด๋ ต์ง ์์์ผ ํฉ๋๋ค. ์๊ฐ์ด ์ถฉ๋ถํ์ง ์์์ ๋ฟ์
๋๋ค.Eto.Gl.Mac
- ์์ง ํด๊ฒฐํด์ผ ํ๋ ๋ค์ ์ด๋ ค์ด _gotcha_ ๋ฌธ์ ์
๋๋ค.Mac/OSX์ ํ ๊ฐ์ง ์ฃผ์ ๋ฌธ์ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋์ผํ ์ฑ ๋ด์์ ์์ฑ๋ ์๋ก์ด GL ์ปจํ
์คํธ๊ฐ ๋ฆฌ์์ค๋ฅผ ๊ณต์ ํ์ง ์๋๋ค๋ ๊ฒ์
๋๋ค. ์ฆ, ํ๋ฉด๋น ๊ฒฉ๋ฆฌ๋ GL ๋ฆฌ์์ค ์ปจํ
์คํธ๋ฅผ ์ป์ต๋๋ค. IE: ์ฌ๋ฌ GL ํ๋ฉด์ ์ฌ์ฉํ๋ ์ฑ์ด ์๋ ๊ฒฝ์ฐ ํ๋ฉด๋น n
๋ฒ ํ
์ค์ฒ๋ฅผ ๋ก๋ํด์ผ ํ๋ฉฐ n
์ ํ
์ค์ฒ ๋ฉ๋ชจ๋ฆฌ ์์
์ด ๋์์ Linux์ Windows์์ ๋ค๋ฅด๋ฉฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ก์ด OpenGL ์ปจํ
์คํธ๋ ๋ฆฌ์์ค๋ฅผ ๊ณต์ ํฉ๋๋ค(๋์ผํ ์ฑ ๋ด์์). ๋ฐ๋ผ์ ๋์ผํ ์ฑ ๋ด์ ์ฌ๋ฌ GL ํ๋ฉด(Linux ๋๋ Windows)์ด ์๊ณ ํ
์ค์ฒ๋ฅผ ๋ก๋ํ๋ ๊ฒฝ์ฐ ํ๋ฉด๋น n
๋ฒ์ด ์๋๋ผ ํ
์ค์ฒ ๋ฆฌ์์ค๋ฅผ ํ ๋ฒ๋ง ๋ก๋ํ๋ ๊ฒ์
๋๋ค.
Mac์์ ์๋ํ๋๋ก ํ๊ธฐ ์ํด ์๋ํ ํดํน ์๋ ์ค ์ผ๋ถ๋ MacGLView1-7.cs
.
https://github.com/bchavez/SharpFlame/tree/eto/source/Eto.Gl.Mac
๊ฒฐ๊ตญ ๋(๋๋ ๋ค๋ฅธ ๋๊ตฐ๊ฐ)๊ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ฌ ํ๋ซํผ ๊ฐ์ ์ผ๊ด๋ ๋์์ ์ํํ ๊ฒ์ ๋๋ค. atm ์๊ฐ์ด ์ถฉ๋ถํ์ง ์์์ต๋๋ค.
๋ฌธ์ ์ ๋ํ OSX ๋ฌธ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ช ํํํ๊ธฐ ์ํด "GL ์ปจํ ์คํธ"๋ ํนํ GL ๋ฆฌ์์ค ์ปจํ ์คํธ๋ฅผ ์๋ฏธํฉ๋๋ค . (์ ๋งํฌ์ ์ค๋ช ๋ ๊ณต์ ๊ฐ์ฒด ์ํ).
์ ๋ฆฌํด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. ๋๋ ์ด๋ฏธ Windows์ Linux์์ ์๋ํ๋๋ก ์๋ํ์ต๋๋ค.
Windows๋ Wpf์์ ์ ์๋ํ์ง๋ง Gtk#2๊ฐ ์๋ Linux์์๋ ์๋ํ์ง ์์ต๋๋ค. http://hastebin.com/okewirerem
๋ค์์ ์ฝ๋๋ฅผ ์ดํด๋ณด๊ณ ์ถ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค. https://github.com/PowerOfCode/Eto/tree/opengl-control/Source/Eto.Gl.Gtk
๋๋ ๊ทธ๊ฒ์ด ํ ์คํธ ๋ ๋๋ง๊ณผ ๊ด๋ จ์ด ์๋ค๋ ๊ฒ์ ์์์ต๋๋ค. ํ ์คํธ๋ฅผ ๋ ๋๋งํ๋ ๋ ์ด์์์ ๋ํ ๋ค๋ฅธ ์ปจํธ๋กค์ด ์๋ ๊ฒฝ์ฐ ์ฆ์ ์ถฉ๋ํฉ๋๋ค. ํด๋น ์ปจํธ๋กค์ ํ ์คํธ๊ฐ ๋์ ๋น์ด ์์ผ๋ฉด ์ถฉ๋ํ์ง ์์ต๋๋ค.
์, ์ด์ํ๋ค์.
@benklett
๋๋ ๊ฐ์ ๋ฌธ์ ์ ๋ถ๋ช์ณค๋ค. ์ฌ์ ํ ์์ ์ฌํญ์ ์ฐพ์ง ๋ชปํ๋ค๋ฉด ์ด๊ฒ์ gtk ํ๋ก๊ทธ๋จ์ ์ฒซ ๋ฒ์งธ ์ค์ ๋ฃ์ด์ผ ํฉ๋๋ค.
C#
[STAThread]
public static void Main(string[] args)
{
//this MUST be the first line in the program or any text + the opengl window will cause it to segfault
OpenTK.Toolkit.Init ();
....
์ด๊ฒ์ x_multithreading๊ณผ ๊ฐ์ ์ด์ํ ๊ฒ ๋๋ฌธ์ gtk๊ฐ ์ด๊ธฐํ๋๊ธฐ ์ ์ OpenTK๊ฐ ๊ฑฐ๊ธฐ์ ๋ค์ด๊ฐ์ผ ํฉ๋๋ค. ์๋ฐํ ๋งํ๋ฉด ๊ฐ์ฅ ๋จผ์ ํด์ผ ํ ์ผ์ ์๋์ง๋ง ๊ฝค ์ผ์ฐ ํด์ผ ํฉ๋๋ค.
๋์์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ง์ ๋์ฐฉํ๋ฉด ์๋ํ๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
eto์ฉ OpenGL ์ปจํธ๋กค์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
์ ๋งํด ๋ณด์ ๋๋ค: https://github.com/philstopford/etoViewport.
๋ . etoViewport, WPF ๋ฐ GTK3 ์ง์์ผ๋ก ํ ์ ์์ง๋ง GTK3์ ์งํ ๋ฐฉ๋ฒ์ ๋ํด ์ด๋ฆฌ๋ฅ์ ํฉ๋๋ค. ํ์ํ Cairo ์ปจํ ์คํธ๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ด ๋ช ํํ์ง ์์ต๋๋ค.
etoViewport๊ฐ ์ด๋ป๊ฒ ํ๋์ง ๋ชจ๋ฅด์ง๋ง Gtk 3์๋ OpenGL ๋ ๋๋ง์ ์ํ GLArea ์์ ฏ์ด ์์ต๋๋ค. https://developer.gnome.org/gtk3/unstable/GtkGLArea.html
์ด๊ฒ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
@feliwir etoViewport๋ ํ์ฌ ์ต์ํ WPF, WinForms ๋ฐ macOS์์ ์๋ํฉ๋๋ค. GTK์ ์ํ๋ ํ์คํ์ง ์์ต๋๋ค.
GTK๋ VirtualBox/CentOS 7.x ๋ฐ VMWare/Linux Mint์์ ๋ด ํ ์คํธ์์ ์๋ํ๊ณ ์์ต๋๋ค. OpenGL ์ปจํธ๋กค์ด ๋ค๋ฅธ ๋ชจ๋ ์ฐฝ ์์ ๋ ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ VirtualBox์์ ํนํ ๋๋ผ์ด๋ฒ๊ฐ ์ฝ๊ฐ ์ด์ํ ์ ์์ต๋๋ค. VMWare์์๋ ๋ณผ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด VirtualBox์ ๋ฒ๊ทธ์ผ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ทธ๋ฌ๋ GTK3์ etoViewport์ ๋ํด ๊ตฌํ๋์ง ์์ต๋๋ค.
@philstopford OpenTK์ ๋ํ ์ข ์์ฑ์ด ๋ง์์ ๋ค์ง ์์ต๋๋ค. ์ ๊ฑฐํ ๊ณํ์ด ์์ต๋๊น/์ปจํ ์คํธ ์์ฑ์ ์ํ ์ฌ์ฉ์ ์ ์ ์ฝ๋ฐฑ์ ํ์ฉํฉ๋๊น?
๋ง์์ ์๋ค์ด์ ์ฃ์กํ์ง๋ง ์ ๊ทธ๋ฐ์ง ๋ชจ๋ฅด๊ฒ ๋ค์. ํ์ฌ ์ ๊ทผ ๋ฐฉ์์ด ํจ๊ณผ๊ฐ ์๋ค๋ฉด ํจ์น๋ฅผ ํ์ํฉ๋๋ค. ์ง์ ๋ณ๊ฒฝํ ๊ณํ์ ์์ต๋๋ค. OpenTK๋ ์ ๋ขฐํ ์ ์๋ ๋๊ตฌ์์ต๋๋ค. ์ด๊ธฐ OpenGL ์์ ์์ SharpGL์ ์ฌ์ฉํ ํ ํด๋น ํ๋ก์ ํธ๊ฐ ์ค๋จ๋์์ต๋๋ค. ์ด์ ๋์กฐ์ ์ผ๋ก OpenTK๋ ์ ๊ทน์ ์ผ๋ก ์ ์ง ๊ด๋ฆฌ๋๊ณ ๋ค์ค ํ๋ซํผ์ ๋๋ค.
์ด๋: https://github.com/picoe/Eto.Toolkit/issues/7
@cwensley ๋ซ์ ์ ์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
eto์ฉ OpenGL ์ปจํธ๋กค์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?