{"id":2825,"date":"2023-09-10T20:19:48","date_gmt":"2023-09-10T20:19:48","guid":{"rendered":"https:\/\/www.yazilimperver.com\/?p=2825"},"modified":"2023-10-09T18:25:06","modified_gmt":"2023-10-09T18:25:06","slug":"uengine4-seruveni-basicglpainter-i","status":"publish","type":"post","link":"https:\/\/www.yazilimperver.com\/index.php\/2023\/09\/10\/uengine4-seruveni-basicglpainter-i\/","title":{"rendered":"uEngine4 Ser\u00fcveni &#8211; BasicGLPainter &#8211; I"},"content":{"rendered":"<div>Evet sevgili dostlar daha \u00f6nce bahsetti\u011fim OpenGL tabanl\u0131 Painter s\u0131n\u0131f\u0131n\u0131n eksikliklerini tamamlay\u0131p, elini y\u00fcz\u00fcn\u00fc d\u00fczelterek sizlere sunmaktan b\u00fcy\u00fck mutluluk duyuyorum. Bu yaz\u0131mda sizlerle, SDLPainter ile ayn\u0131 mant\u0131\u011f\u0131 i\u00e7eren fakat tamamen OpenGL API\u2019sini kullanan BasicGLPainter k\u00fct\u00fcphanesini payla\u015f\u0131yor olaca\u011f\u0131m. Asl\u0131nda a\u015fa\u011f\u0131daki yaz\u0131mda bunlara az \u00e7ok de\u011finmi\u015ftim, bu yaz\u0131mda, ilave eklenen kabiliyetlere ve OpenGL\u2019e de\u011finiyor olaca\u011f\u0131m.<\/div>\n<div><\/div>\n<div><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2023\/06\/07\/uengine4-seruveni-giris-painter-siniflari\/\">uEngine4 Ser\u00fcveni &#8211; Giri\u015f (Painter S\u0131n\u0131flar\u0131)<\/a><\/strong><\/span><\/div>\n<div><\/div>\n<div>Bir de yaz\u0131m\u0131 iki b\u00f6l\u00fcme ay\u0131rd\u0131m a\u00e7\u0131k\u00e7as\u0131, bu sayede hem bilgi y\u00fcklemesinin daha dengeli olmas\u0131n\u0131 hem de \u00e7ok uzun bir yaz\u0131 olmas\u0131n\u0131n \u00f6n\u00fcne ge\u00e7meyi umut ediyorum.<\/div>\n<div>\n<p>Bu yaz\u0131ma ili\u015fkin haz\u0131rlad\u0131\u011f\u0131m \u00f6rnek uygulaman\u0131n, kaynak kodlar\u0131na ise a\u015fa\u011f\u0131daki adresten ula\u015fabilirsiniz:<\/p>\n<p><strong><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/github.com\/yazilimperver\/uEngine4\/tree\/main\/code\/src\/apps\/gl_example\">https:\/\/github.com\/yazilimperver\/uEngine4\/tree\/main\/code\/src\/apps\/gl_example<\/a><\/span><\/strong><\/p>\n<\/div>\n<div>\n<h1 data-usually-unique-id=\"295896412869040066058686\"><strong><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\" style=\"color: #0000ff;\">Giri\u015f<\/span><\/strong><\/h1>\n<\/div>\n<div><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\">\u015eimdi gelelim BasicGLPainter s\u0131n\u0131f\u0131m\u0131za. Her ne kadar, SDLPainter ile API imzalar\u0131n\u0131 benzer tutmaya \u00e7al\u0131\u015fsam da, aralar\u0131nda farkl\u0131l\u0131klar var. Bunlara ilerleyen b\u00f6l\u00fcmlerde de\u011finiyor olaca\u011f\u0131z. OpenGL detaylar\u0131na \u00e7ok girmeyece\u011fim, fakat yine de OpenGL ile ilgili dikkat edilmesi gereken konulara olabildi\u011fince de\u011finece\u011fim. Yine de merak etti\u011finiz konular\u0131 l\u00fctfen yorumlar k\u0131sm\u0131nda sormaktan \u00e7ekinmeyin.\u00a0<\/span><\/div>\n<div><\/div>\n<div><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\">Arkada pencere sistemi olarak yine SDL2 kullan\u0131yor olaca\u011f\u0131z<\/span> <span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi h-lparen\">(SDLApplication<\/span><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\"> \u00fczerinden), bu sebeple, bu anlamda \u00e7ok b\u00fcy\u00fck bir farkl\u0131l\u0131k yok.<\/span><\/div>\n<div><\/div>\n<div><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\">OpenGL s\u00fcr\u00fcm\u00fc olarak OpenGL 3.2 ayarl\u0131yor olaca\u011f\u0131m. Shader\u2019lar\u0131 kullanmayaca\u011f\u0131m \u00e7\u00fcnk\u00fc painter i\u00e7in \u015fu an \u00e7ok gerekli de\u011fil<\/span> <span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi h-lparen\">(ileride<\/span><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\"> duruma g\u00f6re buna da e\u011filebiliriz). Amac\u0131m, bu s\u0131n\u0131f\u0131 olabildi\u011fince yal\u0131n tutarken, 2B bir oyun, harita ve benzeri CBS tabanl\u0131 \u00e7izimler i\u00e7in gerekli kabiliyetleri sunacak seviyeye getirmek ki, \u015fu an \u00f6yle ve bu Painter s\u0131n\u0131f\u0131n\u0131 da CBS raster\/vekt\u00f6r katman g\u00f6sterimleri i\u00e7in kullan\u0131yor olaca\u011f\u0131z.<\/span><\/div>\n<div><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\">Bir \u00f6nceki yaz\u0131daki GL Painter\u2019a ilave olarak yap\u0131lanlar\u0131 a\u015fa\u011f\u0131daki sekmelerde \u00f6zetlemeye \u00e7al\u0131\u015ft\u0131m:<\/span><\/div>\n<ul class=\"listtype-bullet listindent1 list-bullet1\">\n<li><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\">Doku \u00e7izim kabiliyeti eklendi,<\/span><\/li>\n<li><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\">Metin \u00e7izim kabiliyeti eklendi,<\/span><\/li>\n<li><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\">\u201cStroke\u201d \u00e7izimine y\u00f6nelik g\u00fcncellemeler,<\/span><\/li>\n<li><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\">OpenGL \u00e7a\u011fr\u0131lar\u0131na ili\u015fkin g\u00fcncellemeler,<\/span><\/li>\n<li><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\">API isimlendirmeleri ortakland\u0131.<\/span><\/li>\n<\/ul>\n<div><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\">Bu arada <em>BasicGLPainter<\/em> s\u0131nf\u0131n\u0131n kabiliyetlerini daha iyi g\u00f6sterebilmek ad\u0131na \u00f6rnek bir uygulamay\u0131 da ekledim,<\/span> <span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi h-ldquo\">\u201c<em>gl_example<\/em>\u201d.<\/span><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\"> \u00d6rnek uygulama asl\u0131nda bir \u00f6nceki yaz\u0131mda SDL i\u00e7in haz\u0131rlad\u0131\u011f\u0131m \u00f6rne\u011fe \u00e7ok benzeyen bir \u00f6rnek haz\u0131rlad\u0131m<\/span> <span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi h-lparen\">(eksi\u011fi<\/span><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\"> \u00e7ok yok ama fazlas\u0131 var \ud83d\ude09\u00a0<\/span><\/div>\n<div>\n<h1 data-usually-unique-id=\"454129889804079668609501\"><span style=\"color: #0000ff;\"><strong><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\">SDL2 OpenGL Ayarlar\u0131<\/span><\/strong><\/span><\/h1>\n<\/div>\n<div><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\">\u00d6ncelikle SDL2\u2019yi OpenGL ile kullanmak i\u00e7in neler yapt\u0131\u011f\u0131ma ufak bir de\u011finece\u011fim. uEngine\u2019nin temel amac\u0131 bu tarz detaylar ile sizin bo\u011fu\u015fmaman\u0131z ama perde arkas\u0131nda neler oldu\u011funu da k\u0131saca g\u00f6stermenin faydal\u0131 olaca\u011f\u0131n\u0131z d\u00fc\u015f\u00fcnd\u00fcm. E\u011fer amac\u0131n\u0131z ekran \u00fczerinde h\u0131zl\u0131ca bir \u015feyler g\u00f6rmek ise bu ba\u015fl\u0131\u011f\u0131 atlayabilirsiniz.<\/span><\/div>\n<div><\/div>\n<div><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\">SDL ile ilgili ayarlamalar\u0131, <em>bool SdlApplication::InitializeSDL<\/em>() API\u2019si i\u00e7erisinde bulunan <em>InitializeWindows<\/em>() ve<em> InitializeOpenGL<\/em>() arac\u0131l\u0131\u011f\u0131 ile yap\u0131yoruz. Bu ayarlamalar\u0131n her ne kadar bir \u00e7o\u011fu varsay\u0131lan de\u011fer i\u00e7erse de, bunlar\u0131 bir JSON konfig\u00fcrasyon dosyas\u0131ndan da yapabiliyorsunuz.<\/span><\/div>\n<div><\/div>\n<div><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\">Gelelim <em>InitializeWindows<\/em>() API\u2019si i\u00e7erisinde neler yap\u0131yoruz:<\/span><\/div>\n<ul class=\"listtype-bullet listindent1 list-bullet1\">\n<li><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\">\u00d6ncelikli olarak OpenGL s\u00fcr\u00fcm bilgilerini \u00e7e\u015fitli API\u2019ler ile SDL\u2019e ge\u00e7iriyoruz. Bu ge\u00e7irdi\u011finiz parametrelere g\u00f6re kullanabildi\u011finiz OpenGL API\u2019leri de\u011fi\u015fiklik g\u00f6stermekte, bu sebeple bu ayarlar \u00f6nemli,<\/span><\/li>\n<li><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\">Buffer boyutland\u0131rmalar\u0131n\u0131 yap\u0131yoruz<\/span> <span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi h-lparen\">(\u00d6r.<\/span><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\"> Stencil buffer vermezseniz\/ayarlamazsan\u0131z, buna ili\u015fkin kabiliyette s\u0131k\u0131nt\u0131 ya\u015fars\u0131n\u0131z),<\/span><\/li>\n<li><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\">Son olarak, OpenGL \u00f6zellikleri ile pencereyi olu\u015fturuyoruz.<\/span><\/li>\n<\/ul>\n<div><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\"><em>InitializeOpenGL<\/em>() i\u00e7erisinde de asl\u0131nda temelde OpenGL extension\u2019lar\u0131n\u0131 kullanabilmek i\u00e7in glew k\u00fct\u00fcphanesini ilklendiriyoruz ve mevcut bilgisayar\u0131n destekledi\u011fi son OpenGL s\u00fcr\u00fcm\u00fcn\u00fc g\u00f6r\u00fcnt\u00fcleyebiliyorsunuz. A\u015fa\u011f\u0131da, SDLApplication uygulamas\u0131n\u0131n benim bilgisayar\u0131mda bu anlamda verdi\u011fi \u00e7\u0131kt\u0131y\u0131 g\u00f6rebilirsiniz:<\/span><\/div>\n<div>\n<pre class=\"lang:c++ decode:true\">[2023-09-10 13:51:25.087] [info] GLEW Init: Success! \r\n[2023-09-10 13:51:25.087] [info] Ready for OpenGL 2.0 \r\n[2023-09-10 13:51:25.087] [info] GL Version: 4.6.0 NVIDIA 531.29 \r\n[2023-09-10 13:51:25.088] [info] OpenGL initialization is successful!<\/pre>\n<p>Asl\u0131na bakars\u0131n\u0131z SDL i\u00e7erisinde yap\u0131lan temel ayarlar bu \u015fekilde. \u015eimdi biraz daha i\u015flevsel API\u2019lere de\u011finelim.<\/p>\n<\/div>\n<div>\n<h1 data-usually-unique-id=\"066746046172361063185931\"><strong><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\" style=\"color: #0000ff;\">Doku \u00c7izimi<\/span><\/strong><\/h1>\n<\/div>\n<div><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\">Doku \u00e7izimi asl\u0131nda oyun ve benzeri i\u00e7in en s\u0131k kullanaca\u011f\u0131n\u0131z kabiliyetlerden birisidir. Bu vesile ile resimleri ekranda g\u00f6sterebiliyoruz. GLPainter ile bunu yapabilmek i\u00e7in \u00f6ncelikle bu resim<\/span> <span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi h-lparen\">(daha<\/span><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\"> yayg\u0131n terminoloji ile doku<\/span> <span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi h-ldquo\">\u201ctexture\u201d)<\/span><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\"> dosyalar\u0131n\u0131 GPU\u2019ya aktarmam\u0131z gerekiyor. Bunun i\u00e7in uEngine, bir \u00e7ok format\u0131<\/span> <span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi h-lparen\">(.png,<\/span><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\"> .jpg, .vb) destekleyen resim y\u00fckleme kabiliyetini sizlere varsay\u0131lan olarak sunuyor. \u00a0\u0130lave formatlar i\u00e7in ilgili s\u0131n\u0131flar\u0131 yaz\u0131p dahil etmeniz gerekmekte.<\/span><\/div>\n<div><\/div>\n<div><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\">Bunun arkas\u0131nda yatan mekanizmaya de\u011finmeden \u00f6nce, resim g\u00f6stermek i\u00e7in izlemeniz gereken ad\u0131mlardan bahsediyor olaca\u011f\u0131m.\u00a0<\/span><\/div>\n<div><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\">\u0130lk olarak<\/span> <span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi h-ldquo\">\u201cSTBLoader\u201d\u2019\u0131<\/span><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\"> kullan\u0131yor olaca\u011f\u0131z. \u00d6ncelikle ilgili doku y\u00fckleyiciyi<\/span> <span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi h-ldquo\">\u201cAsset\u201d<\/span><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\"> servisinden sorguluyoruz ve sonra bununla dokuyu y\u00fckleyece\u011fiz. <\/span><\/div>\n<div>\n<pre class=\"lang:c++ decode:true\">\/\/ Alternatif 1\r\nmTextureAssetHandle = sdlApplication.AssetService().LoadAsset(\"STBImageLoader\", ASSET_ROOT_PATH + \"sprite.png\", \"dragon\");\r\n\r\n\/\/ Alternatif 2\r\n\/\/ Doku yukleyici kotaricisini alalim\r\nauto loaderHandle = sdlApplication.AssetService().LoaderHandle(\"STBImageLoader\");\r\n\r\n\/\/ Yukleyici mevcut ise ilgili dokuyu y\u00fckleyelim\r\nif (loaderHandle.has_value()) {\r\n   mTextureAssetHandle = sdlApplication.AssetService().LoadAsset(loaderHandle.value(), ASSET_ROOT_PATH + \"sprite.png\", \"dragon\");\r\n}<\/pre>\n<p><span class=\"lang author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\">B<\/span><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\">u kod par\u00e7as\u0131na ili\u015fkin ilave s\u00f6ylenebilecekler; <\/span>ASSET_ROOT_PATH\u2019i, resim ve benzeri dosyalar\u0131n dizinini CMake arac\u0131l\u0131\u011f\u0131 ile kod i\u00e7erisine aktar\u0131yoruz. Bu ama\u00e7la da CMake arac\u0131l\u0131\u011f\u0131 ile configuration.h, configuration.h.in dosyalar\u0131 ve a\u015fa\u011f\u0131daki betikler ile CMake \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda ilgili yol sabit bir std::string\u2019e ge\u00e7irilmekte. A\u015fa\u011f\u0131da CMake betiklerini de bulabilirsiniz:<\/p>\n<\/div>\n<div>\n<pre class=\"lang:c++ decode:true\"># Asset dizinini ayarlayalim\r\nset(EXAMPLE_ASSET_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR}\/..\/..\/..\/..\/assets\/gl_example_assets\/)\r\n\r\nconfigure_file (\"${CMAKE_CURRENT_SOURCE_DIR}\/configuration.h.in\"\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\"${CMAKE_CURRENT_SOURCE_DIR}\/configuration.h\" )<\/pre>\n<p><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\">mTextureHandle<\/span> <span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi h-lparen\">(std::optional&lt;AssetHandle&gt;)<\/span><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\"> ba\u015far\u0131l\u0131 bir \u015fekilde y\u00fcklendikten sonra s\u0131ra bunun g\u00f6sterilmesine geldi. Bunun i\u00e7in yapman\u0131z gereken \u00e7a\u011fr\u0131lar\u0131 ise a\u015fa\u011f\u0131da veriyorum:<\/span><\/p>\n<\/div>\n<div>\n<pre class=\"lang:c++ decode:true\">if (mTextureAssetHandle.has_value()) {\r\n\u00a0 \u00a0 auto textureAsset = std::static_pointer_cast&lt;gl::TextureAsset&gt;(mSDLApplication-&gt;AssetService().SharedAsset(mTextureAssetHandle.value()));\r\n\r\n\u00a0 \u00a0 \/\/ Resmi renklendirmek icin\r\n\u00a0 \u00a0 mPainter.AssignBrush(Brush{ Color::White });\r\n\u00a0 \u00a0 mPainter.DrawTexture(textureAsset.get(), Vector2f{100, 420}, 120, 120);\r\n}<\/pre>\n<p><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\">\u00d6ncelikle y\u00fckledi\u011fimiz resmi AssetService\u2019ten \u00e7ekiyoruz<\/span> <span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi h-lparen\">(bunu<\/span><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\"> ba\u015fta da yapabilirsiniz ya da kendi uygulaman\u0131zda \u00f6zelle\u015ftirebilirsiniz).<\/span><\/p>\n<\/div>\n<div><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\">Sonras\u0131nda daha \u00f6nceki payla\u015ft\u0131\u011f\u0131m yaz\u0131da verdi\u011fim f\u0131r\u00e7ay\u0131 da kullan\u0131yoruz, bunu da resmi renklendirmek i\u00e7in yap\u0131yoruz. Resmin kendi renklerin kullanmak i\u00e7in beyaz f\u0131r\u00e7a kullanabilirsiniz.\u00a0<\/span><\/div>\n<div><\/div>\n<div><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\">Son olarak da, <em>DrawTexture\u2019\u0131<\/em> kullanarak ilgili Asset ve \u00e7izilecek konuma ili\u015fkin bilgileri kullan\u0131yoruz<\/span> <span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi h-lparen\">(merkez,<\/span><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\"> geni\u015flik\/y\u00fckseklik).<\/span><\/div>\n<div><\/div>\n<div><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\">OpenGL i\u00e7in kullan\u0131lan dokunun tutulmas\u0131ndan sorumlu s\u0131n\u0131flara,<\/span> <span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi h-ldquo\">\u201cgl\/gl_texture\u201d<\/span><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\"> projesi alt\u0131ndan ula\u015fabilirsiniz. Burada da en \u00f6nemli s\u0131n\u0131f TextureAsset, bu s\u0131n\u0131f, y\u00fckledi\u011fimiz dokulara<\/span> <span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi h-lparen\">(farkl\u0131<\/span><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\"> y\u00fckleyiciler olsa da) ili\u015fkin OpenGL i\u015flevlerini uygulamam\u0131za olanak sa\u011fl\u0131yor ve Asset s\u0131n\u0131f\u0131m\u0131zdan t\u00fcr\u00fcyor. Zaten, OpenGL i\u00e7in SDL\u2019den farkl\u0131 s\u0131n\u0131flar\u0131\/asset\u2019leri kullan\u0131yor olsak da mekanizma ve y\u00f6netici s\u0131n\u0131flar ayn\u0131<\/span> <span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi h-lparen\">(AssetLoader,<\/span><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\"> Asset, AssetService), merakl\u0131 okuyucular\u0131m,<\/span> <span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi h-ldquo\">\u201cinfra\/asset\u201d<\/span><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\"> projesini inceleyebilir. \u0130n\u015fallah ayr\u0131 bir yaz\u0131da, bu mekanizmadan da bahsederim.<\/span><\/div>\n<div><\/div>\n<div><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\">Sizler de, farkl\u0131 y\u00fckleyiciler ve resimler ile bu kabiliyeti denemeyi unutmay\u0131n.<\/span><\/div>\n<div>\n<h1 data-usually-unique-id=\"429313477029136208833826\"><strong><span class=\" author-d-1gg9uz65z1iz85zgdz68zmqkz84zo2qowz80ziz75zz89zoz68zhuz67zc7z79zwjgl4wz67zz75zs1ag0z122zz75zoz122zz87zi\" style=\"color: #0000ff;\">Metin \u00c7izimi<\/span><\/strong><\/h1>\n<\/div>\n<div>\n<p data-usually-unique-id=\"257824187366267222903295\">\u015eimdi gelelim metin \u00e7izimine. OpenGL ile bir miktar ha\u015f\u0131r ne\u015fir olanlar, metin \u00e7izimlerinin her OpenGL geli\u015ftiricisi i\u00e7in farkl\u0131 bir deneyim oldu\u011funu ve b\u00fcy\u00fck bir k\u0131sm\u0131 i\u00e7in de, \u00f6zellikle ba\u015flang\u0131\u00e7ta, zorlay\u0131c\u0131 bir deneyim oldu\u011funu ifade ederler (bknz. <a href=\"https:\/\/www.reddit.com\/r\/opengl\/comments\/qhijjb\/i_hate_font_rendering\/\"><span style=\"color: #008000;\"><strong>h<\/strong><strong>ttps:\/\/www.reddit.com\/r\/opengl\/comments\/qhijjb\/i_hate_font_rendering\/<\/strong><\/span><\/a> \ud83d\ude42 ) . Burada amac\u0131m sizleri bu k\u00fclfetten kurtarmak. SDLPainter i\u00e7in metin \u00e7izimine y\u00f6nelik bir t\u0131k daha fazla imkan olsa da, OpenGL taraf\u0131nda da olduk\u00e7a g\u00fc\u00e7l\u00fc ve \u00e7e\u015fitli y\u00f6ntem mevcut. Ben, Painter s\u0131n\u0131f\u0131m i\u00e7in FreeType k\u00fct\u00fcphanesi kullan\u0131lmas\u0131na dayanan y\u00f6ntemi se\u00e7tim. Bunun d\u0131\u015f\u0131nda, bir di\u011fer temel y\u00f6ntem de bitmap fontlar. Belki ileride bunu da s\u0131n\u0131f\u0131m\u0131za katar\u0131z. FreeType k\u00fct\u00fcphanesine, bunun nas\u0131l kullan\u0131ld\u0131\u011f\u0131n\u0131, vb detaylara burada girmiyorum, keza girsem \u00e7\u0131kamayabilirim (talebe g\u00f6re ayr\u0131 bir yaz\u0131 kaleme alabilirim). O nedenle, bu konuda olduk\u00e7a doyurucu ve g\u00fczel olan iki kayna\u011f\u0131, kaynaklar k\u0131sm\u0131na ekliyorum. Fakat merakl\u0131 takip\u00e7ilerim i\u00e7in bakacaklar\u0131 s\u0131n\u0131flar, gl_painter projesi alt\u0131ndaki, gl_font, gl_texture, gl_sprite_sheet ve tabi ki freetype2 projesi.<\/p>\n<p data-usually-unique-id=\"257824187366267222903295\">\u015eu an i\u00e7in OpenGL tabanl\u0131 metin \u00e7izim kabiliyetlerinde, SDL&#8217;de oldu\u011fu gibi italik\/kal\u0131n \u00e7izim ya da s\u00fctun \u00e7izimi gibi kabiliyetler mevcut de\u011fil :(, elbette ileride olabilir \ud83d\ude09 Sadece, boyutland\u0131rma ve renklendirme mevcut (yak\u0131nda hizalamay\u0131 da kat\u0131yor olaca\u011f\u0131z).<\/p>\n<p data-usually-unique-id=\"257824187366267222903295\">Gelelim metin \u00e7izimi i\u00e7in izlemeniz gereken y\u00f6nteme. \u00d6ncelikle, SDLPainter&#8217;da oldu\u011fu gibi kullanaca\u011f\u0131m\u0131z fontlar\u0131 kaydetmemiz gerekiyor. \u00d6rnek uygulamada bunu a\u015fa\u011f\u0131daki sat\u0131rlar ile yap\u0131yoruz.<\/p>\n<pre class=\"lang:c++ decode:true \">\/\/ GL Painter'a yonelik ilkendirmeleri yapalim\r\nmPainter.RegisterFont(\"FreeSans_10\", ASSET_ROOT_PATH + R\"(FreeSans.ttf)\", 10);\r\nmPainter.RegisterFont(\"FreeSans_12\", ASSET_ROOT_PATH + R\"(FreeSans.ttf)\", 12);\r\nmPainter.RegisterFont(\"FreeSans_13\", ASSET_ROOT_PATH + R\"(FreeSans.ttf)\", 13);\r\nmPainter.RegisterFont(\"FreeSans_20\", ASSET_ROOT_PATH + R\"(FreeSans.ttf)\", 20);\r\nmPainter.RegisterFont(\"DefaultLazyFont_12\", ASSET_ROOT_PATH + R\"(lazy.ttf)\", 20);\r\nmPainter.SetActiveFont(\"FreeSans_10\");<\/pre>\n<p>Burada ilgili fonta verdi\u011fimiz etiket ve dosya dizininden (ASSET_ROOT_PATH&#8217;e yukar\u0131da de\u011findim) y\u00fckleyerek, ilgili boyut i\u00e7in haz\u0131rl\u0131yoruz. <em>SetActiveFont()<\/em> ile de ilgili aktif fontu at\u0131yoruz. Bu API&#8217;lerin d\u00f6n\u00fc\u015f de\u011feri ilgili i\u015flevin ba\u015far\u0131l\u0131 olup olmad\u0131\u011f\u0131n\u0131 d\u00f6n\u00fcyor, isterseniz kontrol edebilirsiniz.<\/p>\n<p>Peki \u00e7izim i\u00e7in ne yap\u0131yoruz? \u0130lgili kalem nesnesini atayarak, <em>SimpleText<\/em>() API&#8217;si ile \u00e7izimi ger\u00e7ekle\u015ftirebiliyoruz.<\/p>\n<pre class=\"lang:c++ decode:true\">mPainter.SetActiveFont(\"FreeSans_20\");\r\nstd::string text{ \"[Text] Merhaba Dunya_Merkez\" };\r\nmPainter.AssignPen(gl::Pen{ gl::PenStyle::SolidLine, Color::Blue, 2 });\r\nmPainter.SimpleText(screenCenter - glm::vec2{ text.size() \/ 2 * 10, 10 \/ 2 }, text);<\/pre>\n<p data-usually-unique-id=\"257824187366267222903295\">Evet sevgili yaz\u0131l\u0131mperver dostlar\u0131m, bu yaz\u0131m i\u00e7in yeterince kabiliyet i\u015fledik. Bir sonraki yaz\u0131mda, kalan bir tak\u0131m kabiliyetlere (stencil,\u00a0 vb.) de\u011finiyor olaca\u011f\u0131m. Tabi, bu yaz\u0131y\u0131 bir ekran g\u00f6r\u00fcnt\u00fcs\u00fc vermeden kapatmayaca\u011f\u0131m \ud83d\ude42 A\u015fa\u011f\u0131da, yaz\u0131l\u0131m\u0131n windows platformu i\u00e7in \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda g\u00f6r\u00fclen ekran g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc g\u00f6rebilirsiniz. Bir sonraki yaz\u0131mda g\u00f6r\u00fc\u015fmek dile\u011fiyle.<\/p>\n<p id=\"FXxsMqG\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2830 \" src=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2023\/09\/img_64fe22eabbbf9.png\" alt=\"\" width=\"610\" height=\"483\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2023\/09\/img_64fe22eabbbf9.png 820w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2023\/09\/img_64fe22eabbbf9-300x237.png 300w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2023\/09\/img_64fe22eabbbf9-768x608.png 768w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2023\/09\/img_64fe22eabbbf9-500x396.png 500w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2023\/09\/img_64fe22eabbbf9-150x119.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2023\/09\/img_64fe22eabbbf9-400x317.png 400w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2023\/09\/img_64fe22eabbbf9-800x633.png 800w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2023\/09\/img_64fe22eabbbf9-200x158.png 200w\" sizes=\"auto, (max-width: 610px) 100vw, 610px\" \/><\/p>\n<\/div>\n<div><\/div>\n<div>\n<h1><span style=\"color: #0000ff;\"><strong>Kaynaklar<\/strong><\/span><\/h1>\n<ul>\n<li><a href=\"https:\/\/www.reddit.com\/r\/opengl\/comments\/qhijjb\/i_hate_font_rendering\/\"><span style=\"color: #008000;\"><strong>https:\/\/www.reddit.com\/r\/opengl\/comments\/qhijjb\/i_hate_font_rendering\/<\/strong><\/span><\/a><\/li>\n<li><a href=\"https:\/\/learnopengl.com\/In-Practice\/Text-Rendering\"><span style=\"color: #008000;\"><strong>https:\/\/learnopengl.com\/In-Practice\/Text-Rendering<\/strong><\/span><\/a><\/li>\n<li><a href=\"https:\/\/nehe.gamedev.net\/tutorial\/freetype_fonts_in_opengl\/24001\/\"><span style=\"color: #008000;\"><strong>https:\/\/nehe.gamedev.net\/tutorial\/freetype_fonts_in_opengl\/24001\/<\/strong><\/span><\/a><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Evet sevgili dostlar daha \u00f6nce bahsetti\u011fim OpenGL tabanl\u0131 Painter s\u0131n\u0131f\u0131n\u0131n eksikliklerini tamamlay\u0131p, elini y\u00fcz\u00fcn\u00fc d\u00fczelterek sizlere sunmaktan b\u00fcy\u00fck mutluluk duyuyorum. Bu yaz\u0131mda sizlerle, SDLPainter ile ayn\u0131 mant\u0131\u011f\u0131 i\u00e7eren fakat tamamen OpenGL API\u2019sini kullanan BasicGLPainter k\u00fct\u00fcphanesini payla\u015f\u0131yor olaca\u011f\u0131m. Asl\u0131nda a\u015fa\u011f\u0131daki yaz\u0131mda bunlara az \u00e7ok de\u011finmi\u015ftim, bu yaz\u0131mda, ilave eklenen kabiliyetlere ve OpenGL\u2019e de\u011finiyor olaca\u011f\u0131m. uEngine4 Ser\u00fcveni&#8230; <a class=\"more-link\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2023\/09\/10\/uengine4-seruveni-basicglpainter-i\/\">Continue reading <span class=\"meta-nav\">&#8594;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[10,41,25],"tags":[1101,1104,334,1096,1102,1103,1100,1041],"class_list":["post-2825","post","type-post","status-publish","format-standard","hentry","category-c","category-modern-c","category-oyun-gelistirme","tag-devil","tag-freetype2","tag-opengl","tag-painter","tag-stbloader","tag-text-rendering","tag-texture","tag-uengine4"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>uEngine4 Ser\u00fcveni - BasicGLPainter - I - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2023\/09\/10\/uengine4-seruveni-basicglpainter-i\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"uEngine4 Ser\u00fcveni - BasicGLPainter - I - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"og:description\" content=\"Evet sevgili dostlar daha \u00f6nce bahsetti\u011fim OpenGL tabanl\u0131 Painter s\u0131n\u0131f\u0131n\u0131n eksikliklerini tamamlay\u0131p, elini y\u00fcz\u00fcn\u00fc d\u00fczelterek sizlere sunmaktan b\u00fcy\u00fck mutluluk duyuyorum. Bu yaz\u0131mda sizlerle, SDLPainter ile ayn\u0131 mant\u0131\u011f\u0131 i\u00e7eren fakat tamamen OpenGL API\u2019sini kullanan BasicGLPainter k\u00fct\u00fcphanesini payla\u015f\u0131yor olaca\u011f\u0131m. Asl\u0131nda a\u015fa\u011f\u0131daki yaz\u0131mda bunlara az \u00e7ok de\u011finmi\u015ftim, bu yaz\u0131mda, ilave eklenen kabiliyetlere ve OpenGL\u2019e de\u011finiyor olaca\u011f\u0131m. uEngine4 Ser\u00fcveni... Continue reading &#8594;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.yazilimperver.com\/index.php\/2023\/09\/10\/uengine4-seruveni-basicglpainter-i\/\" \/>\n<meta property=\"og:site_name\" content=\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2023-09-10T20:19:48+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-10-09T18:25:06+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2023\/09\/img_64fe22eabbbf9.png\" \/>\n<meta name=\"author\" content=\"yaz\u0131l\u0131mperver\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"yaz\u0131l\u0131mperver\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2023\/09\/10\/uengine4-seruveni-basicglpainter-i\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2023\/09\/10\/uengine4-seruveni-basicglpainter-i\/\"},\"author\":{\"name\":\"yaz\u0131l\u0131mperver\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"headline\":\"uEngine4 Ser\u00fcveni &#8211; BasicGLPainter &#8211; I\",\"datePublished\":\"2023-09-10T20:19:48+00:00\",\"dateModified\":\"2023-10-09T18:25:06+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2023\/09\/10\/uengine4-seruveni-basicglpainter-i\/\"},\"wordCount\":1608,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"keywords\":[\"devil\",\"freetype2\",\"OpenGL\",\"painter\",\"stbloader\",\"text rendering\",\"texture\",\"uengine4\"],\"articleSection\":[\"C++\",\"Modern C++\",\"Oyun Geli\u015ftirme\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2023\/09\/10\/uengine4-seruveni-basicglpainter-i\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2023\/09\/10\/uengine4-seruveni-basicglpainter-i\/\",\"url\":\"https:\/\/www.yazilimperver.com\/index.php\/2023\/09\/10\/uengine4-seruveni-basicglpainter-i\/\",\"name\":\"uEngine4 Ser\u00fcveni - BasicGLPainter - I - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#website\"},\"datePublished\":\"2023-09-10T20:19:48+00:00\",\"dateModified\":\"2023-10-09T18:25:06+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2023\/09\/10\/uengine4-seruveni-basicglpainter-i\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2023\/09\/10\/uengine4-seruveni-basicglpainter-i\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2023\/09\/10\/uengine4-seruveni-basicglpainter-i\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Ana sayfa\",\"item\":\"https:\/\/www.yazilimperver.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"uEngine4 Ser\u00fcveni &#8211; BasicGLPainter &#8211; I\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.yazilimperver.com\/#website\",\"url\":\"https:\/\/www.yazilimperver.com\/\",\"name\":\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"description\":\"Payla\u015fmak g\u00fczeldir.\",\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.yazilimperver.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\",\"name\":\"yaz\u0131l\u0131mperver\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png\",\"contentUrl\":\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png\",\"caption\":\"yaz\u0131l\u0131mperver\"},\"logo\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"uEngine4 Ser\u00fcveni - BasicGLPainter - I - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.yazilimperver.com\/index.php\/2023\/09\/10\/uengine4-seruveni-basicglpainter-i\/","og_locale":"tr_TR","og_type":"article","og_title":"uEngine4 Ser\u00fcveni - BasicGLPainter - I - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","og_description":"Evet sevgili dostlar daha \u00f6nce bahsetti\u011fim OpenGL tabanl\u0131 Painter s\u0131n\u0131f\u0131n\u0131n eksikliklerini tamamlay\u0131p, elini y\u00fcz\u00fcn\u00fc d\u00fczelterek sizlere sunmaktan b\u00fcy\u00fck mutluluk duyuyorum. Bu yaz\u0131mda sizlerle, SDLPainter ile ayn\u0131 mant\u0131\u011f\u0131 i\u00e7eren fakat tamamen OpenGL API\u2019sini kullanan BasicGLPainter k\u00fct\u00fcphanesini payla\u015f\u0131yor olaca\u011f\u0131m. Asl\u0131nda a\u015fa\u011f\u0131daki yaz\u0131mda bunlara az \u00e7ok de\u011finmi\u015ftim, bu yaz\u0131mda, ilave eklenen kabiliyetlere ve OpenGL\u2019e de\u011finiyor olaca\u011f\u0131m. uEngine4 Ser\u00fcveni... Continue reading &#8594;","og_url":"https:\/\/www.yazilimperver.com\/index.php\/2023\/09\/10\/uengine4-seruveni-basicglpainter-i\/","og_site_name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","article_published_time":"2023-09-10T20:19:48+00:00","article_modified_time":"2023-10-09T18:25:06+00:00","og_image":[{"url":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2023\/09\/img_64fe22eabbbf9.png"}],"author":"yaz\u0131l\u0131mperver","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"yaz\u0131l\u0131mperver","Tahmini okuma s\u00fcresi":"7 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.yazilimperver.com\/index.php\/2023\/09\/10\/uengine4-seruveni-basicglpainter-i\/#article","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2023\/09\/10\/uengine4-seruveni-basicglpainter-i\/"},"author":{"name":"yaz\u0131l\u0131mperver","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"headline":"uEngine4 Ser\u00fcveni &#8211; BasicGLPainter &#8211; I","datePublished":"2023-09-10T20:19:48+00:00","dateModified":"2023-10-09T18:25:06+00:00","mainEntityOfPage":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2023\/09\/10\/uengine4-seruveni-basicglpainter-i\/"},"wordCount":1608,"commentCount":0,"publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"keywords":["devil","freetype2","OpenGL","painter","stbloader","text rendering","texture","uengine4"],"articleSection":["C++","Modern C++","Oyun Geli\u015ftirme"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.yazilimperver.com\/index.php\/2023\/09\/10\/uengine4-seruveni-basicglpainter-i\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.yazilimperver.com\/index.php\/2023\/09\/10\/uengine4-seruveni-basicglpainter-i\/","url":"https:\/\/www.yazilimperver.com\/index.php\/2023\/09\/10\/uengine4-seruveni-basicglpainter-i\/","name":"uEngine4 Ser\u00fcveni - BasicGLPainter - I - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/#website"},"datePublished":"2023-09-10T20:19:48+00:00","dateModified":"2023-10-09T18:25:06+00:00","breadcrumb":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2023\/09\/10\/uengine4-seruveni-basicglpainter-i\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.yazilimperver.com\/index.php\/2023\/09\/10\/uengine4-seruveni-basicglpainter-i\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.yazilimperver.com\/index.php\/2023\/09\/10\/uengine4-seruveni-basicglpainter-i\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Ana sayfa","item":"https:\/\/www.yazilimperver.com\/"},{"@type":"ListItem","position":2,"name":"uEngine4 Ser\u00fcveni &#8211; BasicGLPainter &#8211; I"}]},{"@type":"WebSite","@id":"https:\/\/www.yazilimperver.com\/#website","url":"https:\/\/www.yazilimperver.com\/","name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","description":"Payla\u015fmak g\u00fczeldir.","publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.yazilimperver.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb","name":"yaz\u0131l\u0131mperver","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/","url":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png","contentUrl":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png","caption":"yaz\u0131l\u0131mperver"},"logo":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2825","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/comments?post=2825"}],"version-history":[{"count":11,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2825\/revisions"}],"predecessor-version":[{"id":2854,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2825\/revisions\/2854"}],"wp:attachment":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/media?parent=2825"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/categories?post=2825"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/tags?post=2825"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}